{"id":50925903,"url":"https://github.com/djtjwillia/dogfiles","last_synced_at":"2026-06-16T23:01:03.865Z","repository":{"id":65340133,"uuid":"561524999","full_name":"djtjwillia/dogfiles","owner":"djtjwillia","description":"mac for development setup \u0026 dot files","archived":false,"fork":false,"pushed_at":"2026-06-12T19:18:07.000Z","size":166,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-12T19:21:50.513Z","etag":null,"topics":["developer-tools","dotfiles","dotfiles-macos","macos"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djtjwillia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":"2022-11-03T22:04:53.000Z","updated_at":"2026-06-12T18:06:31.000Z","dependencies_parsed_at":"2023-12-14T17:49:59.140Z","dependency_job_id":"bc43726a-208d-485d-b0d0-205b14b1babb","html_url":"https://github.com/djtjwillia/dogfiles","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/djtjwillia/dogfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djtjwillia%2Fdogfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djtjwillia%2Fdogfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djtjwillia%2Fdogfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djtjwillia%2Fdogfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djtjwillia","download_url":"https://codeload.github.com/djtjwillia/dogfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djtjwillia%2Fdogfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34426745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["developer-tools","dotfiles","dotfiles-macos","macos"],"created_at":"2026-06-16T23:00:26.291Z","updated_at":"2026-06-16T23:01:03.806Z","avatar_url":"https://github.com/djtjwillia.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dogfiles\n\nthis cowdog has dotfiles!\n\n![hank the cowdog](http://2.bp.blogspot.com/-qsXKNYQ4xZc/TpfFkRYfcqI/AAAAAAAALbY/h8tydti83oA/s1600/hankthecowdog.gif)\n\n## Setup\n\n1. Install [go-task](https://taskfile.dev/) (e.g., `brew install go-task/tap/go-task`). The provisioning workflow now uses `task init` under the hood.\n\n2. Setup your ssh keys.\n   a. make sure your ssh keys are generated\n   b. make sure your signing keys are generated.\n   c. if using separate signing keys from your auth keys,\n   make sure to add them to the ssh agent using `ssh-add`\n\n3. Setup your variables:\n   a. Copy `env/.env.example` to `.env` and fill in persona-specific git + ssh values (kept untracked).\n   b. Until the migration fully lands, you can still adjust `playbook.yml`/`roles/macbook/files/gitconfig` for the Ansible fallback.\n   **Note: Never commit your `.env` or personalized git/ssh files!**\n\n4. Make sure the init script is exectuable:\n\n```shell\n  chmod +x ./init.sh\n```\n\n5. Run the init script (or invoke `task init` directly)\n   This command will do the following:\n\n   - install [oh-my-zsh](https://ohmyz.sh/#install) if it is not installed\n   - install [Brew](https://docs.brew.sh/Installation) if it is not installed\n   - install go-task (via Homebrew) if it is not installed\n   - run `brew bundle`\n   - sync top-level `dotfiles/` into `~/.dotfiles`\n   - render `templates/*.tmpl` (zshrc, git, ssh) using values from `.env`\n   - configure Windsurf by copying everything under `windsurf/` into `~/Library/Application Support/Windsurf/User/`\n\n   Pass persona + safety flags as env vars, e.g. `PERSONA=work DRY_RUN=true task init`.\n\n6. Do some manual config/fixing.\n\nTerminal:\n\n- Open iTerm2, under `iTerm2` in the menu bar, select `Make iTerm2 Default Term`\n\nNPM:\n\n- `nvm install --lts`\n- `nvm use v18.14.0`\n\nTailscale:\nDownload and install Tailscale.\n\n## Usage\n\nOnce the init script has been run, you can re-use the Taskfile commands at any time:\n\n- `task init` – full bootstrap.\n- `DRY_RUN=true task init` – print everything that *would* run without changing your system.\n- `PERSONA=personal|work|both task init` – choose which git/ssh identities to render.\n- `task dotfiles:sync` / `task dotfiles:pull` – push or pull dotfiles between `dotfiles/` and `~/.dotfiles`.\n- `task brew:bundle` / `task brew:dump` – install or refresh the Brewfile.\n- `task ides:windsurf` – sync the checked-in Windsurf settings to the live profile.\n- `task ides:iterm2` – install the tracked `iterm2/com.googlecode.iterm2.plist` into `~/Library/Preferences/`.\n\nIdempotence is enforced within each task, so re-running `task init` is safe at any time.\n\n### Maintaining assets\n\n- **Dotfiles** – edit files inside the top-level `dotfiles/` directory (aliases/functions/globals). Run `task dotfiles:sync` when you’re ready to apply them to `~/.dotfiles`, or `task dotfiles:pull` to bring live edits back into the repo.\n- **Templates** – zshrc/git/ssh templates live under `templates/`. These are rendered via `envsubst`, so prefer `${VAR}` placeholders fed by `.env`.\n- **Windsurf** – copy your current editor config from `~/Library/Application Support/Windsurf/User/` plus Codeium chat memories (e.g. `/Users/\u003cyou\u003e/.codeium/windsurf/memories/global_rules.md`) into the repo’s top-level `windsurf/` directory. `task ides:windsurf` will mirror this folder into the live Windsurf profile.\n- **iTerm2** – export your preferences to `iterm2/com.googlecode.iterm2.plist` (from `~/Library/Preferences/` or iTerm2’s export feature). Run `task ides:iterm2` to install the tracked plist onto the machine.\n\nKeeping these directories as the source of truth ensures Taskfile changes remain predictable and reviewable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjtjwillia%2Fdogfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjtjwillia%2Fdogfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjtjwillia%2Fdogfiles/lists"}