Skip to content

About

🔧 .files, including ~/.macos — sensible defaults for macOS development (catered to Node.js)

Resources

Stars

12 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

Dustin's dotfiles (fork of mathias')

Screenshot of my shell prompt

Installation

Note: this is a fork of mathiasbyrnes/dotfiles. Check out the original for the latest and greatest.

Warning: If you want to give these dotfiles a try, you should first fork this repository, review the code, and remove things you don’t want or need. Don’t blindly use my settings unless you know what that entails. Use at your own risk!

  1. Clone: git clone https://github.com/DSchau/dotfiles.git
  2. ./init/init.sh: creates ~/Projects/{Personal,Work,Scripts}, copies scripts and Ghostty config, creates an SSH key and ~/.ssh/config, and installs oh-my-zsh, nvm and bun
  3. ./bootstrap.sh: copies the dotfiles (.zshrc, .bash_profile, .aliases, …) into ~, copies Claude Code commands to ~/.claude/commands, sets up pi and syncs Zed
  4. ./brew.sh: installs Homebrew, CLI tools and apps (casks)
  5. ./init/mas.sh: installs the Mac App Store apps listed in init/mas_apps.txt (sign in to the App Store first)
  6. ./.macos: sets macOS defaults
  7. Optional: ./git.sh clones the repos in git_repos.txt into ~/Projects/{Personal,Work/<Org>}

./init/doctor.sh lists missing brew casks / App Store apps and checks global dependencies.

To update, from this repo: source bootstrap.sh (use set -- -f; source bootstrap.sh to skip the prompt).

pi

bootstrap.sh installs pi if it's missing (to ~/.pi/agent, added to $PATH in .bash_profile). It then merges pi/settings.json into ~/.pi/agent/settings.json and installs the packages listed there (e.g. pi-open-tui). The repo's packages list replaces your local one.

Memory

pi-memory gives pi memory that carries across sessions. It's stored as markdown in ~/.pi/agent/memory/, which is not committed because it's personal.

  • pi/AGENTS.md → ~/.pi/agent/AGENTS.md: tells the agent to save preferences, decisions, lessons and deferred work without being asked to "remember"

  • pi/prompts/memory-promote.md → /memory-promote [days]: moves durable facts from recent daily logs into MEMORY.md and prunes stale entries. Run it about once a week

  • bootstrap.sh installs qmd globally so memory_search works (keyword search immediately; semantic search after the first embed downloads its model)

  • .exports sets PI_CACHE_RETENTION=long, sends exit summaries to Haiku instead of Opus (with a 30s timeout instead of 10s), and also writes summaries on /new, /resume, /fork and /reload

  • pi/patches/pi-memory@0.4.2.patch is a local patch, applied by pi/patch-packages.sh (which bootstrap.sh runs). It does two things:

    • Exit summaries become short index entries (Topic/Outcome/Files/Open) instead of long Decisions/Lessons write-ups
    • The summary is written by a detached background process, so Ctrl+D and /quit exit immediately. Set PI_MEMORY_EXIT_SUMMARY_BACKGROUND=0 to go back to waiting. Worker errors go to $TMPDIR/pi-memory-exit-summary.log

    pi update reinstalls packages without the patch, so run ~/dotfiles/pi/patch-packages.sh afterwards. pi-memory is pinned to 0.4.2 in pi/settings.json so the patch keeps applying. To upgrade, bump the pin, rebase the patch, and rename the patch file to match the new version

  • showCacheMissNotices in pi/settings.json shows prompt-cache misses, which are where tokens get wasted

The default provider is OpenRouter. The API key is not committed. Create one at openrouter.ai/keys, then run /login in pi. pi saves it to ~/.pi/agent/auth.json, outside the repo. pi also reads an OPENROUTER_API_KEY environment variable if one is set.

Zed

init/Zed is the source of truth. bootstrap.sh overwrites ~/.config/zed/settings.json and keymap.json. Extensions are installed by Zed itself from auto_install_extensions. It also links the zed CLI into ~/.local/bin.

  • Dracula Pro is paid and not committed: bootstrap.sh copies the Zed theme from iCloud if it's there
  • The editor font (Fira Code) is installed by brew.sh

Camera ingest (scripts/)

Copies photos and videos from the camera's SD card (/Volumes/Videos) to the NAS through the HTPC, then starts the HTPC's photo-backup (R2 + Google Photos). The full flow is in htpc-knowledge CAMERA.md.

  • media (scripts/media.sh): runs videos.sh and pictures.sh, then starts photo-backup on the HTPC only if both succeeded. Logs to ~/logs/media.log. It refuses to run off the home network (ALLOW_REMOTE=1 overrides)
  • media status: the last photo-backup run. Files stay on the card; reformat it in the camera once all four jobs end with exit 0 (or set REMOVE_FROM_CARD=1 to delete them from the card as soon as they're on the NAS)
  • pictures.sh: copies the originals first, then converts only the files rsync sent: one exiftool call for the years, sips in parallel
  • drop.sh: ~/Movies/Drop/*.mov → ~/Movies/Home/*.mp4, remuxed when possible, otherwise re-encoded with VideoToolbox HEVC

Local overrides

  • ~/.path: sourced first; use it to extend $PATH, e.g. export PATH="/usr/local/bin:$PATH"
  • ~/.extra: extra settings (git name/email); tracked and copied by bootstrap.sh

Feedback

Suggestions/improvements welcome!

If specific to this repository, feel free to use these issues.

Author

Original author

twitter/mathias
Mathias Bynens

Thanks to…

About

🔧 .files, including ~/.macos — sensible defaults for macOS development (catered to Node.js)

Resources

Stars

12 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages