These dotfiles were originally based on Armin Ronacher's dotfiles where the many ideas were copied shamelessly. Files are symbolically linked from the git checkout into the home directory which makes it easy to test out configuration.
![]() |
![]() |
- Tokyo Night color scheme for Neovim, Tmux, and Bash prompt.
- Bash prompt with git, Python virtualenv, and Nix shell integration.
- Bash completion with custom completions for various tools.
- Neovim configuration with LSP support, Treesitter, and many useful plugins.
Dotfiles are installed using a simple Makefile in the root directory.
$ make
dotfiles Makefile
Usage: make [COMMAND]
help Print all Makefile targets (this message).
all Install and configure everything.
configure-all Configure all tools.
install-all Install all CLI tools and runtimes.
install-tools Install all CLI tools.
install-runtimes Install all runtimes.
Tools
license-headers Update license headers.
Formatting
format Format all files
json-format Format JSON files.
lua-format Format Lua files.
md-format Format Markdown files.
shfmt Format bash files.
yaml-format Format YAML files.
Linting
lint Run all linters.
actionlint Runs the actionlint linter.
fixme Check for outstanding FIXMEs.
markdownlint Runs the markdownlint linter.
renovate-config-validator Validate Renovate configuration.
selene Runs the selene (Lua) linter.
shellcheck Runs the shellcheck linter.
textlint Runs the textlint linter.
yamllint Runs the yamllint linter.
zizmor Runs the zizmor linter.
Base Tools
install-bin Install binary scripts.
configure-bash Configure bash.
configure-aqua Configure aqua.
configure-efm-langserver Configure efm-langserver.
configure-nix Configure nix.
configure-nvim Configure neovim.
configure-tmux Configure tmux.
configure-git Configure git.
Install Tools
install-slsa-verifier Install slsa-verifier
install-aqua Install aqua and aqua-managed CLI tools
Language Runtimes
install-go Install the Go runtime.
install-node Install the Node.js environment.
install-python Install the Python environment.
install-ruby Install the Ruby environment.
Maintenance
todos Check for outstanding TODOs.
clean Delete temporary files.
Run make all
to install tools and configuration files.
It is necessary to distinguish between tools like linters and formatters used
for linting and formatting files in the dotfiles
project directory, and those
installed globally for general use.
Project-local tools are used to maintain the files in this repository. They are
installed and run in the project directory via the make lint
, make format
,
and make license-header
commands.
Tools like language runtimes, linters, and formatters installed for global use
are installed by make install-all
. They can also be individually installed by
their appropriate install-<tool>
command, such as make install-go
or
make install-aqua
.
Tools are installed using several methods and are installed in several locations.
- Tools installed via Python are installed in a Python virtual environment
managed by
pyenv
. This virtual environment is activated automatically bybashrc
. - Tools written in JavaScript/TypeScript are installed globally by
npm
into the globalnode_modules
. - Pre-compiled binary tools are installed via
Aqua
to the~/.local/share/aquaproj-aqua
directory. The~/.local/share/aquaproj-aqua/bin
directory is added to the$PATH
.
Language runtimes are installed in the ~/opt
directory. Their binaries
directory is added to the $PATH
.
The Go runtime is installed in the ~/opt/go
directory. This is a symbolic link
to the installed Go runtime version. The ~/opt/go/bin
directory is added to
the $PATH
.
The default GOBIN
directory of ~/opt/go/bin
is used for installing Go
packages. This directory is added to the $PATH
.
The Node.js runtime versions are installed and managed by
nodenv
in the ~/.local/share/nodenv
directory.
The Python runtime is installed and managed by
pyenv
in the ~/.local/share/pyenv
directory.
The Ruby runtime is installed and managed by
rbenv
in the ~/.local/share/rbenv
directory.
.bashrc
and .bash_profile
scripts are included in the bash
directory. Various scripts for different purposes are broken into separate
files, such as .bash_aliases
and .bash_completion
.
Neovim configuration is contained in the nvim
directory.
Tmux configuration is contained in the tmux
directory.
The scripts here should work on most Linux systems. I have tested them mostly on Debian-based systems. YMMV.