Skip to content

chussenot/.dotfiles

Repository files navigation

Dotfiles

Lint Linux macOS

Personal configuration files for a productive development environment using zsh, Neovim, and tmux.

Quick Start

# 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

Install Profiles

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 Support

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.

Prerequisites

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

Installation

Step-by-Step Guide

Step 1: Clone the repository

git clone https://github.com/chussenot/dotfiles.git ~/.dotfiles
cd ~/.dotfiles

Step 2: Review what will be installed (optional but recommended)

# Check platform detection
./scripts/utils/debug_platform.sh

# Review the install script
less install.sh

Step 3: Run the installer

./install.sh              # default profile
./install.sh --minimal    # shell + editor only (fast, for containers)
./install.sh --full       # everything including infra & offensive tools

Step 4: Restart your shell

exec zsh
# Or close and reopen your terminal

Step 5: Customize (optional)

# Local vim overrides
vim ~/.vim/vimrc.local

# Local zsh configuration
vim ~/.zshrc.local

What the Installer Does

The installer performs these steps in order:

  1. Backup - Creates timestamped backup of existing dotfiles in ~/.dotfiles_backup/
  2. Install packages - Installs system packages via your platform's package manager
  3. Install Antidote - Clones the zsh plugin manager to ~/.antidote
  4. Create symlinks - Links configuration files to your home directory
  5. Install mise - Downloads the tool version manager
  6. Install dev tools - Uses mise to install Python, Node.js, Go, etc.
  7. Install Neovim plugins - Runs :PlugInstall in headless mode
  8. Install zsh theme - Sets up the custom chussenot theme

Safety Features

The installer includes several safety measures:

  • Automatic backups: All existing dotfiles are backed up before modification
  • Non-destructive: Existing files are moved to .backup suffix, 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

Restoring from Backup

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/* ~/

Uninstalling

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/mise

Troubleshooting

See docs/TROUBLESHOOTING.md for common issues and solutions.

Quick Fixes

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 --install

Symlinks not working:

# Re-run symlink setup
./scripts/setup/setup-symlinks.sh

Neovim plugins not loading:

# Manually install plugins
nvim +PlugInstall +qall

What's Included

Core Configuration

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 Configurations

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/

Container & Cloud Tools

Tool Purpose
Docker Container platform
Docker Compose Multi-container orchestration
kubectl Kubernetes CLI
Helm Kubernetes package manager
gcloud Google Cloud CLI

Languages (via mise)

Language Version managed by mise
Python Yes
Node.js Yes
Go Yes
Ruby Yes
Rust Yes
Java Yes

Configuration Details

Tmux

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

Zsh Theme Features

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.

Neovim

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.

Documentation

Contributing

Contributions to improve cross-platform compatibility are welcome. Please ensure shell scripts pass:

shellcheck --shell=sh script.sh

License

MIT

About

My .dotfiles

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors