This repository contains my personal dotfiles for setting up a productive developer environment on macOS, Linux, and containerized setups using Devcontainers. The goal is to provide a stable and maintainable environment that prioritizes pragmatic defaults over heavy customization.
- Pragmatic Minimalism: I prefer focused, single-purpose tools over complex frameworks. Instead of importing bulky plugins or features I don't use, I choose excellent, well-maintained tools that do one thing well with minimal configuration. Examples include znap for fast plugin loading, starship for cross-shell prompts, and mise for reproducible tool management.
- Portability: These dotfiles should work across macOS and Linux machines, as well as within containers. They are designed to be reliable whether installed system-wide or through a Devcontainer configuration.
- Consistency: The configuration aims to make pairing with others easy by sticking to intuitive shortcuts and well-known conventions. While these dotfiles improve my workflow, I can still work effectively without them if necessary.
- Performance with Reliability: Fast startup matters—this setup achieves 50-80% faster shell startup through caching and lazy-loading—but not at the cost of stability. I avoid risky optimizations and instead gain speed through minimalism and focused tooling. Runtime performance should not be significantly degraded by these configurations.
- Stable setup that rarely fails and is simple to maintain.
- Easy installation on a fresh Mac or Linux system, with support for Devcontainers for containerized development.
- Shared tools that follow common standards, enabling me to collaborate with others without friction.
- Documentation that clearly explains the rationale behind each configuration choice.
chezmoi init --apply $GITHUB_USERNAMEThe installer supports various options and can pass arguments directly to chezmoi init:
# Force reinstall tools (if already installed)
REINSTALL_TOOLS=true ./install.sh
# Pass arguments to chezmoi init
./install.sh -- --force # Force chezmoi to overwrite existing files
./install.sh -- --one-shot # Use chezmoi's one-shot mode
# Combine options
REINSTALL_TOOLS=true ./install.sh -- --forceYou can customize the installation behavior with these environment variables:
REINSTALL_TOOLS=true- Force reinstallation of tools even if already presentBIN_DIR=/custom/path- Install binaries to a custom directory (default:~/.local/bin)DEBUG=1- Enable debug output during installationVERIFY_SIGNATURES=false- Disable signature verification (not recommended)
For CI/CD or automated environments where no TTY is available, set these variables to bypass interactive prompts:
GIT_USER_NAME="Your Name"- Git user name for commitsGIT_USER_EMAIL="[email protected]"- Git user email for commits
Example for CI environments:
GIT_USER_NAME="CI User" GIT_USER_EMAIL="[email protected]" ./install.shFor a complete list of options, run ./install.sh --help.
The personal extension in home/dot_pi/private_agent/extensions/terminal-title.ts
shows π ⠏ working | 42% | model xhigh | session name (or π ready when
settled). The working spinner uses Pi's default frames and 80 ms cadence. Reasoning
models show their current effort level, which updates when you cycle it.
Blocking extension questions and confirmations alternate [.] / [!] until
answered or cancelled. Plain-text questions are not guessed from assistant prose.
Context is percent used; ?% means unknown, such as immediately after compaction.
Unnamed sessions use the directory name. Run /reload in Pi after applying it.
The sandboxed TUI integration test runs with bats test/pi-terminal-title.bats
and requires an installed Pi and Python 3; it never calls a real model provider.
pi-pr-session-title detects PR
references in prompts (PR 123, pull request 123, #123, or GitHub PR URLs)
and looks up the title with gh. home/.chezmoiexternals/pi.externals.toml pins
its unmodified source and MIT license to a commit; Renovate updates both pins.
The local pr-session-title/index.ts wrapper formats native session names as
pinwheel#123 — fix login race conditions, which the terminal title displays too.
It lowercases the PR subject and keeps at most five words, without another model
request. Short subjects stay short; conventional-commit scopes are removed.
Manual names win, including names set while a lookup is pending. Failed lookups leave the session unnamed. Detection uses prompt references, not the current branch's PR. Bare numbers need a GitHub checkout; URL references work anywhere.
Apply ~/.pi/agent/extensions/pr-session-title and run /reload in Pi. After
applying, bats test/pi-pr-session-title.bats test/pi-terminal-title.bats exercises
real Pi sessions and titles with a fake gh and an offline model provider. To test
without installing the external, set PI_PR_SESSION_TITLE_UPSTREAM to a local copy
of the pinned source. Tests themselves never download dependencies or call GitHub.
This project is open source under the ISC License, credited to Ivy Evans, Martin Emde.