{"id":19667932,"url":"https://github.com/lcatlett/mydots","last_synced_at":"2026-04-18T00:02:17.946Z","repository":{"id":67458601,"uuid":"185715348","full_name":"lcatlett/mydots","owner":"lcatlett","description":"mydots, mydots, my lovely lady dotfiles :dancers:","archived":false,"fork":false,"pushed_at":"2026-04-06T00:54:18.000Z","size":4288,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-06T01:29:27.107Z","etag":null,"topics":["dotfiles","dotfiles-macos","dotfiles-setup","shell","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lcatlett.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-05-09T02:54:38.000Z","updated_at":"2026-04-06T00:54:23.000Z","dependencies_parsed_at":"2025-07-01T11:46:58.920Z","dependency_job_id":null,"html_url":"https://github.com/lcatlett/mydots","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lcatlett/mydots","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcatlett%2Fmydots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcatlett%2Fmydots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcatlett%2Fmydots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcatlett%2Fmydots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lcatlett","download_url":"https://codeload.github.com/lcatlett/mydots/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcatlett%2Fmydots/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31950891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","dotfiles-macos","dotfiles-setup","shell","zsh"],"created_at":"2024-11-11T16:34:03.274Z","updated_at":"2026-04-18T00:02:17.933Z","avatar_url":"https://github.com/lcatlett.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles\n\nPersonal macOS dotfiles for Apple Silicon. This repo bootstraps a fresh Mac to a\nworking development environment and keeps config files synced via symlinks — no\nmagic, no frameworks. Tools are managed with a mise-first philosophy: language\nruntimes and CLI tools go through [mise](https://mise.jdx.dev/), Homebrew is\nreserved for system libraries and GUI apps. Portable enough to re-run on any\nApple Silicon Mac.\n\n![Terminal](https://raw.githubusercontent.com/lcatlett/mydots/master/screenshot.png)\n\n---\n\n## Quick Start\n\n```bash\nxcode-select --install\ngit clone https://github.com/lcatlett/mydots ~/dotfiles\n~/dotfiles/bin/dotfiles install\n```\n\nThis installs Homebrew packages, creates symlinks, and installs mise-managed\ntools. See [BOOTSTRAP.md](BOOTSTRAP.md) for the full step-by-step guide\n(secrets setup, macOS defaults, GPG/SSH keys, troubleshooting).\n\n---\n\n## Repository Structure\n\n```\ndotfiles/\n├── bin/          Scripts → ~/bin/ (includes the `dotfiles` CLI)\n├── dots/         Config files → ~/ (symlinked)\n├── mise/         mise global config → ~/.config/mise/ (symlinked)\n├── install/      Bootstrap scripts (install.sh, symlinks.sh, brew.sh, Brewfile)\n├── macos/        macOS defaults scripts (defaults.sh, extended.sh, dock.sh)\n├── tests/        Drift detection and validation suite\n├── dots/ghostty/ Ghostty terminal config + themes → ~/.config/ghostty/\n├── iterm/        iTerm2 color schemes (fallback)\n└── fonts/        FiraCode, Hack Nerd Font, Inconsolata\n```\n\nLive config files are symlinks into this repo. Editing `~/.zshrc` **is** editing\n`dots/.zshrc`. Symlinks are managed by `install/symlinks.sh`.\n\n---\n\n## Tool Management\n\n\u003c!-- Source of truth for the brew/mise split: install/Brewfile header comment\n     and mise/config.toml. Update this section if either changes. --\u003e\n\n### mise manages runtimes and CLI tools\n\n[mise](https://mise.jdx.dev/) is a single polyglot tool version manager that\nreplaces nvm, pyenv, rbenv, and most Homebrew CLI installs. The global config is\ntracked at `mise/config.toml` in this repo and symlinked to\n`~/.config/mise/config.toml` during setup.\n\n**Language runtimes:** Node.js, Python, Go, PHP (8.2/8.3/8.4), Ruby, Rust, Bun, uv\n\n**CLI tools:** bat, eza, fd, fzf, ripgrep, jq, yq, delta, zoxide, starship,\ndirenv, tmux, gum, glow, broot, gh, act, git-cliff, shellcheck, hadolint,\nhyperfine, dust, duf, cmake, mkcert, and more (~55 tools total)\n\n```bash\nmise ls                        # List installed tools\nmise use --global node@latest  # Install latest Node globally\nmise use node@20               # Pin Node 20 for current project\nmise install                   # Install everything from config\nmise outdated                  # Check for updates\n```\n\n### Homebrew manages system libraries and GUI apps\n\nHomebrew is reserved for things mise can't handle — compilation libraries, system\nservices, and macOS GUI apps. The full list is in `install/Brewfile`.\n\n**Libraries:** openssl, gnupg + pinentry-mac, imagemagick, mysql-client, curl,\nlibffi, libyaml, zlib, and build dependencies\n\n**GUI apps (casks):** iTerm2, Raycast, Sequel Ace, GPG Suite, OrbStack, ngrok\n\n**Rule of thumb:** before adding to the Brewfile, check `mise ls-remote \u003ctool\u003e`.\nIf mise has it, use mise.\n\n---\n\n## Shell Architecture\n\n\u003c!-- Source of truth: dots/.zshrc. Update this section if startup order changes. --\u003e\n\n### Startup order\n\n```\n.zshrc\n  → .exports (env vars — EDITOR, tokens, build flags)\n  → .aliases\n  → ~/.zsh/functions/*.zsh (auto-sourced modular functions)\n  → History config\n  → PATH construction (typeset -U, priority order)\n  → GPG agent + SSH keys (async, non-blocking)\n  → rg/fd/pigz wrappers (override grep/find/gzip)\n  → compinit (cached daily)\n  → mise activate\n  → zoxide init\n  → Starship prompt init\n```\n\nStartup target: under 300ms.\n\n### Key files\n\n| File | Purpose |\n|------|---------|\n| `dots/.zshrc` | Main shell config — PATH construction + startup orchestration |\n| `dots/.exports` | Environment variables (EDITOR, tokens, build flags) — **gitignored** |\n| `dots/.aliases` | Shell aliases |\n| `dots/.gitconfig` | Git config + ~30 aliases + delta pager settings |\n| `dots/.gitignore_global` | Global gitignore (applies to all repos) |\n| `install/Brewfile` | Homebrew packages, casks, fonts, VS Code extensions |\n| `install/symlinks.sh` | Defines every managed symlink |\n| `mise/config.toml` | Global mise tool versions |\n| `bin/dotfiles` | CLI entry point (`dotfiles help` for commands) |\n\n### PATH priority\n\n```\n~/.local/share/mise/shims   → mise-managed tools (injected by mise activate)\n~/bin                        → Personal scripts (from this repo)\n~/.local/bin                 → Direct installs\n/opt/homebrew/bin            → Homebrew (Apple Silicon)\n/usr/bin                     → System\n```\n\n### Git config highlights\n\n- **Pager:** delta (syntax-highlighted, side-by-side diffs, VS Code hyperlinks)\n- **Defaults:** `pull.rebase=true`, `fetch.prune=true`, `push.autoSetupRemote=true`\n- **Conflict style:** `zdiff3` (shows base in three-way conflicts)\n- **rerere:** enabled (reuse recorded conflict resolutions)\n- **Signing:** GPG via gpg-agent (also handles SSH auth)\n\nUseful aliases: `git s` (short status), `git wip` (quick savepoint), `git undo`\n(soft reset last commit), `git ahead` (unpushed commits), `git lol` (graph log).\n\n---\n\n## What's Not Here\n\nThis repo does **not** contain — and never will contain:\n\n- **SSH keys** — generate per-machine (`ssh-keygen -t ed25519`)\n- **GPG keys** — generate per-machine (`gpg --full-generate-key`)\n- **secrets** — `dots/.exports` is gitignored; it holds tokens and credentials\n\nA template for `.exports` is provided at `dots/.exports.template`. Copy it to\n`dots/.exports` and fill in your values. See [BOOTSTRAP.md](BOOTSTRAP.md) for\ndetails.\n\n---\n\n## Making Changes\n\n**Edit shell config** — edit directly in `dots/`; changes are live via symlink:\n```bash\nsource ~/.zshrc   # reload, or open a new shell\n```\n\n**Add a Homebrew package** — add to `install/Brewfile`, then:\n```bash\nbrew bundle --file=install/Brewfile\n```\n\n**Add a mise tool:**\n```bash\nmise use --global \u003ctool\u003e@latest\n```\n\n**Add a new dotfile** — add the file to `dots/`, add a `ln -sfv` line to\n`install/symlinks.sh`, then:\n```bash\ndotfiles symlinks\n```\n\n**Add a new script** — add to `bin/`, add the script name to the loop in\n`install/symlinks.sh`, then run `dotfiles symlinks`.\n\n**Run drift detection** — checks for config drift (broken symlinks, wrong\npermissions, stale Brewfile entries, secrets in tracked files):\n```bash\nbash tests/validate.sh\n```\n\n---\n\n## dotfiles CLI\n\n```bash\ndotfiles help          # Show all commands\ndotfiles install       # Full bootstrap (brew, mise, symlinks, macOS defaults)\ndotfiles update        # Update OS, Homebrew, and mise tools\ndotfiles symlinks      # Re-run symlink creation\ndotfiles brew          # Run brew install only\ndotfiles defaults      # Apply macOS defaults\ndotfiles dock          # Configure Dock layout\ndotfiles clean         # Clean brew caches\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcatlett%2Fmydots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flcatlett%2Fmydots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcatlett%2Fmydots/lists"}