This directory contains the dotfiles for my system (Fedora + Sway/Niri, with Noctalia as the shell).
Install with your package manager (sudo dnf install, sudo apt install, brew install etc.)
- git
- stow - creates the symlinks
These tools are used by the configurations in this repo:
- Sway / Niri - Wayland compositors
- Noctalia - Bar, panels, lock screen and theming
- Fuzzel - Application launcher (Wayland)
- keyd - Key remapping
- Alacritty / Foot - Terminal emulators
- Nerd Fonts - Specifically CaskaydiaMono Nerd Font
- fzf - Fuzzy finder (plus fzf-git.sh cloned to
~/fzf-git.sh) - fd - Better find
- eza - Better ls
- bat - Better cat
- zoxide - Better cd
- ripgrep - Better grep
- oh-my-zsh - with
zsh-autosuggestionsandzsh-syntax-highlighting
Each top-level folder is a stow package. Inside it, files sit at the same path they should have relative to $HOME:
.dotfiles/
├── zsh/.zshrc -> ~/.zshrc
├── shell/.config/shell/ -> ~/.config/shell/ (secrets + work templates)
├── tmux/.config/tmux/tmux.conf
├── nvim/.config/nvim/
├── alacritty/.config/alacritty/
├── foot/.config/foot/foot.ini
├── fuzzel/.config/fuzzel/fuzzel.ini
├── sway/.config/sway/config
├── niri/.config/niri/config.kdl
├── scripts/.local/bin/ -> ~/.local/bin/ (tdl, projects launcher, sway helpers)
└── keyd/etc/keyd/default.conf (not stowed - see keyd below)
Clone this repository to your $HOME directory:
git clone <repository-url> ~/.dotfiles
cd ~/.dotfilesThen stow the packages you want on this machine:
stow --no-folding zsh shell tmux nvim alacritty foot fuzzel sway niri scriptsstow zshlinks just one package, so you can pick what each machine getsstow -D swayremoves a package's links againstow -n -v <package>is a dry run that shows what would happen--no-foldinglinks individual files instead of whole folders, so generated files (e.g. Noctalia themes) stay out of the repo
If a config file already exists, stow refuses to overwrite it. To take the existing file into the repo and replace it with a link, use stow --adopt <package> and check git diff afterwards.
Tokens are not stored in this repo. .zshrc sources ~/.config/shell/secrets.zsh if it exists, and that file is gitignored.
Work-specific settings (kube configs, private Go module host, VPN helpers) live in ~/.config/shell/work.zsh, which is also gitignored and sourced if it exists.
On a new machine:
cp ~/.dotfiles/shell/.config/shell/secrets.zsh.example ~/.config/shell/secrets.zsh
cp ~/.dotfiles/shell/.config/shell/work.zsh.example ~/.config/shell/work.zsh
chmod 600 ~/.config/shell/secrets.zsh ~/.config/shell/work.zsh
# then fill in the valuesNoctalia's theme templates write some files next to the configs. These are gitignored:
~/.config/fuzzel/themes/noctalia(included fromfuzzel.ini)~/.config/sway/noctalia~/.config/niri/noctalia.kdl
After stowing tmux config, you need to be in a tmux session:
tmux new -s new-sessionOnce you source with tmux source-file ~/.config/tmux/tmux.conf the changes will apply and you can source any new changes with prefix + r
After watching @tony-btw on YT I decided to go for the minimal tmux config without plugins.
You can find a link here to his setup and keybindings.
The projects-wofi.sh script allows you to quickly open projects in tmux sessions using fuzzel.
Note: The script is configured to search ~/dev by default. Edit the script to change this to your preferred projects directory.
Keybinding: Super + P (already set in the sway and niri configs)
The tdl script opens a pre-configured tmux layout for development:
- Left (main):
nvim . - Right (30%): AI agent (defaults to
claude) - Bottom strip (15%): spare terminal
Usage:
tdl # opens with claude
tdl aider # opens with aider
tdl "aider --model claude-opus-4-5" # opens with a specific modelDetach cleanly from the session with prefix + d. Reattach later with tmux a.
keyd handles low-level key remapping via a systemd service. The config is stored in this repo for reference but cannot be stowed as it lives in /etc/keyd/ and requires root.
Current mappings:
capslock— acts asEscapewhen tapped,Controlwhen held
Deploy:
sudo cp keyd/etc/keyd/default.conf /etc/keyd/default.conf
sudo systemctl enable --now keyd