Skip to content
savafPublic

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Dotfiles

Cross-platform dotfiles for Ubuntu/WSL, Fedora/Bazzite, Arch/Omarchy and macOS, organized as GNU Stow packages.

Contents

Repository structure

Most top-level folders are a Stow package: running stow <package> symlinks its contents into $HOME, preserving the internal directory layout. packages/, scripts/, docs/ and system/ are the exceptions — plain utility/reference dirs, not linked by Stow.

dotfiles/
├── bash/           # .bashrc + .inputrc + .config/bash/*.sh modules (alternative shell)
├── starship/       # .config/starship.toml (prompt shared by bash and zsh)
├── zsh/            # .zshrc (slim loader) + .config/zsh/*.zsh modules
├── git/            # .gitconfig + .config/git/ignore
├── nvim/           # .config/nvim/ (LazyVim distribution)
├── tmux/           # .config/tmux/tmux.conf
├── lazygit/        # .config/lazygit/config.yml (terminal UI for git)
├── shell/          # .profile
├── claude/         # .claude/ (Claude Code settings, agents, global CLAUDE.md; shared across profiles)
├── vscode/         # settings.json (symlinked per-OS by a script)
├── wsl/            # .wslconfig (copied to the Windows profile on WSL)
├── packages/       # package lists (brew/apt/dnf/node/vscode extensions)
├── scripts/        # bootstrap + install/sync helpers
│   ├── lib/        # shared utilities (log, os_detect, sudo keep-alive…)
│   └── modules/    # one installable/optional step per file, sourced by bootstrap.sh
├── system/         # non-$HOME system files (/etc/…), installed by a script, not Stow
├── docs/           # setup guides (macOS, shell, git/ssh, lazygit, …)
└── README.md

The zsh config is modular: zsh/.zshrc is a slim loader that sources focused files from ~/.config/zsh/ (exports, path, plugins, completion, history, keybindings, aliases, functions, integrations). See docs/shell-and-dotfiles.md.

Requirements

git and stow (the bootstrap installs stow for you if missing):

sudo apt install git stow   # Ubuntu/WSL
sudo dnf install git stow   # Fedora (Bazzite ships both in the base image)
sudo pacman -S git stow     # Arch/Omarchy
brew install git stow       # macOS

Quick start (recommended)

Clone the repo and run the single bootstrap entry point. It detects the OS, installs base packages, stows the config packages, syncs VS Code, installs global node packages, and applies OS-specific extras (macOS defaults / WSL .wslconfig).

git clone git@github.com:savaf/dotfiles.git ~/dotfiles
cd ~/dotfiles
./scripts/bootstrap.sh

The bootstrap backs up any conflicting real files to ~/.dotfiles-backup/<timestamp>/ before linking.

Manual usage with Stow

To link (or unlink) individual packages yourself:

cd ~/dotfiles
stow bash zsh git starship nvim tmux shell lazygit claude   # link everything
stow nvim                                    # link just one package
stow -D nvim                                 # unlink (remove symlinks)
stow -R zsh                                   # restow (refresh) after changes

Package lists

Reproducible package manifests live in packages/:

xargs brew install < packages/brew-cli.txt          # macOS CLI
xargs brew install --cask < packages/brew-casks.txt # macOS apps
sudo xargs -a packages/apt-cli.txt apt install -y   # Ubuntu/WSL CLI
grep -v '^#' packages/dnf-cli.txt | xargs sudo dnf install -y  # Fedora CLI (Bazzite: rpm-ostree install)
grep -v '^#' packages/pacman-cli.txt | xargs sudo pacman -S --needed  # Arch/Omarchy CLI

VS Code settings (vscode/settings.json) are symlinked to the OS-specific location by scripts/sync-vscode-settings.sh, and extensions are installed from packages/vs-extensions.txt. See docs/vscode.md.

Notes

  • WSL .wslconfig is read by Windows from your Windows user profile, not the Linux $HOME. The bootstrap copies it to C:\Users\<you>\.wslconfig; apply changes with wsl --shutdown.
  • Prompt: Starship, configured in starship/.config/starship.toml.
  • lazygit: launch with lzg. See docs/lazygit.md.

Setup guides

Step-by-step guides for a fresh machine live in docs/:

Guide What it covers
shell-and-dotfiles.md zsh modules, prompt, and applying the dotfiles with Stow
ubuntu-wsl.md Ubuntu & WSL2 setup from scratch (incl. .wslconfig, fonts)
bazzite.md Fedora & Bazzite (immutable) setup — dnf / rpm-ostree
omarchy.md Arch & Omarchy (Hyprland) setup — pacman, default shell (zsh), bash alternative
macos-setup.md macOS system preferences, apps, Homebrew, iTerm2
git-and-ssh.md Git defaults and GitHub SSH key setup
nodejs.md Node.js via nvm and global modules
vscode.md VS Code settings and extensions
nvim.md Neovim (LazyVim) setup, requirements and basics
tmux.md tmux prefix, panes/windows and copy mode
lazygit.md lazygit keybindings and workflows
hardware.md My machines, for reference
storage.md Games / LIBRARY disks: fstab, mountpoints, Kavita

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages