My development stack
Posted on 04 August 2021
Some people have complex development processes and flows - making use of tools such as heavy editors and IDEs, Docker for running and building locally in development, or even develop entirely remotely over SSH connections. Other people use simpler combinations of tools.
I thought I'd write briefly about what I use on a daily basis. I have a relatively simple development tech stack:
- Terminal application (I use the `Terminal.app` application that ships with my Mac, since this works best for me)
- tmux [1] - for handling multiple windows and panes
- tmuxinator [2] - for managing complex tmux sessions (I recently wrote more about this [3])
- vim [4] - a simple yet powerful text editor
- git [5] - for source control
I also use a small number of Vim plugins - installed via Vundle [6] - to add nice quality-of-life features to my editor:
- `pangloss/vim-javascript` - better JavaScript syntax highlighting
- `mxw/vim-jsx` - JSX syntax highlighting
- `dart-lang/dart-vim-plugin` - Dart language syntax highlighting
- `rust-lang/rust.vim` - Rust language syntax highlighting
- `morhetz/gruvbox` - Attractive Vim colour scheme
- `airblade/vim-gitgutter` - In-editor Git indicators
- `ctrlpvim/ctrlp.vim` - Awesome and quick file searching
- `scrooloose/nerdtree` - Easy file/directory tree navigation
I backup and sync my dotfiles (e.g. my `.vimrc` and `.tmux.conf`) by symlinking from my Nextcloud sync directory.
And that's it, really. In terms of per-project management, I make use of native tooling depending on the languages and frameworks being used. For example, for Node/JavaScript projects I use `yarn` and for Python projects I use `virtualenv`s and Poetry [7] for handling dependencies.
It'd be nice to have an elegant cross-platform approach to provisioning new machines with this setup, but given its relative simplicity it isn't too much of a headache to get things back up and running again when I switch machines!