Skip to content

joelazar/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,686 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

joelazar's dotfiles πŸš€

Screenshots πŸ–ΌοΈ

Wallpaper + Raycast πŸ–ŒοΈ

joedotfiles - wallpaper+raycast

Neovim with my custom config πŸ“

joedotfiles - neovim

Eza + fzf πŸ“‚πŸ”

joedotfiles - eza+fzf

Lazygit πŸ¦₯🌱

joedotfiles - lazygit

Zen browser πŸ§˜β€β™€οΈ

joedotfiles - zen

Zed πŸ“

joedotfiles - zed


Overview 🧰

This repo is the source of truth for my macOS setup.

I use chezmoi to manage shell config, editor settings, package installs, macOS defaults, AI tooling, and a pile of small workflow tweaks that are easy to forget until you lose them. The point is simple: I should be able to set up a new machine, run chezmoi apply, and get back to work without rebuilding my environment from memory.

A few quick facts:


What lives here πŸ“

Path What it contains
dot_config/ App and CLI configuration for tools like Fish, Ghostty, Zed, Yazi, Television, Starship, Mise, Lazygit, pgcli, Wireshark, and more
dot_pi/ Pi agent configuration, prompts, themes, modes, and local extensions
dot_agents/skills/ Local skill library for coding agents
dot_claude/ Claude Code configuration
dot_claude-work/ Separate Claude Code profile for work
dot_gemini/ Gemini CLI settings
dot_codex/ Codex configuration templates
private_dot_local/bin/ Personal utility scripts
scripts/ Shared helper scripts used by install/setup flows
Brewfile.private, Brewfile.work, Brewfile.workstation Package sets by machine type

Highlights ✨

Shell and terminal 🐚

My day-to-day shell is Fish, with config in dot_config/private_fish/.

That setup includes:

The terminal is Ghostty, configured in dot_config/ghostty/config. It uses Tokyo Night, Maple Mono NF, split navigation shortcuts, a huge scrollback buffer, and a top-mounted quick terminal.

Editors ✍️

I mostly use Zed and Neovim.

Zed is configured in dot_config/zed/ with:

  • Vim mode and which-key hints
  • custom pane and tab navigation
  • tuned git panel and inline blame
  • Television-powered file and text search tasks
  • Yazi and Lazygit tasks wired into the editor
  • AI assistant defaults for day-to-day coding work

Neovim lives in a separate repo: joelazar/nvim-config. This repo bootstraps it during first-run setup.

Search, navigation, and file management πŸ”Ž

A lot of this setup is about moving around quickly:

Those Television channels cover far more than files. There are pickers for git branches, worktrees, diffs, repositories, Docker and Kubernetes resources, AWS resources, ports, launchd services, recent files, markdown search, and more.

Git and GitHub workflow 🌿

Git tooling is a big part of this repo:

The Lazygit setup includes custom PR commands, conventional commit helpers, GitHub shortcuts, Tokyo Night styling, and delta-powered diff views.

macOS workflow 🍎

This repo also handles the machine itself, not just terminal tools.

AeroSpace is set up with workspace assignments, vim-style focus movement, resize modes, and app launch shortcuts for tools I use constantly.


AI and coding-agent setup πŸ€–

A lot of this repo is devoted to AI-assisted development. That part has grown quite a bit.

Agent clients and configs πŸ› οΈ

This repo currently tracks config for:

There is also a small helper script, ai-update, that updates the main CLI agents I use.

Pi agent πŸ₯§

Pi is where most of the custom work happens.

The config in dot_pi/agent/ includes:

Current Pi modes are built around a few practical defaults rather than a giant matrix:

  • default: Claude Opus 4.7
  • fast-claude: Claude Sonnet 4.6
  • fast-gpt: GPT-5.3 Codex
  • fastest: GPT-5.4 mini
  • deep: GPT-5.4

Local Pi extensions 🧩

There are 25 local Pi extensions in dot_pi/agent/extensions/. The ones I rely on most are:

  • pi-fff for fuzzy file finding and indexed code search
  • multi-edit for batch edits and patch-style edits
  • default-tools to enable grep and find by default
  • prompt-editor for editing and storing prompt/model combinations
  • copy-command for pulling runnable commands out of responses
  • lazygit and ghostty integrations
  • path-policy, permission-gate, and sandbox for guardrails
  • todos, loop, session-breakdown, and auto-session-name for session management
  • uv to steer Python workflows toward uv

Local skills 🎯

The agent skill library under dot_agents/skills/ currently includes 43 skills.

