Personal configuration files for a Zsh-based development environment.
The image shows the startup time reported by .zshrc. Zsh records the time spent loading the configuration and prints the result when the shell is ready. The configuration also compiles unchanged Zsh modules and reloads aliases when the alias file changes.
This repository centralizes shell configuration, command aliases, terminal tools, editor settings, and installation helpers. The configuration is designed to be shared between machines while keeping machine-specific values in environment variables such as HOME.
.
├── .config/
│ ├── atuin/ Atuin history configuration
│ ├── herdr/ Herdr terminal configuration
│ ├── keg/ Keg package manager configuration
│ ├── nvim/ Neovim and LazyVim configuration
│ ├── zellij/ Zellij configuration and layouts
│ └── starship.toml Starship prompt configuration
├── install/
│ ├── keg.yml Package manifest for Keg
│ └── symlinks.sh Create links for managed configuration files
├── zsh/
│ ├── zsh_aliases Shell aliases and helper functions
│ ├── zsh_brew Homebrew integration
│ ├── zsh_custom_config PATH and tool configuration
│ ├── zsh_env Environment variables
│ ├── zsh_fzf fzf integration
│ ├── zsh_git_func Git and development functions
│ ├── zsh_keys Keyboard bindings
│ └── zsh_tools Zsh plugins and command integrations
├── .zshrc Main Zsh entry point
└── img/boot.png Zsh startup time screenshot
- Git
- Zsh
- A working Homebrew installation for optional plugin integrations
- Keg for package installation, if package installation is desired
Clone the repository and enter its directory:
git clone https://github.com/kerstone/dotfiles.git ~/dotfiles
cd ~/dotfilesCreate the configuration links:
./install/symlinks.shTo preserve existing files before replacing them with links, use the backup option:
BACKUP_EXISTING=true ./install/symlinks.sh -bInstall the packages listed in install/keg.yml with Keg if it is available:
keg installTo install Keg you can go to the repository and follow the procedure.
Start a new Zsh session after installation:
exec zshThe root .zshrc loads the modules in zsh/ and provides:
- Zsh module compilation with
.zwccache files - Automatic alias reloads when
zsh/zsh_aliaseschanges - Starship prompt integration
- Atuin history search when Atuin is installed
- zoxide, fzf, Zsh autosuggestions, and syntax highlighting
- Git, Docker, Terraform, Ansible, Fedora, and system utility aliases
- Optional integrations for Go, GitHub CLI, Herdr, Zellij, Yubikey tools, and RDAP
The generated cache files and alias state are ignored by Git.
The Neovim configuration is based on LazyVim and includes configuration for:
- LSP and language tooling
- Formatting and linting
- Blink completion
- Treesitter
- Bufferline
- CodeDiff
- OSC 52 clipboard support
- YAML editing
- The
aocolorscheme
The plugin lock file is intentionally kept outside the tracked repository state.
The Zellij configuration uses Ctrl+B as its leader key and provides:
- Persistent pane focus mode with
h,j,k, andl - Persistent resize mode with
h,j,k, andl - Pane splitting commands
- Tab navigation commands
- A
codelayout with one large pane and two smaller vertical panes
Press Esc to leave the active Zellij mode.
This repository contains configuration files only. Authentication tokens, private keys, shell history, generated logs, compiled binaries, and machine-specific cache files should remain outside the repository.
Review the configuration before installing it on another machine, especially the shell aliases.
Use environment variables to override paths when needed:
export DOTFILES_DIR="$HOME/dotfiles"
export EDITOR="nvim"Add shell aliases and functions to the appropriate file under zsh/. Add application-specific configuration under .config/.
MIT License. Feel free to use and modify these files.
