Tech/software updates
Just sharing two software/workflow changes I’ve made recently, and why they’re improvements over what I had before.
Window management: Magnet → Rectangle
I bought Magnet ages ago, back when it first came out. At the time it was pretty much the only reliable window management system around.
Recently I learned about Rectangle, which does largely the same thing, but is free, opensource, and has a few other nice changes, and after trying it out a bit I switched. Here’s some of what it does better:
- There are more configurable shortcuts for a bunch of things
- It does a better job of integrating with macOS Tahoe and lets you much more easily switch between its drag-snap behavior and Tahoe’s built-in
- Its drag-snap behavior is a lot better than both Tahoe’s and Magnet’s, so far
- Its hotkeys don’t get as easily confused by other things
- It doesn’t occasionally pop up any annoying “Please rate us on the Mac App Store” dialogs, which are a giant pet peeve of mine
Text editing: Sublime Text → Gram
I’ve been a big fan of Sublime Text for a bit over a decade, ever since I started at HBO and needed to edit more JavaScript, which Emacs wasn’t very good at. I happily paid for version 3.0 and enjoyed it for quite a time, and put in a lot of effort to wrangle its many extensions and settings sync functionality and so on.
When 4.0 came out they changed the licensing scheme, and also changed a bunch of the UX in ways I didn’t particularly like, so I didn’t have any reason to upgrade.
Then the 3.0 packages got more and more ornery to maintain, and it was super easy for settings to get broken and crufty and for things to just get weird and slow and annoying.
Anyway, I’ve been running the macOS Developer Beta on one of my computers and today after it updated I got a big warning that since Sublime Text 3 is Intel-only it will no longer be supported by macOS in the not-too-distant future.
At one point I’d been evaluating Zed and it was nice and simple, except it also came with a whole bunch of agentic coding stuff built-in and it was constantly nagging me and getting in the way. As you might imagine, I do not care for agentic coding, and Zed’s increasing marketing towards being Everything Agentic really rubbed me the wrong way.
More recently I found out about Gram, a fork of Zed that’s been decrapified, cleaned up, and generally improved in terms of being more humane and so on. So tonight I gave it a try, and while there’s still a few things I don’t super love about it (for example, you can’t detach tabs from a window frame or move them between frames), there’s a bunch that it gets right:
- The package management is built in and generally does a good job of figuring out what binaries to install for you
- It’s super fast and responsive-feeling
- Out of the box it has support for every language I use and then some
- The language server functionality actually works really nicely, and it integrates with my various package managers pretty well
- It convinced me to switch from mypy to ty which is faster, much more thorough, and provides a much nicer UX for suggesting fixes
- The settings editor is quite good! And setting up per-folder project files is sensible and easy!
- Also, a big one: open buffers follow filename changes on the file system! This makes my blogging workflow so much easier than it was in Sublime Text! (This is something Sublime Text did add in version 4, that said.)
- It doesn’t try to do extraneous quote matching in Markdown files, so basic English punctuation doesn’t confuse the heck out of it. Gee willikers!
- The settings sync just fine with Syncthing
- It has some really nice things for interpreting Markdown document structure that I only just noticed while editing this entry, neat!
I’m currently using it with Cascadia Code and the built-in One Light/One Dark themes and it’s pretty nice-looking.
There’s still some rough spots:
- It’s a little annoying how I have to provide a filename when I create a new file, which means a slightly different workflow for when I’m blogging
- ty seems to behave differently between CLI and IDE, especially for things like PySide6, for reasons I can’t figure out, and this is causing a lot of annoyances when working on bandcrash in particular (but I suspect it’s more of a Qt issue and I really need to investigate better GUI toolkits anyway)
- The autoindent functionality on Markdown is a little wonky, especially for things like code fences and bullet lists
- I’m not quite sure how to get it to use my Poetry environment for module loading on Publ sites and there’s probably something I’m misunderstanding about how its environment support works (and its docs aren’t super clear on that either); it’s supposed to automatically use a Poetry environment if it detects one but it doesn’t seem to be doing that.
but most of these are just things to get used to, or things I can fix through understanding configuration. There’s also a bunch of display preferences that I find interesting but weird, like by default it only shows the absolute line number for the line you’re on and then all other line numbers are shown as relative to the current line. I’m not sure if I like that or not, but it’s easy enough to toggle it.
Also I should maybe finally make a Publ-Markdown formatting thingy because Gram’s Markdown highlighter gets confused by Publ’s Markdown extensions (particularly image sets), although it’s no worse than Sublime Text’s and if anything it recovers much more gracefully.
Setting up setting sync
This is pretty straightforward. On my first computer I did:
mv ~/.config/gram ~/Sync ln -s ~/Sync/gram ~/.config
and on my other computers I did:
ln -s ~/Sync/gram ~/.config
and now everything works great. This applies to both macOS and Linux. I have no idea where the settings live on Windows, but I don’t do any coding from Windows anymore.
Comments
To see the comments on this entry, please log in. Alternately, send me an email, or join me on Discord!