Configuration Files
Description of the main configuration files included in this repository.
Shell
.zshrc
The main Zsh configuration file. It includes the following features:
- Environment variable settings (PAGER, HISTFILE, HISTSIZE, etc.)
- Pre-expanded
brew shellenvoutput, to save about 50ms per startup - Sheldon plugin manager initialization
- Alias loading
- Completion settings
Everything else is a sheldon plugin rather than a line here — the prompt, zoxide, atuin and this repository's own Zsh files included. See Sheldon.
Location: src/.zshrc
.zshenv
Environment variable configuration file that is loaded in all Zsh sessions.
Location: src/.zshenv
.alias
File defining aliases for commonly used commands. Main aliases:
lsaliases (la, ll, lla)cdaliases (_, ...., ......)vi→nvim- Python-related aliases (py, ipy, pyc)
- Browser launch aliases (chrome, safari)
The last line sources ~/.alias.local if it exists. Aliases whose values embed an account — the Google Drive named directories, for instance — live there instead of here; see Config Repositories.
Location: src/.alias
Git
config
Git configuration file. It includes the following features:
- User Information: Name and email address
- Aliases: Shortcuts for commonly used Git commands (st, br, co, cm, df, wt)
- Delta: Settings for beautiful diff display
- Side-by-side display
- Line numbers
- Decorations, plus a separate feature set for interactive diffs
- Credentials:
gh auth git-credentialas the helper for GitHub - ghq:
~/ghqas the clone root - Git LFS: Large file management
Location: src/.config/git/config
This is the XDG path, not ~/.gitconfig. Git reads both, but only this one is managed here — if a ~/.gitconfig also exists it wins for any key it sets.
Note: Please change the username and email address before use.
[init]
defaultBranch = main
[user]
email = peinan7@gmail.com
name = peinan
[alias]
st = status -u
br = branch
co = checkout
[core]
pager = delta
[interactive]
diffFilter = delta --color-only --features=interactive
[delta]
features = decorations
line-numbers = true
side-by-side = true
[fetch]
prune = true
pruneTags = true
[ghq]
root = ~/ghqAn excerpt; the full file also carries the delta colour settings, the Git LFS filter and the GitHub credential helpers.
ignore
The global gitignore, listing .DS_Store.
Location: src/.config/git/ignore
Starship
starship.toml
Starship is a fast and customizable prompt. The left prompt is deliberately short — hostname, username, and the prompt character — with everything informational moved to right_format so the cursor stays near the left margin:
- Left: hostname (shown when connected over SSH), username, prompt character
- Right: command duration, Python and Rust versions, the Git user from a custom module, and the directory path
Location: src/.config/starship/starship.toml
add_newline = true
format = """
$hostname\
$username\
$character
"""
right_format = """
$cmd_duration\
$python\
$rust\
${custom.gituser}\
$directory
"""
[character]
error_symbol = '[](red) '
success_symbol = '[](green) 'INFO
The prompt character uses nerd font glyphs, so a patched font is required. Kusunoki Mono is the one the Brewfile installs.
Sheldon
plugins.toml
Sheldon is a Zsh plugin manager. Some of the plugins it manages:
- fast-syntax-highlighting: Fast syntax highlighting
- zsh-autosuggestions: Command autosuggestion
- zsh-completions: Additional completion features
It also loads this repository's own Zsh files as plugins, by pointing at a local directory and globbing *.zsh. Most of them are applied through zsh-defer, so they do not cost shell startup time:
- zsh-configs:
~/.zsh/configs, loaded immediately - zsh-configs-lazy:
~/.zsh/configs-lazy, deferred - zsh-configs-local:
~/.zsh/local, deferred. Not part of this repository — see Config Repositories. Sheldon skips the plugin when the directory is absent, so nothing breaks on a machine without it.
Location: src/.config/sheldon/plugins.toml
An excerpt — the file has eleven plugin blocks:
[plugins.zsh-configs-lazy]
local = "~/.zsh/configs-lazy"
use = ["*.zsh"]
apply = ["defer"]
[plugins.zsh-configs-local]
local = "~/.zsh/local"
use = ["*.zsh"]
apply = ["defer"]Brewfile
Brewfile
List of packages to install with Homebrew. Categorized as follows:
- Brew: Command-line tools (neovim, tmux, git-delta, starship, etc.)
- Cask: GUI applications (1password, docker-desktop, ghostty, raycast, etc.)
- Mac App Store: App Store apps (installed with mas command)
Node and the tools installed through npm are not here — mise owns those. A tool declared in both places is worse than either: the copies shadow each other on PATH, so the one you edit may not be the one that runs.
Location: Brewfile (repository root)
Installation: brew bundle install
TIP
Main packages: neovim, tmux, starship, git-delta, sheldon, zoxide, ripgrep, bat, eza, gh, uv, and more
mise
config.toml
mise owns the runtimes and the tools installed through them — Node, Deno, Rust, Bun, and the npm and cargo packages that depend on them. The installer removes Homebrew's Node in Step 5b so there is one source of truth.
Location: src/.config/mise/config.toml
This file holds the global [tools] table only. mise use -g writes to it, so expect mise to reformat it.
mise.toml (project template)
[env] and [tasks.*] resolve against config_root, so they only make sense per project: in the global config the tasks surface in every directory. They live in a template instead, to copy into a repository root as mise.toml.
Location: misc/mise/mise.toml
Additional Configuration
Other configuration files and directories:
src/.ideavimrc- Vim configuration for IntelliJ IDEA / PyCharmmisc/- Exported GUI app settings (AltTab, BetterTouchTool, Vimium) and the mise project template. Nothing reads these from$HOME, so unlikesrc/this directory is never linked; it is a place to keep the exports under version control.
Agent skills
Personal skills live in peinan/agent-plugins under skills/<name>/SKILL.md and are shared by every harness through ~/.agents/skills, the store that npx skills uses.
Step 4c of scripts/install.sh clones the repository with ghq and links each skill into ~/.agents/skills, plus the skill directory of every agent that already exists on the machine (~/.claude/skills, ~/.codex/skills, ~/.config/opencode/skills, ~/.config/agents/skills). Pi reads ~/.agents/skills directly and needs no link.
Third-party skills are managed by npx skills and recorded in ~/.agents/.skill-lock.json. That file is machine state and is not stowed.
Neovim and tmux are not in src/. They live in their own repositories cloned under ghq root, and ~/.config/{nvim,tmux} are symlinks pointing at those clones. See the Config Repos page.