Over the past couple of years, the way I use my computer to make software has more or less “solidified” – I have a small set of tools, and a method of using them together, which I can set up on a new laptop quickly and which is adaptable to pretty much every software task I’ve needed to tackle so far. It’s the result of walking across my digital campus many times, then paving the paths of desire that appeared.
I thought it might be fun to document it, in case this is interesting to anyone!
(If you like this and want to see more, check out the awesome-uses repo on Github)
Hardware
- A Macbook Pro, whatever the smallest model is
- My funky keyboard, placed on top of the Macbook’s built-in one
And that’s it! Pretty minimal, no extra monitors, etc. I’m not opposed to them, I just tend to move around a lot when I’m working so any tech that tethers me to one place usually just ends up being annoying.
Desktops
I make heavy use of Spaces, the multiple-desktop solution built in to macOS.
I always have 4 spaces, each of which handles a certain kind of task, and while the actual application that “lives” in each space might change, the conceptual purpose of the space never does.
These are the purposes:
- A terminal
- A text editor
- A web browser
- A chat app
Additionally, they’re in a very specific order – the one listed above. Each space is located nearest to the other spaces with which it’s most often used. For example, it’s very common to use the terminal and the text editor alongside one another (maybe changing some code then compiling it?), but not so common to need to flip between the terminal and the chat (maybe sending a coworker the output of some command?), so those can be further apart.
This locality is the key to the setup’s efficiency!
Desktop 1: Terminal
For the terminal, I currently just use Terminal.app, the terminal built in to macOS. There are a number of popular alternatives, like iTerm2, but I’ve never felt compelled to switch.
Homebrew:
- ripgrep, an amazingly fast grep (since I never trust an IDE’s “find usages” function)
- fzf, the foundation for a bunch of delightful shell scripts
- fastmod, a tool for safely executing changes to many files at once
- diff-so-fancy, a clean and stylish replacement for the default git diff pager
Desktop 2: Text Editor
For the text editor, I’ve been using Sublime Text for as long as I can remember, and I hope I can keep using it forever. Super lightweight (not an electron app), doesn’t choke on massive files, a huge library of plugins – what more could you want?
Packages:
- AlignTab, helps manage whitespace or comma alignment super easily
- Compare Side-By-Side, handy for seeing a quick visual diff of two open tabs
- GitGutter, to quickly find the place I’ve been editing in big files
- SideBarEnhancements, adds so many features you never need to open the file explorer
- Sublime Github, for easily viewing blames or sending code highlights to coworkers
Desktop 3: Web Browser
For the web browser, I use Firefox, because it’s a great browser and because I don’t want to live in a world where the one single gateway to the internet is controlled by a trillion-dollar ad corporation. If you’re considering a switch, try it, you won’t miss Chrome!
Extensions:
- uBlock Origin, the only ad blocker I ever want to use – open source and super efficient
- Privacy Badger, smart tracker blocking (from video players, widgets) by the EFF
- Decentraleyes, even more tracker blocking (by intercepting CDN requests)
- Panorama View, for managing an absolute rat’s nest of open tabs (long live Panorama)
Desktop 4: Chat
For chat, I usually don’t get a choice, it’s just whatever my workplace uses for communication. Historically it’s been Slack, which can’t be modified or extended in any way.
The Rest
I usually have at least a few other applications installed, like Deckset for creating presentations from markdown (really great software, check it out) and Telegram for messaging friends.
For fonts, I’m usually using one of Iosevka, which is skinny and great for fitting long log lines onto a tiny laptop screen, or Inconsolata or Roboto Mono, which are both remarkably readable for being monospaced fonts.