Skip to content

HoldenLucas/uses

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

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

software

  • declarative package (Nix) / system (NixOS) / user environment (Home Manager) management
    • installing, building, containerizing, virtualization, you name it, I'm using Nix
    • nix can be is 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 nix are 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.
    • 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 buildMachines has 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 cowsay to open the shell, then run fortune | cowsay.
    • nix-index finds files in nixpkgs
      • nix-locate libX11 will tell you which packages have a file matching the name libX11. This is very useful when running non-nix packaged software and missing a library.
    • comma
      • wraps nix-locate and which lets you run , fortune | , cowsay on a system that has neither installed
  • evaluates .direnv files automatically when you enter directories containing them
  • good for setting environment variables
  • extremely powerful when combined with use flake to source a devShell from a flake.nix
    • you can think of it like installing software by changing directories
      • its like virtualenv, but for all software
    • with the automatically generated flake.lock, you can ensure that all devShell users get the same software
    • to convert a project to a direnv enabled flake:
      • nix flake new -t github:nix-community/nix-direnv . (source)
  • a really pretty coat of paint for the nix CLI
  • 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
    • 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
  • 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
  • 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 -> f
        • d -> d
      • when holding any home row key, treat that key as a modifier
        • a -> WIN
        • s -> ALT
        • d -> CTRL
        • f -> 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
    • wide mod
      • Instead of there being two spaces between the home row positions, there are three.
      • 01YR611
    • colemak
      • DH
    • layers/arrow keys on homerow
  • I use the default settings. This is the highest praise I can give
  • cd with fuzzy matching sorted by frecency
  • git TUI
  • 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
    1. update a single file schema.sql that holds your schema definition
    2. run atlas to compare that file the current DB schema
    3. approve the generated migrations
      • if they are incorrect, edit schema.sql until they look good
  • useful for AI workflows, simply put schema.sql in your context
  • podman is a drop in replacement for the docker CLI that fixes:
    • adding a user to the "docker" group is equivalent to making it root
    • the docker daemon is a single point of failure
  • fuzzy search provider
  • I either use fzf directly 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 ghq remember where everything goes

d2

  • diagramming

services

  • 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_DOMAIN for every $SERVICE and they all go to one inbox
  • 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!

self host-able

  • tracks coding time automatically by recording edits per file
  • very useful if you need to track billing

self hosted with wakapi

hardware

ThinkPad X1 Carbon (6th)

  • 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

stack

  • can be managed by a single developer
  • inexpensive to get started
  • scales well

Go

  • 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
    • easy concurrency with goroutines
      • sync provides really nice concurrency primitives
      • easy cancellation with context
    • great standard library
      • you can build real software using just the stdlib
        • net/http
        • database/sql
        • flag
      • very readable if you want to peek under the hood
    • 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

varnish cache

  • in memory cache for frequently visited pages

duckdb

  • analytics db

About

My recommendations

Topics

Resources

Stars

Watchers

Forks

Contributors