Personal configuration files for a productive development environment using zsh, Neovim, and tmux.
# One-liner bootstrap (clones + installs)
curl -fsSL https://raw.githubusercontent.com/chussenot/dotfiles/master/bootstrap.sh | sh
# Or with a profile
curl -fsSL https://raw.githubusercontent.com/chussenot/dotfiles/master/bootstrap.sh | sh -s -- --minimal| Profile | Flag | What it installs |
|---|---|---|
| Minimal | --minimal |
Shell config, editor, symlinks only. No packages, no mise. |
| Default | (none) | Core tools, languages, linters, git. Skips infra/offensive. |
| Full | --full |
Everything, including infra, containers, and offensive. |
| Platform | Status | Package Manager | CI |
|---|---|---|---|
| Ubuntu 24.04 | Fully supported | apt-get | test-linux |
| Debian 12 | Fully supported | apt-get | test-linux |
| Alpine 3.21 | Fully supported | apk | test-linux |
| macOS | Fully supported | Homebrew | test-macos |
| Arch Linux | Supported | pacman | test-linux |
| Fedora 41 | Supported | dnf | test-linux |
Primary Test Environment: Ubuntu 24.04.3 LTS (kernel 6.14.0-1015-oem)
See docs/MULTI_PLATFORM.md for detailed platform information.
Before running the installer, ensure you have:
| Tool | Required | Purpose |
|---|---|---|
git |
Yes | Clone repositories (Antidote, dotfiles) |
curl |
Yes | Download mise and other tools |
sudo |
Linux only | Install system packages |
brew |
macOS only | Install packages via Homebrew |
git clone https://github.com/chussenot/dotfiles.git ~/.dotfiles
cd ~/.dotfiles# Check platform detection
./scripts/utils/debug_platform.sh
# Review the install script
less install.sh./install.sh # default profile
./install.sh --minimal # shell + editor only (fast, for containers)
./install.sh --full # everything including infra & offensive toolsexec zsh
# Or close and reopen your terminal# Local vim overrides
vim ~/.vim/vimrc.local
# Local zsh configuration
vim ~/.zshrc.localThe installer performs these steps in order:
- Backup - Creates timestamped backup of existing dotfiles in
~/.dotfiles_backup/ - Install packages - Installs system packages via your platform's package manager
- Install Antidote - Clones the zsh plugin manager to
~/.antidote - Create symlinks - Links configuration files to your home directory
- Install mise - Downloads the tool version manager
- Install dev tools - Uses mise to install Python, Node.js, Go, etc.
- Install Neovim plugins - Runs
:PlugInstallin headless mode - Install zsh theme - Sets up the custom
chussenottheme
The installer includes several safety measures:
- Automatic backups: All existing dotfiles are backed up before modification
- Non-destructive: Existing files are moved to
.backupsuffix, not deleted - Root protection: Refuses to run as root user
- Error handling: Continues on non-critical failures with warnings
- Idempotent: Safe to run multiple times
If something goes wrong, restore your original configuration:
# Find your backup
ls ~/.dotfiles_backup/
# Restore specific files
cp ~/.dotfiles_backup/YYYYMMDD_HHMMSS/.zshrc ~/.zshrc
# Or restore everything
cp -r ~/.dotfiles_backup/YYYYMMDD_HHMMSS/* ~/To remove the dotfiles and restore your original configuration:
# 1. Remove symlinks (they point to ~/.dotfiles)
rm ~/.zshrc ~/.tmux.conf ~/.inputrc ~/.config/nvim
# 2. Restore from backup
cp -r ~/.dotfiles_backup/YYYYMMDD_HHMMSS/* ~/
# 3. Remove the dotfiles directory (optional)
rm -rf ~/.dotfiles
# 4. Remove installed tools (optional)
rm -rf ~/.antidote ~/.local/share/miseSee docs/TROUBLESHOOTING.md for common issues and solutions.
Installation fails with "permission denied":
# Ensure scripts are executable
chmod +x install.sh scripts/**/*.sh"git not found" or "curl not found":
# Ubuntu/Debian
sudo apt-get install git curl
# macOS
xcode-select --installSymlinks not working:
# Re-run symlink setup
./scripts/setup/setup-symlinks.shNeovim plugins not loading:
# Manually install plugins
nvim +PlugInstall +qall| Component | Description | Config Location |
|---|---|---|
| Zsh | Shell with custom theme (no Oh-My-Zsh) | configs/shell/zsh/ |
| Neovim | Editor with vim-plug plugins | configs/editor/nvim/ |
| Tmux | Terminal multiplexer | configs/terminal/tmux/ |
| Tool | Purpose | Config |
|---|---|---|
| Antidote | Zsh plugin manager | ~/.antidote |
| mise | Version manager for runtimes | configs/tools/mise/ |
| fzf | Fuzzy finder | Shell integration |
| ripgrep | Fast code search | - |
| fd | Fast file finder | - |
| bat | Syntax-highlighted cat | configs/tools/bat/ |
| GitHub CLI | GitHub from terminal | configs/tools/gh/ |
| Glow | Terminal markdown viewer | configs/tools/glow/ |
| htop | Process viewer | configs/tools/htop/ |
| k9s | Kubernetes TUI | configs/tools/k9s/ |
| tig | Git TUI | configs/tools/tig/ |
| Tool | Purpose |
|---|---|
| Docker | Container platform |
| Docker Compose | Multi-container orchestration |
| kubectl | Kubernetes CLI |
| Helm | Kubernetes package manager |
| gcloud | Google Cloud CLI |
| Language | Version managed by mise |
|---|---|
| Python | Yes |
| Node.js | Yes |
| Go | Yes |
| Ruby | Yes |
| Rust | Yes |
| Java | Yes |
| Setting | Value |
|---|---|
| Prefix key | C-a (instead of C-b) |
| Base index | 1 (instead of 0) |
| Status refresh | 5 seconds |
| Pane navigation | Arrow keys, Alt+arrows without prefix |
| Maximize pane | | key |
The chussenot theme displays:
- User, host, and current directory
- Git branch and status (clean/dirty indicators)
- Python, Node.js, Go versions (configurable)
- System load with color coding
- Background jobs count
- Active Python virtualenv
- Docker container indicator
- Non-zero exit codes
Configure features via environment variables - see configs/shell/chussenot.zsh-theme.
Plugin manager: vim-plug
| Feature | Plugin |
|---|---|
| LSP | nvim-lspconfig (solargraph, lua) |
| Completion | nvim-cmp + cmp-nvim-lsp, cmp-buffer |
| Snippets | LuaSnip |
| Fuzzy finding | Telescope + fzf |
| Syntax | nvim-treesitter |
| Linting | Neomake |
| Key discovery | which-key.nvim |
All NeoVim-specific plugins are has('nvim') guarded and Lua configs
are pcall guarded, so regular Vim starts without errors.
See configs/editor/nvim/KEYMAPS.md for keyboard shortcuts, or run help in your shell.
- Multi-Platform Support - Platform detection and package management
- POSIX Compliance - Shell script standards
- Troubleshooting - Common issues and solutions
Contributions to improve cross-platform compatibility are welcome. Please ensure shell scripts pass:
shellcheck --shell=sh script.shMIT