Personal config for an Arch + niri (Wayland) setup with DankMaterialShell.
Each top-level directory is a package. Files inside a package live at the
path they should occupy under $HOME. Example:
dotfiles/
├── bootstrap.sh
├── shell/ → ~/.bashrc, ~/.zshrc, ...
│ ├── .bashrc
│ ├── .bash_profile
│ ├── .zshrc
│ └── .profile
├── niri/.config/niri/ → ~/.config/niri/
├── nvim/.config/nvim/ → ~/.config/nvim/
├── herdr/.config/herdr/ → ~/.config/herdr/
├── ghostty/.config/ghostty/ → ~/.config/ghostty/
└── ...
This layout is compatible with GNU Stow (stow niri) but does not require it —
bootstrap.sh handles symlinking with plain bash.
Each package includes its own README.md with managed paths and behavior.
Package READMEs are repository documentation and are excluded from deployment.
| Package | What it covers |
|---|---|
shell |
.bashrc, .bash_profile, .zshrc, .profile |
niri |
niri compositor + DMS overrides |
ghostty |
terminal |
nvim |
LazyVim-based config |
lazygit |
lazygit |
lazydocker |
lazydocker |
btop |
btop |
herdr |
Herdr terminal workspace manager |
git |
git config + global ignore |
starship |
starship prompt |
swayidle |
swayidle (idle/lock for niri) |
dms |
DankMaterialShell (bar/launcher/notif/wallpaper) |
dgop |
dgop |
xdg |
default applications + preferred terminal |
# Clone
git clone <remote> ~/dotfiles
cd ~/dotfiles
# Preview what would happen
./bootstrap.sh -n
# Link everything (skips files that already exist and aren't symlinks)
./bootstrap.sh
# Force: back up existing real files (.bak.<unix-ts>) and replace with symlinks
./bootstrap.sh -f
# Only some packages
./bootstrap.sh niri ghostty nvim
# Remove symlinks pointing into this repo (does not touch real files)
./bootstrap.sh -unvim/.config/nvim/lazy-lock.jsonis tracked so plugin versions are pinned across machines. Drop that line from.gitignoreif you want it ignored.git/.config/git/configcontainsuser.name/user.email; edit before syncing to a different identity.dms/.config/DankMaterialShell/settings.jsonreferences an absolute path forcustomThemeFile. Update it on a new machine if needed.- DMS Wi-Fi pins are intentionally omitted from the tracked settings. The bootstrap script seeds this file once but keeps the live copy machine-local, so runtime changes and network names are not written back into the repo.
- Zsh is the primary interactive shell. Both shell configs can start Herdr in
an interactive terminal; set
HERDR_AUTO_START=falseto opt out for a session. Herdr's own configuration is maintained in theherdrpackage.