My public Arch/Omarchy dotfiles, managed with GNU Stow and the dot command.
- Stow-based dotfiles rooted at
~/.config/dotfiles - Public config for shell, editor, and tooling
- One command entrypoint at
scripts/.local/bin/dot - Optional private overlays from
~/.config/dotfiles-private - Omarchy repo sync for
bootstrap,hypr,waybar,ghostty, anduwsm - Global git workflow watch for watched GitHub repos on this machine
scripts/.local/bin/dot- main command entrypoint.stowrc- stow target and ignore ruleszsh/- shell configneovim/- Neovim configstarship/- prompt configagents/- agent tooling: public OpenCode (.opencode/), Cursor launcher script (.local/bin/cursor); private overlay adds~/.cursor/(argv.json,mcp.json, rules), Claude Code, OpenCode secrets,~/.config/opencode/(seedot agents-sync). OpenCode skills, agents, commands, and plugins are published totimmo001/opencode-configautomatically on push.editorconfig/- editor config
- Current desktop/laptop split worktree repo:
hypr - Laptop worktree:
~/.config/hypron branchlaptop - Desktop worktree:
~/.config/hypr-desktopon branchdesktop - If this split-worktree setup changes, update the relevant
README.md,AGENTS.md, and skill documentation together so the documented layout stays accurate
# Before dot is on PATH
~/.config/dotfiles/scripts/.local/bin/dot help
# Typical workflow
dot init
dot update
dot diff
dot doctordot init- questionnaire (when available), Omarchy sync (including split-repo worktree setup likehypr-desktop), package setup, optional public/private Arch package install, then public/private install and workflow-watch setupdot update- Omarchy + public/private pull (including optional extra private repos and split Omarchy repo worktrees), then stow refresh and workflow-watch reconfigurationdot stow- stow refresh only (no git pull)dot diff- git status + staged/unstaged summaries with fetched unpushed/incoming commit checks across managed repos (including optional extra private repos and split Omarchy repo worktrees); usedot diff --waybarfor one-line Waybar JSONdot setup [--confirm]- package install step onlydot install- backup/adopt install flow for public/private dotfilesdot clean- unstow private then publicdot doctor- tool, repo, workflow watch, extra repo, remote, public/private package, private package repo, and Chromium extension health checksdot opencode-debug [--agent <name>]- runopencode debug paths,config,skill, andinfotogether; optionally inspect one agent withopencode debug agent <name>dot private-pkg-publish [--no-git] [--skip-build] [--install] <package>- build and publish a mapped private package into the private pacman repo, sync the mirror, refresh pacman metadata, optionally install it, and commit/push by defaultdot agents-sync- copy~/.config/opencode/AGENTS.mdintoagents/.cursor/rules/global-agents.mdcin private dotfiles by default (alwaysApply: true+ body; stows to~/.cursor/rules/).dot updateanddot diffrun this automatically by default (see env vars below).
OpenCode skills, agents, commands, and plugins live in agents/.config/opencode/ and are also automatically published to timmo001/opencode-config so they can be browsed, imported, and installed independently of the full dotfiles repo — see that repo for documentation and installation instructions.
- Debug:
dot opencode-debug [--agent <name>] - Publishing is automatic via GitHub Actions on push
system-health-check- friendly multi-snapshot system health report for CPU, memory, network, pressure, and known logs- Add
--open-opencodeto runopencode runagainst the saved report, then open a full interactive OpenCode session withopencode --continue
- Public dotfiles provide the global
pre-pushhook, poller, and user systemd units - Private dotfiles provide the watchlist in
~/.config/dotfiles-private/.git-workflow-watch-repos - The global hook queues pushed commits only for watched GitHub repositories and only when the commit matches the local git identity
- The watcher polls
gh run list --commit <sha>and sends one desktop notification per workflow run as each run completes - Failed workflow runs are cached for Waybar; left click opens all tracked failed run URLs, right click clears the list, and stale failures expire automatically after 1 hour by default
dot init,dot install, anddot updateconfigure the globalcore.hooksPathand enablegit-workflow-watch.timer;dot stowonly links filesdot doctorverifies the hooks path, watchlist file, timer state, and active Waybar workflow-failures module wiring
- Public dotfiles provide
daily-volume-zero.timerin laptop-only stow packages (scripts--laptopandsystemd--laptop), a user systemd timer that runs at 5am local time - The timer runs
daily-volume-zero, which sends a 10-second desktop notification, clears default sink mute, then sets the default PipeWire/WirePlumber sink volume to0% - The timer is optional and is not enabled by
dot; usesystemctl --user enable --now daily-volume-zero.timeron machines that should use it
DOTFILES_PUBLIC_DIR- public dotfiles path (default~/.config/dotfiles)DOTFILES_PRIVATE_DIR- private dotfiles path (default~/.config/dotfiles-private)DOT_ALLOW_PRIVATE-auto|always|never(defaultauto)DOT_PRIVATE_GH_USER- expected GitHub user for private actions (defaulttimmo001)DOT_PRIVATE_EXTRA_REPOS_FILE- extra private repo config file fordot diff/dot update/dot doctor(default$DOTFILES_PRIVATE_DIR/.dot-extra-repos, format:name|path[|schedule]or justpath; 5-field cron schedules such as* 8-15 * * 1-5filter diff/Waybar visibility only;dot doctorexpects each repo to be on a named branch with an upstream)DOT_PRIVATE_PACKAGE_REPO_FILE- private pacman repo config fordot(default$DOTFILES_PRIVATE_DIR/.dot-private-package-repo)DOT_PRIVATE_PACKAGES_FILE- private package list fordot(default$DOTFILES_PRIVATE_DIR/.dot-private-packages)DOT_PRIVATE_PACMAN_REPO_CONFIG- pacman repo snippet path written bydot(default/etc/pacman.d/timmo-private.conf)OMARCHY_REPO_BASE_DIR- Omarchy repo base path (default~/.config)DOT_OMARCHY_BRANCH- branch override for split Omarchy repos (currentlyhypr)DOT_BOOTSTRAP_BRANCH- branch forbootstrapsync (defaultdistro/omarchy)DOT_INCLUDE_OMARCHY_DIFF_REPOS- include Omarchy repos indot diff(1|0, default1)DOT_INCLUDE_OMARCHY_UPDATE_REPOS- include Omarchy repos indot updatesync (1|0, default1)DOT_INIT_NONINTERACTIVE- skip init questionnaire (1|0, default0)DOT_WORKFLOW_WATCH_HOOKS_PATH- global git hooks path for workflow watch (default~/.config/git/workflow-watch-hooks)DOT_WORKFLOW_WATCH_REPOS_FILE- watched repo list file (default$DOTFILES_PRIVATE_DIR/.git-workflow-watch-repos)DOT_WORKFLOW_WATCH_TIMER_UNIT- workflow polling timer unit name (defaultgit-workflow-watch.timer)DOT_DAILY_VOLUME_ZERO_TIMER_UNIT- 5am volume reset timer unit name (defaultdaily-volume-zero.timer)DOT_AUTO_CD- zsh wrapper auto-cd to first repo with changes afterdot diff; otherwise restore original dir (failed diff falls back to~/.config/dotfiles) (1|0, default1)DOT_AGENTS_SYNC_SOURCE- AGENTS file to mirror (default~/.config/opencode/AGENTS.md)DOT_AGENTS_SYNC_RULE_FILE- Cursor rule output path (default$DOTFILES_PRIVATE_DIR/agents/.cursor/rules/global-agents.mdc, else~/.cursor/rules/global-agents.mdc)DOT_AGENTS_SYNC_ON_UPDATE- runagents-syncafterdot update(1|0, default1)DOT_NOTES_DIR- notes vault git repo (default~/Documents/notes)DOT_FETCH_TTL_SECONDS- seconds to reuse last upstream fetch (default300)
- Clone
dotfilesto~/.config/dotfiles - Clone
dotfiles-privateto~/.config/dotfiles-private(if available) - Confirm
gh auth statusworks - Run
~/.config/dotfiles/scripts/.local/bin/dot doctor - Run
~/.config/dotfiles/scripts/.local/bin/dot init - Restart shell and confirm
dot helpis onPATH - Run
dot diffand verify expected repo state - Run
dot updateto validate sync + stow end-to-end