This repo contains a modular, idempotent setup system for bootstrapping new Linux servers using:
- Package manager detection (APT or pacman)
- Profile-based app install lists
- Optional install hooks (e.g., install Docker, Starship, Alacritty)
- Stow-based dotfile symlinking
- Safe conflict resolution (auto-backups of existing files)
Run this on a new server:
bash <(curl -s https://raw.githubusercontent.com/Eumaios1212/dotfiles/master/init.sh)To use a specific profile:
bash <(curl -s https://raw.githubusercontent.com/Eumaios1212/dotfiles/master/init.sh) devTo test a different branch (e.g., a feature branch):
DOTFILES_BRANCH=my-feature-branch bash <(curl -s https://raw.githubusercontent.com/Eumaios1212/dotfiles/my-feature-branch/init.sh).dotfiles/
├── apps/ # Package lists by profile (APT/pacman)
├── bash/ # User bash dotfiles
├── bash-root/ # Root-only bash config (stowed into /root)
├── install.d/ # Optional hook scripts (profile-scoped)
├── bootstrap.sh # Local bootstrap script
└── init.sh # First-time curl entrypoint
The system supports profiles like:
common(default) — safe base configdev— developer setup (VSCode, Docker, etc.)
Each profile includes:
- APT list:
apps/common.apt.txt - Pacman list:
apps/common.pacman.txt - Optional hooks:
install.d/common-*.sh
Top-level folders (except apps/, install.d/) are symlinked into $HOME using stow.
Special case:
bash-root/ is stowed into /root with sudo.
Before stowing:
- Checks for conflicts (files, not symlinks)
- Backs up as
.filename.backup - Supports both user (
$HOME) and/root
To safely remove an old stow group:
cd ~/.dotfiles
stow -D bash- Always test changes on a fresh server or snapshot
- Feature branches can be bootstrapped using the
DOTFILES_BRANCHenvironment variable - Scripts are idempotent and safe to rerun
bash,curl,git,stow- Works on Ubuntu/Debian and Arch-based distros
Created by @Eumaios1212 MIT License