Personal shell, editor and CLI config. Managed with GNU Stow.
Ubuntu / Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git stow curl \
vim tmux \
bat fd-find ripgrep eza \
fzf zoxide \
htop tree jq \
python3 python3-venv python3-pip \
zshOn Debian/Ubuntu the
batandfdbinaries are installed asbatcatandfdfinddue to package-name conflicts with older tools. The shell rc files alias them back tobat/fdautomatically.
Starship (prompt) isn't reliably packaged in apt — install via the upstream script:
curl -sS https://starship.rs/install.sh | shmacOS
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install \
stow \
vim tmux \
bat fd ripgrep eza \
fzf zoxide \
htop tree jq \
python \
starship \
zshgit clone https://github.com/ipetr0v/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
stow homestow home symlinks everything under ~/.dotfiles/home/ into $HOME,
preserving directory structure. To remove: stow -D home.
chsh -s "$(command -v zsh)"Both shells auto-activate a venv at ~/.local/share/venv if it exists.
Create it once for a clean default Python with your common CLI packages:
python3 -m venv ~/.local/share/venv
~/.local/share/venv/bin/pip install --upgrade pipFor per-project environments use a project-local .venv (and direnv to
auto-activate) rather than this shared one.
These files are gitignored — create per machine as needed:
| File | Purpose |
|---|---|
~/.bashrc.local |
bash overrides |
~/.config/zsh/.zshrc.local |
zsh overrides |
~/.vimrc.local |
vim overrides (e.g. set clipboard=unnamedplus on desktop) |
~/.gitconfig |
git identity (different for personal/work machines) |
~/.secrets |
API tokens, etc. — sourced by both shells if present |
Ghostty is the desktop terminal emulator (on Windows, WSL runs under Windows Terminal instead).
Ubuntu / Debian
Not in the default apt repos — install via the community .deb
(mkasberg/ghostty-ubuntu), or see the
install guide for other options.
Ghostty uses its own xterm-ghostty terminfo — present locally, but not on most
remote servers, so SSH sessions can show a garbled prompt. Copy the entry to a server
once (the dotfiles already add ~/.local/share/terminfo to the terminfo search path):
infocmp -x xterm-ghostty | ssh user@host -- tic -x -o '$HOME/.local/share/terminfo' -macOS
brew install --cask ghosttyEverything that maps into $HOME lives under home/ (the single stow package).
Repo-meta (README, .git) stays at the root, so there's nothing to ignore.
~/.dotfiles/
├── README.md
├── .gitignore
└── home/ # stow package — mirrors $HOME
├── .bashrc
├── .zshenv
├── .vimrc
└── .config/
├── zsh/ # .zshrc, plugins.zsh, aliases.zsh, zsh_plugins.txt
├── nix/nix.conf # Nix: flakes + XDG base directories
├── bat/config
├── python/startup.py
└── starship.toml