These are things I would recommend. They are listed in no particular order, and I am entirely unaffiliated.
Here are some common principles these tools share.
incrementally explorable UX
- moving from day one/zero understanding to power user should happen within the app, not a manual
- modal interfaces can be good for this
Lazygit, which-key.nvim, btop
low latency
- input latency matters the most
Kitty, Neovim
declarative state
- let me describe what I want instead of how to get there
nix, atlas
exist at one extreme of the customization spectrum
- either enough flexibility to entirely build your own UI/UX
- or such a prescriptive design that only a few options are exposed
Neovim, Lazygit, Gnome, ghq
minimal lock in
- use simple data formats like plaintext, markdown, JSON, etc
- can be self hosted, but I'll often pay for a high uptime service
Bitwarden, ln.ht, WakaTime, Obsidian
keyboard first
- using a mouse is slower
- laptop trackpads are extra slow
Neovim
- declarative package (Nix) / system (NixOS) / user environment (Home Manager) management
- installing, building, containerizing, virtualization, you name it, I'm using Nix
- nix
can beis confusing, poorly documented, and has some drama - once you get comfortable its awesome, but the learning curve is steep and the lack of adoption is unsuprising
- highlights
- the store
- packages built with
nixare put in a content-addressed location, meaning the input to the build is hashed, and the final location of the build in the store is$HASH-packagename. - one of the side effects of this approach is installing multiple versions of the same package is trivial.
- packages built with
- checkpoints
- NixOS systems are almost unbreakable, because every rebuild makes a checkpoint. Each generation of the system fills $PATH with a collection of symlinks pointing to the nix store. If the majority of the installed packages is the same, keeping each generation becomes effectively free.
- remote builds
- anything you can build with Nix, you can build remotely with ~20 lines of config
- why wait for my shrimpy laptop to compile gcc? just remotely build it on my beefy desktop with the same commands
- when any of your
buildMachineshas a dependency that another builder needs, it will be transfered automatically
- buildLayeredImage
- build OCI (Docker) images where each store path automatically gets its own layer, so pushing an updated image to a registry will only transfer the changed layers. This is possible with normal Docker, but much simpler with nix.
- nix-shell -p
- opens a temporary shell with whatever package you want available
- need some advice?
nix-shell -p fortune cowsayto open the shell, then runfortune | cowsay.
- nix-index finds files in nixpkgs
nix-locate libX11will tell you which packages have a file matching the namelibX11. This is very useful when running non-nix packaged software and missing a library.
- comma
- wraps
nix-locateand which lets you run, fortune | , cowsayon a system that has neither installed
- wraps
- the store
- evaluates
.direnvfiles automatically when you enter directories containing them - good for setting environment variables
- extremely powerful when combined with
use flaketo source adevShellfrom aflake.nix- you can think of it like installing software by changing directories
- its like
virtualenv, but for all software
- its like
- with the automatically generated
flake.lock, you can ensure that alldevShellusers get the same software - to convert a project to a direnv enabled flake:
nix flake new -t github:nix-community/nix-direnv .(source)
- you can think of it like installing software by changing directories
- a really pretty coat of paint for the
nixCLI
- IMO the best terminal
- best in class performance
- kittens hold the functionality that sets kitty apart
- ctrl + shift + u to start unicode input
- duplicate your environment remotely with the ssh kitten
kitten transfer $REMOTE_PATH $LOCAL_PATHduring ansshsession to painlessly transfer files, also supports--upload
- hints let you ergonomically open URLs or select file paths from the keyboard
- graphics-protocol, which renders images inline in your terminal
- shout-out to Kovid Goyal, who also maintains Calibre and his personal custom browser 🤯
- gnome is a better macOS
- the default software suite is lightweight, but covers everything you would want to do with a laptop
- as a former tiling window manager user, Alt + Tab and maximized windows are good enough
- notable extensions
- paperwm
- scrollable tiling window management for gnome
- your desktop is infinitely wide, expanding as you add windows
- inspired the more popular niri
- scrollable tiling window management for gnome
- run or raise
-
If the program already runs it will get the focus, else we launch it.
- like alt-tab, but each applicaton gets a fixed shortcut
-
- GSConnect
- lets you control Gnome from your phone and vice versa
- get a Gnome notification if your phone battery is low
- use your phone's touchscreen as a trackpad to control Gnome
- lets you control Gnome from your phone and vice versa
- paperwm
- TODO (too much to say)
- notable extensions
- flash/sneak/jetpack
- whichkey
- conform
- treesitter
- mini.nvim
- oil.nvim
- fzf-lua
- DAP
-
software keyboard remapping
-
I like customizing my input devices
- I was previously into custom keyboards, but I have come to prefer software remapping
- remapping your laptop's keyboard is way more portable than bringing an external keyboard
- I was previously into custom keyboards, but I have come to prefer software remapping
-
my preferred collection of mods
- Caps lock -> ESC
- you press ESC infinitely more than you type in allcaps
- home row mods
- when tapping keys (aka normal typing), output the normal characters
f->fd->d
- when holding any home row key, treat that key as a modifier
a->WINs->ALTd->CTRLf->SHIFT- these are mirrored by the other home row keys, so
j-> tap:j/ hold:SHIFT
- these are difficult to get used to
- if you give them a try, try to pick your fingers up as quickly as you put them down
- when tapping keys (aka normal typing), output the normal characters
- wide mod
- colemak
- DH
- layers/arrow keys on homerow
- Caps lock -> ESC
- Firefox is cool, but it has some downsides
- upsides
- vertical tabs
- custom search engines are awesome
- I search
https://search.nixos.org/packages?query=%swith@nall the time
- I search
- downsides
- "Firefox deletes promise to never sell personal data, asks users not to panic"
- Pocket isn't very good
- upsides
- LibreWolf applies patches to Firefox to fix those issues
- installs uBlock Origin
- removes all advertising and sponsored content
- removes Pocket at compile time
- deletes cookies and data for all websites not on the allowlist
- and much more
- notable extensions
- LinkHints
- this lets you select links/inputs using only your keyboard
- Bitwarden
- LinkHints
- I use the default settings. This is the highest praise I can give
cdwith fuzzy matching sorted by frecency
gitTUI- you can hit ? at any time to see what keys you can press next, letting you discover the UI incrementally.
- This lets Lazygit get away with a pretty complicated modal interface that is simultaniously a joy to explore.
- shell history management
- fuzzy CTRL + R that can filter by host/directory/session
- painless history sync across machines
- fast shell-agnostic prompt
- declarative DB schema management
- update a single file
schema.sqlthat holds your schema definition - run
atlasto compare that file the current DB schema - approve the generated migrations
- if they are incorrect, edit
schema.sqluntil they look good
- if they are incorrect, edit
- update a single file
- useful for AI workflows, simply put
schema.sqlin your context
podmanis a drop in replacement for thedockerCLI that fixes:- adding a user to the
"docker"group is equivalent to making it root - the docker daemon is a single point of failure
- adding a user to the
- fuzzy search provider
- I either use
fzfdirectly or fuzzy search on every input I can
- system monitoring at a glance
- high information density
- discoverable UI/shortcuts
- an opinionated way to organize your local git repos
- if you have lots of repos checked out across lots of computers, let
ghqremember where everything goes
- diagramming
- a paid search engine
- if its free, you are the product
- custom domain email management
- supports some cool features
- anonymous masked emails
- wildcard delivery
- you can use
$SERVICE_NAME@$YOUR_DOMAINfor every$SERVICEand they all go to one inbox
- you can use
- mesh VPN that makes networking between machines a breeze
- built with wireguard
self hosted with Headscale
- DNS level ad blocking
- with Tailscale, you can run a tailnet wide adblock
- its like a pi-hole but at the VPN level, meaning you can use it on any network
- password manager
- trivializes sharing passwords with your friends and loved ones, and you can self host it if you want
- the browser extension is well thought out and always acts how one would want/expect
- open source!
- tracks coding time automatically by recording edits per file
- very useful if you need to track billing
self hosted with wakapi
- my daily driver since 2018
- very light, makes a macbook feel like a brick
- great linux support
- a pretty darn good keyboard
- the speaker/mic mute buttons have lights
- a dedicated screenshot button
- wide delete key right above backspace
- a cellphone as big as a credit card
- thicker than most smartphones, but it has a great heft
- sadly, 4G only phones are supported by fewer carriers each year, so it wont last too much longer
- more like on ear speakers than headphones
- light
- the open design gives them the opposite of noise cancellation
- however, they can be worn forever without making your ears stuffy
- you have more situational awareness
- they don't leak nearly as much noise as you would expect
- can be managed by a single developer
- inexpensive to get started
- scales well
- my preferred language for web applications
- simple syntax
- straightforward type system
- static typing is great, but IMO mostly as a form of documentation
- a good middleground between dynamic/duck typing and strong type systems like TypeScript or Rust
- errors as values
- as controversial it is, I have grown to love the readability of
if err := nil- you will always spend more time reading code than writing it
- as controversial it is, I have grown to love the readability of
- easy concurrency with goroutines
syncprovides really nice concurrency primitives- easy cancellation with
context
- great standard library
- you can build real software using just the stdlib
net/httpdatabase/sqlflag
- very readable if you want to peek under the hood
- you can build real software using just the stdlib
- directives
- comments that do stuff at compile time
- embed files into the compiled program
//go:embed hello.txt var s string
- testing
- fuzzy
- benchmarking
- profiling tools
- delve for debugging
- pprof for sampled profiling
- if it runs in an OCI container (Docker/Podman), you can run it on Fly in 10 minutes
- it converts those containers to Firecracker Virtual Machines which boot almost instantly, meaning you can easily scale to 0
- any use under 5$ a month is free
- easily set up automatic staging previews per PR with fly-pr-review-apps
- object storage
- zero egress fees
- low global latency
- bucket snapshots
- Fly integration
- my favorite RDB
- embed it directly in your application to remove network latency
- turn on the write-ahead log
-
Reading and writing can proceed concurrently
-
- back up to object storage with Litestream
- domain name registrar
- prodigiously porky presentation paragon performantly purveys perfectly priced pages
- a curated collection of CSS variables
- gives you the opinionated defaults of Tailwind, but sidesteps the confusing mess that tailwind classes become.
- encourages you to use CSS how it was designed, instead of utility classes
- in memory cache for frequently visited pages
- analytics db
