These are my personal dotfiles for a development setup.
This is a personal configuration. If you do not like a part of it, change that part or select only the parts that you want.
Read the script before you run it.
git clone https://github.com/MSmaili/dotfiles ~/dotfiles
cd ~/dotfiles
./install.shTo see the planned actions before you make changes, use the dry-run mode:
./install.sh --dry-runThe dry-run mode prints each command. It does not change the system.
| Platform | Package manager |
|---|---|
| macOS | Homebrew |
| Ubuntu | APT |
| Fedora | DNF |
The install script detects the platform. Then it runs the correct package manager.
- Terminal: Ghostty
- Window manager (macOS): yabai with skhd for the key bindings
- Launcher (macOS): Vicinae
- Tmux sessions: hetki
- Development: Neovim, Lazygit, Lazydocker, Yazi, btop, GitHub CLI
- Coding agents: Kiro, Pi, opencode
- Shell: Zsh
- Plugin manager: Zinit
- Prompt: Pure
- Plugins: autosuggestions, fast-syntax-highlighting, completions, fzf-tab
- Tools: fzf, fd, bat, ripgrep, delta, tmux
| Path | Purpose |
|---|---|
.zshrc |
Shell configuration |
.config/nvim/ |
Neovim setup |
.config/tmux/ |
Tmux configuration |
.config/yazi/ |
Yazi file manager |
.config/git/ |
Git configuration and delta |
.config/gh/ |
GitHub CLI preferences |
.config/fzp/ |
Channels for the fzp picker |
.config/scripts/ |
Personal scripts on the PATH |
.config/opencode/ |
opencode configuration |
.kiro/ |
Kiro agents and settings |
.pi/agent/ |
Pi agent configuration |
The repository also holds configurations for Aerospace and WezTerm. The install script does not install these two tools. The configurations stay in the repository for other machines.
GNU Stow makes the symbolic links from the repository into $HOME. Stow does not copy the files. Each linked path points to one file in the repository. If you edit the file through either path, you edit the same file.
Run this command after you add a file to the repository or remove a file from it:
restowThe restow alias comes from .zshrc. Existing links continue to work without this command. Only a new file or a removed file needs it.
Start tmux. Then press:
prefix + I
The prefix is Ctrl-a.
The Brewfile and the mise configuration do not provide hetki. Install it with Go:
go install github.com/MSmaili/hetki@latesthetki starts and switches the tmux sessions. The prefix + o key binding opens
it. The workspace files are in ~/.config/hetki/workspaces/. Each file names
the sessions, the windows, and the paths. This repository does not hold these
files, because the sessions differ on each machine.
To update the tool later, run:
hetki updateUse at least these versions for full compatibility with the scripts here:
- tmux 3.2a or later
- bash 5.x or later
Git ignores the files below. Use them for personal settings.
.zshrc.local holds personal shell settings. .zshrc reads this file.
# Example: personal paths, API keys, or work aliases
export WORK_DIR="$HOME/work".config/git/config.local holds the personal Git identity. .config/git/config includes this file.
[user]
name = Your Name
email = your.email@example.com
signingkey = YOUR_GPG_KEY