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 - for handling multiple windows and panes
- tmuxinator - for managing complex tmux sessions (I recently wrote more about this)
- vim - a simple yet powerful text editor
- git - for source control
I also use a small number of Vim plugins - installed via Vundle - to add nice quality-of-life features to my editor:
pangloss/vim-javascript
- better JavaScript syntax highlightingmxw/vim-jsx
- JSX syntax highlightingdart-lang/dart-vim-plugin
- Dart language syntax highlightingrust-lang/rust.vim
- Rust language syntax highlightingmorhetz/gruvbox
- Attractive Vim colour schemeairblade/vim-gitgutter
- In-editor Git indicatorsctrlpvim/ctrlp.vim
- Awesome and quick file searchingscrooloose/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 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!