What I use
Hardware
My main workstation is a 2021 Macbook Pro with the M1 Pro chip. The hardware is fantastic in almost every way, but the software is a bit of a downgrade 1 from a solid Linux setup.
When working from my desk, I use a Microsoft Sculpt Ergonomic keyboard2, and a big additional monitor. Using a laptop stand to lift the laptop to eye level is a must.
Software
In my Mac setup, I heavily utilize yabai, skhd and karabiner-elements. With enough tinkering, it is possible to recreate most of the i3 tiling manager experience. 3 My setup is based on these dotfiles.
For Linux desktops, I use Arch Linux (btw) with i3. 4
Most of my coding happens using the laptop as a thin client
to a remote server. Visual Studio
Code and its forks are very good for this, especially for
remote development over SSH. All of these editors have Github
Copilot support, which is unbelievably cheap for what it does. I
currently prefer Cursor, in
spite of being double the price of Copilot and its incomplete VS
Code feature set and because its AI features are (as of Oct
2024) much better than anything you can get in VS Code. The tier
list of Cursor features is: Cmd+I > Cmd+K in terminal ~
Cursor Copilot > Cmd+L > Cmd+K in code. I write a new
.cursorrules
file every time a project grows beyond
10 files or so.
Some indispensable VS Code / Cursor extensions are JSON Lines Viewer, LaTeX Workshop. I like ruff as a pre-commit hook, and if you use that, use the Ruff extension too.
For navigating inside a terminal, fzf and z are indispensable. You should set unlimited history size.
When I am not inside the Cursor terminal (where Cmd+K is fantastic), I also like Simon Willison’s suite of tools: llm, llm-cmd and files-to-prompt.
You should always install Python-based global tools with pipx instead of pip or something in a virtual environment. For virtual environments, ditch any Conda-like software, and just use uv venv.
For automating git commit messages, opencommit is decent, if a bit verbose.
For quick scripts, I use Neovim, with various plugins installed via vim-plug. For general LLM interactions, I paid for TypingMind. Certain types of notes are better taken in org-mode in Spacemacs. It is simple, local-first, has Vim keybindings, and can render inline LaTeX fine. However, I prefer Google Docs for anything collaborative, as well for my weekly planning.
For keeping work todos, I use Asana. Recently I’ve subscribed to Setapp, mostly for Timing and Cleanshot X. I do not recommend Bartender anymore as of Oct 2024, and recommend paying $5 for Ice instead.
I endorse Anki, especially the mobile version.
Web
I use Firefox with the following life-saving extensions: vimium, OneTab, uBlock Origin, Enhancer for Youtube, and Tab Notes. I am consistently impressed by how much value Tab Notes brings me in particular.
In Firefox (and perhaps other browsers), you can add bookmarks to LLMs and search engines like this:
- Name: ChatGPT
- URL: https://chatgpt.com/?q=%s
- Keyword: c
- Name: Claude AI
- URL: https://claude.ai/new?q=%s
- Keyword: cl
Travel accessories
The following travel accessories bring quite a lot of value:
- packing cubes (Go Travel is fine, one if backpack, two if suitcase);
- comfortable noise-cancelling headphones (Sony WH-1000XM4);
- a power bank small enough to fit in a pocket.
See also Vitalik’s backpack travel guide.
Pen and paper
I like the Pilot G2-07, black ink. Dots ~ plain > checkered > lined.
The slow burn of improvement
I have, from time to time, been hit with a sudden realization that there exist people that make me feel like I am walking while they are running. Sometimes I observe an insanely productive feedback loops, or someone delivering a huge amount of work in a matter of weeks. At that point, everything that I’ve accomplished recently, even if it was a lot, starts mattering less.
My natural response is to feel the sudden urge to overhaul my setup, and start working in a completely different way. I have tried adopting strict rules for work, suddenly forcing myself to do a lot of Anki in my spare time, plaster the office walls with printed out docs with best practices for research, etc. The thing is, this is completely ineffective.
What does work for me is frustratingly simple: change at least one thing every single week. In high dimensional spaces, local minima are rare. This is especially true given the rising tide of AI progress enabling improvements where there were none last time you tried.
These changes can look tiny. From my personal experience, at
the risk of this sounding outdated in a few years: It could be a
different way of using Cursor; a reshaped
llm_utils.py
file; commiting to take notes whenever
you read a paper; deciding to clean up and publish those notes;
it could be taking notes after every single research meeting so
the conversation doesn’t just go in one ear and out the other;
or it could be deciding to finish an actual commit with a
feature every single day. It could be keeping the top priority
for a project always at the top of the project doc; or it could
even be something like buying a standing desk.
The highest leverage improvements are about habits, not tools. But habits are hard. You can’t just decide to be a different person overnight. But you can decide to be a slightly different person this week.
Moving to a new city, or changing jobs, seems to enable making many improvements at once. This is related to personality basins.
Sometimes you slip up. You’ll abandon tools. You’ll break streaks. That is fine. What matters is to keep moving and try to get back on track on parts of what you are doing that are genuinely important.
One of the best sources of improvement is the people around you. When you see a coworker doing something smart, steal it. It’s much easier to adopt a habit when you can see it in action every day.
And one final thing: the meta-habit of continuous improvements itself is something that one can get used to.
It comes with a decent mouse, and works with both MacOS and Linux out of the box. It is just a great value for money. Throw the numpad away.↩︎
I didn’t succeed completely – for example, with multiple displays, it doesn’t seem possible to label workspaces non-consecutively. If you have any ideas on how to do this, please let me know!↩︎
Since dropping Windows a long time ago, I used Ubuntu, then Arch, then Manjaro for a long time, then switched back to Arch on a new laptop. Manjaro and Arch are very similar and somewhat better than the others. There is no bloat at all if you go with i3.↩︎