terminal font: https://www.jetbrains.com/lp/mono/
Here you can find my configs:
| File | Description | Project Page |
|---|---|---|
| .bashrc | Bash shell configuration. | Bash shell |
| .ghci | GHC interactive environment configuration. | GHC |
| .profile | Initialisation script for shell sessions. | Bash Startup Files |
| .tmux.conf | TMUX terminal multiplexer configuration. | TMUX |
| .vimrc | Standalone Vim config — no plugin dependencies. Use it on servers. | Vim |
| .zshenv | Environment variables for Zsh. | Zsh |
| .zshrc | Zsh configuration file. | Zsh |
| .zsh_plugins.txt | Plugin manifest loaded by antidote (replaces oh-my-zsh). | antidote |
| .scripts/ | Utility scripts for a variety of tasks. | Utility scripts |
| .config/redshift.conf | Redshift configuration file. | Redshift |
| .config/nvim/ | Neovim config — git submodule pointing at my kickstart.nvim fork. | kickstart.nvim |
| .config/i3/config | i3 window manager config. Not yet stowed — see note below. | i3 |
| .config/sway/config | Sway (Wayland) compositor config, ported from the i3 one. | sway |
| .config/kitty/kitty.conf | Kitty terminal — font, scrollback, keymaps, Aged Brass palette. | kitty |
| .config/rofi/ | Rofi launcher config + aged-brass.rasi theme. Not yet stowed — see note below. |
rofi |
| .config/dunst/dunstrc | Dunst notification daemon. Aged Brass palette. xfce4-notifyd is also installed; only one wins. | dunst |
| .config/btop/btop.conf | btop system monitor. Not yet stowed — see note below. | btop |
| .config/gh/config.yml | GitHub CLI config + aliases. hosts.yml (auth tokens) stays machine-local. Not yet stowed. |
gh |
| .ripgreprc | Ripgrep defaults (smart-case, glob exclusions, colours). Loaded via RIPGREP_CONFIG_PATH. |
ripgrep |
| .claude/settings.json | Claude Code settings — theme + Notification BEL hook. settings.local.json stays machine-local. Not yet stowed. |
Claude Code |
| .installed | Keeps track of installed applications (not fully up to date). | - |
The .scripts directory contains my utility scripts, with a special emphasis on the bootstrap scripts for those who appreciate a quick and efficient setup process.
- bootstrap.sh: Installs all the important programs you may need. I use this whenever I deploy a new machine or vps.
Clone this repo (recursively, to pull in the kickstart.nvim submodule):
git clone --recursive https://github.com/WillMatthews/dotfiles.git ~/dotfilesIf you forgot --recursive:
cd ~/dotfiles && git submodule update --init --recursiveSymlink everything into $HOME with GNU stow:
cd ~
stow -t ~ dotfilesThat symlinks every tracked file in ~/dotfiles/ into $HOME (skipping the metadata files listed in .stow-local-ignore). To undo:
cd ~
stow -t ~ -D dotfilesSome configs live in the repo as plain copies because the live file at the corresponding $HOME location is still a real file, not a symlink. stow will refuse to overlay them until the live file is removed or backed up.
.config/i3/config— copied in on 2026-05-19. Before stowing,rm ~/.config/i3/config(or move it aside), then re-runstow -t ~ dotfiles..config/rofi/config.rasi— replaces the live one-liner pointing at gruvbox. Before stowing,rm ~/.config/rofi/config.rasi..config/btop/btop.conf— drafted as a verbatim copy of the live file. Eitherrm ~/.config/btop/btop.confthen stow, orstow --adopt(safe here since the contents match). Note:save_config_on_exit = truemeans btop will rewrite the file when you change settings via its UI — fine through a symlink..config/gh/config.yml— adds aliases +editor: nvim. Before stowing,rm ~/.config/gh/config.yml.~/.config/gh/hosts.yml(auth tokens) is left alone..claude/settings.json— adds a Notification hook that emitsBEL(\a) when Claude needs your input. Audibility depends on your terminal's bell setting (in kitty:enable_audio_bell yesfor audio, otherwise a brief visual flash). Before stowing,rm ~/.claude/settings.json. Machine-local permissions (settings.local.json) are deliberately not stowed.
The scripts within the .scripts directory are designed for direct execution. For detailed usage instructions, consult the comments within each script or execute them with -h or --help for help information (if it is present!).
Otherwise, each script will tell you what it does in a comment.
I include .scripts in my $PATH, which you can find in .zshrc.
If you don't want my .zshrc but still want to include .scripts in your $PATH, do:
export PATH=$HOME/.scripts:$PATHbootstrap.sh installs these, but I haven't wired them into my aliases — they're sitting next to the classics so I can opt in per-machine. If you want them as defaults, the snippets are below.
| Tool | What it replaces | Init / alias |
|---|---|---|
| eza | ls |
alias ls='eza' |
| bat | cat (and my ccat) |
alias cat='bat -p' |
| zoxide | cd (frecency) |
eval "$(zoxide init zsh)" |
| atuin | Ctrl-R history |
eval "$(atuin init zsh)" |
| pay-respects | thefuck |
eval "$(pay-respects zsh --alias)" (already wired in .zshrc) |
You're encouraged to fork this repository and tweak the dotfiles and scripts to your heart's content, tailoring them to fit your own preferences and workflow. Make them your own!
Should you have any suggestions for refining these dotfiles or scripts, please do not hesitate to open an issue or submit a pull request. There are bound to be issues in here!
This project is licensed under the MIT License - see the LICENSE file for details.
The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). It permits reuse within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and notices. This license does not protect against patent claims, and it does not include express provisions for the distribution of software modifications.
- entr
- todolist