Personal dotfiles managed with GNU Stow for flexible, modular configuration management across macOS, Arch Linux, and Ubuntu/Debian (server or desktop).
git clone <repo-url> ~/dotfiles
cd ~/dotfiles
./install.shThe script detects your OS and installs an appropriate default profile:
- Ubuntu/Debian →
serverprofile (TUI tools, no GUI) - Arch / macOS →
desktopprofile (everything)
Override:
./install.sh --profile=server # force server (no GUI)
./install.sh --profile=desktop # force desktop
./install.sh --profile=server --yes # non-interactive| server | desktop | |
|---|---|---|
| zsh, git, nvim, tmux, ssh | ✓ | ✓ |
| lazygit, yazi, btop | ✓ | ✓ |
| ripgrep, fzf, eza, zoxide, mosh | ✓ | ✓ |
| ideavim | — | ✓ |
| Hyprland + wayland tools (Arch) | — | ✓ |
| GTK theme (Arch) | — | ✓ |
| Ghostty + Zed (macOS) | — | ✓ |
Stow packages are organized by tool. Install individually with stow <pkg>:
- zsh — Zinit, Powerlevel10k, OS-specific fragments, plugins
- git — Git config with delta diffs
- nvim — Neovim config
- tmux — TPM, Catppuccin Mocha, prefix
C-a - ssh — SSH defaults with ControlMaster multiplexing
- lazygit, yazi, btop, ideavim — TUI tool configs
- hyprland, wayland-tools, gtk — Arch desktop
- macos-tools — Ghostty, Zed (macOS)
- zathura, godot — creative tools
Anything specific to one machine — work-VM aliases, Cloud SDK paths, host-only API keys — goes in ~/.zsh-local.sh. This file is gitignored.
A template is provided at zsh/.zsh-local.sh.example:
cp zsh/.zsh-local.sh.example ~/.zsh-local.sh
$EDITOR ~/.zsh-local.shFor a pure SSH-only server:
git clone <repo-url> ~/dotfiles
cd ~/dotfiles
./install.sh --profile=server --yes
chsh -s "$(command -v zsh)"Notes:
lazygitis installed from GitHub release (not in apt).yaziis installed viacargo install yazi-fm yazi-cliif Rust is present, otherwise skipped.- Optional packages (
eza,btop) install if available on your Ubuntu version.
stow zsh git nvim tmux # core
stow -D zsh # uninstall
stow -R zsh # restow (after editing)Stow conflicts with existing config:
mv ~/.zshrc ~/.zshrc.bak
stow zshReset broken symlinks:
stow -R zshTPM plugins not loading in tmux:
~/.config/tmux/plugins/tpm/bin/install_pluginsPersonal dotfiles — feel free to use as reference or inspiration.