development environment

what do I need to write code

SEAN K.H. LIAO

development environment

what do I need to write code

dev

So apparently I don't write as much code as I try to get things running, wonder how this affects my environment.

host

It's Arch Linux, because I don't want to have to worry about packages being too far out of date from upstream or that a package might not even be available. Also, it's pretty no-bullshit in terms of what the distribution forces on you.

While not technically part of the host, docker is invaluable for having self-contained, disposable environments that could also easily be shared. Yes, I know about NixOS but who has time for that?

The 2 types of windows I have open are: terminal (alacritty) and browser (chrome, now with wayland and pipewire enabled, sort of janky).

zsh is a decent balance between usable and exotic, preferably with autosuggestions, syntax-highlighting, history-substring-search, and completions.

text editor

Neovim it is, running -git for tree-sitter based highlighting and with coc.nvim for completion. The other plugins are: cpg/vim-fahrenheit for a warm color scheme, mhinz/vim-signify for git gutter, tyru/caw.vim for commenting shortcut, and sheerun/vim-polyglot for extra languages(?), to be honest, not sure if it has any appreciable effect.

On top of this, a whole host of Language servers to power completion, as well as prettier for some formatting.

other tools

git is still the VCS of choice for now, with a few custom aliases and occasional use of GitHub's cli. Also delta for highlighted / side-by-side diffs.

exa is a replacement ls for color and git status, bat for colorizing command output, htop for managing processes (no, none of the newer ones are significantly better). ripgrep for replacing grep, with my own wrapper t adding results as shortcuts.

curl continues to be the tool of choice for most network things, and I prefer drill for DNS things.

For wrangling data: jq for json and xsv for CSV / TSV, along with the usual suspects of: sed / tr / sort | uniq | head | tail and very rarely awk.

Finally, kubernetes: kubectl is mandatory, and krew will help install some plugins as subcommands under different names, though then they don't have completion.... kubectx for changing default context (cluster) and namespace, kustomize for generating manifests (kubectl ... -k was stuck at 2.0.3 for the longest time but 1.21 will get 4.0.5), skaffold for rebuild-deploy loops and finally k9s for a navigatable dashboard.