Minimal Dotfiles
A deliberately minimal dotfile configuration.
Philosophy
Over the years I have grown tired of tweaking config files for every component of my desktop. This repository contains only the essentials.
Start with a minimal Debian 13 (Trixie) install — SSH server and system essentials only, no desktop environment.
What's Inside
.
├── config/
│ ├── alacritty/ # Alacritty terminal configuration
│ ├── fish/ # Fish shell configuration
│ ├── gitu/ # Git TUI settings
│ ├── kanata/ # Keyboard remapping
│ ├── lf/ # Terminal file manager
│ ├── nvim/ # Neovim setup
│ └── tmux/ # Tmux configuration
├── scripts/
│ ├── setup_docker # Docker install recipe
│ ├── setup_golang # Golang + go tools install recipe
│ └── setup_kanata # Kanata + systemd service setup
├── bootstrap.sh # Fresh system setup (run once, before install.sh)
└── install.sh # Dotfile symlinks and package installation
Desktop Bootstrap
The bootstrap script to set up DMS essentiallys, networking, audio, Helium, and GTK theming:
./bootstrap.sh
Once complete, restore personal files from backup drive (SSH keys, documents, projects, fonts, wallpapers), then continue with the steps below.
Software Installation
This will install, setup config files for my personal choices of software to use on top of the desktop
Install Options
# Interactive mode (with confirmations)
./install.sh
# Only create symlinks
./install.sh -l
# Only install packages
./install.sh -i
What Gets Installed
The script installs essential development tools via apt:
- CLI Tools:
wget,curl,fzf,fd-find,ripgrep,tree,btop,direnv,bat,jq,lf,unzip - Development:
build-essential,make,bear,valgrind - Shell:
fish - Terminal:
alacritty - Multiplexer:
tmux - Other:
ca-certificates,gnupg,libfuse2
Symlinks Created
~/.tmux.conf→./config/tmux/.tmux.conf~/.config/alacritty→./config/alacritty~/.config/fish→./config/fish~/.config/kanata→./config/kanata~/.config/nvim→./config/nvim~/.config/gitu→./config/gitu~/.config/lf→./config/lf
Scripts
Self-contained recipes for tooling that goes beyond the core install. Each script can be run independently as needed:
./scripts/setup_docker
./scripts/setup_golang
./scripts/setup_kanata
These are not run automatically by install.sh — they are opt-in.
This setup prioritizes stability and simplicity over customization. DankMaterialShell with niri handles the heavy lifting for tiling and aesthetics.