That set covers a few different categories:

  • Design and frontend work: frontend-design, impeccable, adapt, animate, polish, typeset, layout, colorize, and related design skills
  • Workflow and coding support: github, humanizer, session-analyzer, summarize, tmux, uv, web-browser, youtube-transcript
  • Research and external systems: perplexity-search, pdf, linear-cli, mermaid, pi-share
  • Google Workspace helpers: calendar, docs, drive, gmail, and sheets skills

Package management πŸ“¦

Package installation is split by machine type:

On first apply, run_once_install_packages.sh.tmpl takes care of the rest. That script installs Homebrew packages, Bun globals, Go tools, UV tools, GitHub CLI plugins, Yazi plugins, and a few extra utilities.

Some notable pieces from the current setup:

  • Bun packages for Pi, Codex usage tooling, Defuddle, Obsidian automation, and Google Workspace CLI access
  • UV-managed tools such as gitingest, pylatexenc, and nginx-language-server
  • GitHub CLI plugins like gh-dash, gh-repo-man, and gh-markdown-preview

Setup ⚑

Fresh machine πŸ†•

If Homebrew and chezmoi are not installed yet, start with:

curl -sSL https://raw.githubusercontent.com/joelazar/dotfiles/main/bootstrap.sh | bash

Or clone locally and run:

git clone https://github.com/joelazar/dotfiles.git
cd dotfiles
./bootstrap.sh

Existing chezmoi setup πŸ”§

If you already have Homebrew and chezmoi:

brew install chezmoi
chezmoi init https://github.com/joelazar/dotfiles.git
chezmoi apply

First-time prompts πŸ’¬

During initialization, chezmoi asks for:

  • git email
  • git username
  • machine type: work, private, or workstation

Those values come from .chezmoi.toml.tmpl.

Important note ⚠️

This repo is the chezmoi source directory, not the live destination.

If you edit files here, you need to run:

chezmoi apply

Without that step, your real dotfiles under $HOME will not change.


Day-to-day maintenance πŸ”

A few commands I use a lot:

chezmoi apply            # push source changes into the live home directory
chezmoi diff             # preview what will change

There is also a local Pi extension in .pi/extensions/chezmoi-auto-apply/ that automatically runs chezmoi apply after agent-driven edits in this repo.


Custom scripts πŸ§‘β€πŸ’»

Most of the personal helpers live in private_dot_local/bin/.

Script What it does
agent-md Creates or fixes AGENTS.md / CLAUDE.md files for coding-agent projects
ai-update Updates Claude Code, Gemini CLI, Codex, Pi, and Pi extensions
backup Encrypted backups with restic and age
cht Quick cheat-sheet lookup via cht.sh
custom-update Runs broader system and tool updates
fonttest Checks terminal font rendering
formatter Formats USB drives and SD cards with a gum UI
git-repo-manager Finds git repos recursively and offers interactive actions
git-reset Resets repos back to their default branch state
git-worktree-new Creates sibling worktrees for the current repo
init-windows Opens my usual app set for a work session
obsidian-update Triggers Obsidian plugin and theme updates across vaults
switch-main-display Changes the primary display on multi-monitor setups
transfer Uploads files through transfer.sh
untilfail Repeats a command until it fails
update-submodules Updates git submodules
wtfport Shows what is listening on a port and can kill it

Shared shell helpers used by the setup scripts live in scripts/utils and scripts/utils_install.


Theming 🎨

Tokyo Night is the common thread through most of the environment: Ghostty, Zed, Lazygit, Television, Eza, Bat, and Pi all use it in one form or another.

Fonts are centered on Maple Mono and Maple Mono NF, including OpenType alternates like cv02, cv05, cv61, and cv63.


Acknowledgements πŸ™

Some helper functions and setup patterns were originally adapted from alrra/dotfiles.

Parts of the Pi setup are also adapted from or inspired by work from:

Author GitHub Contributions
Mario Zechner @badlogic Pi itself, plus extensions and skills adapted from the Pi ecosystem, including antigravity-image-gen, editor-with-context, notify, permission-gate, sandbox, session-name, and youtube-transcript-related work
Armin Ronacher @mitsuhiko Extensions and skills adapted from agent-stuff, including answer, context, loop, prompt-editor, session-breakdown, todos, whimsical, frontend-design, github, humanizer, summarize, uv, and web-browser
Daniel Griesser @HazAT ghostty extension from pi-ghostty
Fero @ferologics session-analyzer skill from the Pi skills ecosystem

License πŸ“„

This repository is available under the MIT license.