A collection of tools, scripts, configuration to make my shell and vim more awesome
📖 Usage Guide - Keybindings, Aliases & Workflows
This repo is meant to store configuration files which are then symlinked by using GNU Stow.
git clone git@github.com:erikstmartin/dotfiles.git ~/dotfiles
cd ~/dotfiles
git submodule update --init --recursiveUnified script (auto-detects OS):
./bin/dotfiles.sh installOr run platform-specific scripts:
# macOS
./bin/lib/macos.sh install
# Ubuntu/Debian
./bin/lib/ubuntu.sh install
# Arch Linux
./bin/lib/arch.sh installAvailable commands:
install- Full installation (dotfiles + all dependencies)update- Update everything (system packages + mise tools + common tools)system-update- Update system packages only (brew/apt/pacman+yay)link [package1 package2...]- Link dotfiles with stow (all or specific packages)unlink [package1 package2...]- Unlink dotfiles with stow (all or specific packages)
Update commands explained:
system-update: Fast, safe updates of OS packages only- macOS:
brew update && brew upgrade - Arch:
pacman -Syu && yay -Syu - Ubuntu:
apt update && apt upgrade
- macOS:
update: Comprehensive update of everything- Runs
system-updatefirst - Updates mise tools:
mise upgrade(updates language runtimes and CLI tools) - Updates common tools (tpm, fzf, pynvim, etc.)
- Runs
Examples:
# Link all dotfiles
./bin/dotfiles.sh link
# Link only specific packages
./bin/dotfiles.sh link zsh nvim tmux
# Unlink all dotfiles
./bin/dotfiles.sh unlink
# Unlink specific packages
./bin/dotfiles.sh unlink zsh nvimThe install script will:
- Install git and stow
- Link dotfiles using stow (customizable in
bin/lib/common.sh) - Install system packages (OS-specific dependencies)
- Install mise and all tools defined in
.mise.toml - Install common tools (tpm, fzf, etc.)
- Configure shell and tools
Note: The script links your dotfiles first to prevent conflicts with tools that create config files during installation.
Most CLI tools are managed by mise via the .mise.toml config file. This provides:
- Cross-platform consistency - Same tools, same versions across macOS/Linux/Arch
- Version pinning - Lock tool versions for reproducibility
- Simple updates -
mise upgradeupdates everything at once
Tools managed by mise:
- Language runtimes: node, python, ruby, rust, go, dart, dotnet, flutter
- CLI tools: just, task, glow, gh, lazygit, lazydocker, yazi, starship, fzf, bat, eza, fd, ripgrep, zoxide, delta, kdash
Tools managed by OS package managers:
- System dependencies: tmux, neovim, kubectl, docker, lua, postgresql
- Platform-specific tools and libraries
Tools installed manually:
- Niche tools: D4s, regex-tui, basalt-tui (not available in aqua registry)
If you prefer to link configuration files individually:
cd <path-to-dotfiles>
stow -vv nvim zsh starship tmuxThe dotfiles.sh script is located in the bin/ directory of wherever you cloned the repo:
<path-to-dotfiles>/bin/dotfiles.sh update
<path-to-dotfiles>/bin/dotfiles.sh link
<path-to-dotfiles>/bin/dotfiles.sh unlink nvimYou must turn on the SSH Agent in 1Password. You can find it under Settings->Developer