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
- Single compiled binary at
scripts/.local/bin/dot(Bun + Effect v4 + OpenTUI) - TUI dashboard with git diff/log views, GitHub workflow runs, GitHub notifications, repo notes, omarchy menus, git staging, and AI commit suggestions
- Optional private overlays from
~/.config/dotfiles-private - Omarchy repo sync for
bootstrap,hypr,waybar,ghostty, anduwsm - GitHub workflow run status and notification inbox via
dot git-workflows,dot git-notifications, and Waybar
dot/- TypeScript source for thedotbinary (excluded from stow)scripts/.local/bin/dot- compiled binary (stowed to~/.local/bin/dot).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
hypr,waybar,ghostty, anduwsmare single-branch Omarchy repos expected onmain.bootstrapis expected ondistro/omarchy.- Hypr host-specific overrides live under
~/.config/hypr/hosts/$OMARCHY_HOST. dot stowcreates~/.config/hypr/hostas the active host symlink anddot doctorchecks it.- If this host override setup changes, update the relevant
README.md,AGENTS.md, and skill documentation together so the documented layout stays accurate.
# Fresh Arch/Omarchy machine bootstrap prerequisites
sudo pacman -S --needed git mise
# Clone public dotfiles first. If private dotfiles are wanted, authenticate gh
# before dot init; init clones dotfiles-private automatically when gh auth works.
git clone git@github.com:timmo001/dotfiles.git ~/.config/dotfiles
gh auth status || gh auth login
# Build the checked-out dot binary before it is on PATH.
cd ~/.config/dotfiles/dot
mise --no-config exec bun@latest -- bun install
mise --no-config exec bun@latest -- bun run build
# First-use setup logs to /tmp/dot-init.log by default, stows configs,
# installs mise tools, and ends with dot update.
~/.config/dotfiles/scripts/.local/bin/dot init --noninteractive --confirm
# Ongoing workflow after restarting the shell
dot update
dot git-diff
dot doctordot init- one-time first-use setup for fresh machines: private dotfiles bootstrap whengh authis available, Omarchy sync, early Hypr host-link setup (--host <name>, defaultOMARCHY_HOSTordesktop), install/adopt, stowed mise tool install, package setup, machine hooks, agents sync, thendot update; logs to/tmp/dot-init.logby default or--log <path>; fails fast after successful initdot install- ensure prerequisites, then run the backup/adopt install flow for public/private dotfilesdot update- self-update public dotfiles first, install dependencies, rebuild and restart on the rebuilt binary, then run Omarchy + public/private pull (including optional extra private repos), stow refresh, Hypr host-link setup, and first-use completion marker backfill for already-setup machinesdot stow- stow refresh only (no git pull)dot doctor- tool, repo, workflow runs, extra repo, remote, public/private package, private package repo, and Chromium extension health checksdot clean- unstow private then publicdot git-diff- git status + staged/unstaged summaries with fetched unpushed/incoming commit checks across managed repos (including optional extra private repos and Omarchy repos); usedot git-diff --bar-jsonfor one-line status bar JSON (dot diffremains a human compatibility alias)dot git-log- recent commits across the same tracked repos asdot git-diff, sorted by latest commit activity; use--rawfor CLI text outputdot git-workflows- two-pane watched GitHub workflow runs view for each repo's locally checked-out HEAD commit; use--since <date>to filter by activity time, and--raw,--bar-json,--list-repos, or--list-runsfor CLI outputdot git-notifications- GitHub notification inbox with open, mark-read, done, ignore, and unignore actions; use--all,--participating,--since <date>,--raw,--bar-json,--list-threads,--mark-read <id>,--mark-done <id>,--ignore <id>, or--unignore <id>for CLI output/actionsdot notes- two-pane repository notes browser; use--allor pressgto browse every repo notes directory, anddot notes list --allfor CLI output grouped by repodot handoffs/dot handoff- open the notes browser filtered to notes taggedhandoff; use--allto browse handoffs across every repodot 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 git-diffrun this automatically by default (see env vars below).dot opencode-debug [--agent <name>]- runopencode debug paths,config,skill, andinfotogether; optionally inspect one agent withopencode debug agent <name>dot setup-private-repo- sync the private Arch package repo mirror and repair the pacman include snippetdot 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 skill-updates- check or apply upstream updates for imported skillsdot skill-check- validate skill references across AGENTS and agent filesdot omarchy- open the Omarchy desktop controls menudot help- show the CLI help menu
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
- Private dotfiles provide the watched repo list in
~/.config/dotfiles-private/.git-workflow-watch-repos dot git-workflowsshows watched repos on the left, with workflow runs for the selected locally checked-out HEAD commit on the right; disabled workflows are hidden;dot git-workflows --bar-json --since "$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)"emits one-line status bar JSON for runs created, rerun, or updated in the window, and--list-repos/--list-runsemit plain text rows- The Waybar workflow module refreshes
dot git-workflows --bar-json --since <one-hour-ago>through its own short-lived cache; left click opens the filtered TUI and right click refreshes the cache git-workflow-watch, its global hook, and its user systemd timer are obsolete and should not be installeddot doctorverifies the watched repo list, active Waybar workflow-runs module wiring, and absence of legacygit-workflow-watchleftoversdot git-notificationsshows the authenticated user's GitHub notification inbox; the API requiresghauthenticated with a classic token carryingnotificationsorreposcope- The Waybar notification module refreshes
dot git-notifications --bar-jsonthrough its own short-lived cache; left click opens the notifications TUI and right click refreshes the cache dot doctorverifies GitHub notification API access plus the active Waybar notification 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 git-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 and matchingdot git-workflowsvisibility;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)OMARCHY_HOST- Hypr host override name used for host-specific packages and~/.config/hypr/host;dot initdefaults todesktopwhen this is unset unless--host <name>is passedDOT_OMARCHY_BRANCH- branch override for non-bootstrap Omarchy repos during syncDOT_BOOTSTRAP_BRANCH- branch forbootstrapsync (defaultdistro/omarchy)DOT_INCLUDE_OMARCHY_DIFF_REPOS- include Omarchy repos indot git-diff(1|0, default1)DOT_INCLUDE_OMARCHY_UPDATE_REPOS- include Omarchy repos indot updatesync (1|0, default1)DOT_INIT_NONINTERACTIVE- force non-interactive init mode (1|0, default0)DOT_INIT_LOG_FILE- defaultdot initlog path when--logis not passed (default/tmp/dot-init.log)DOT_WORKFLOW_WATCH_REPOS_FILE- watched repo list file used bydot git-workflows(default$DOTFILES_PRIVATE_DIR/.git-workflow-watch-repos)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 git-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)NOTES- notes vault git repo used bydot notesand OpenCode note commands (preferred; default~/Documents/notes)DOT_NOTES_DIR- compatibility notes vault override used whenNOTESis unsetDOT_FETCH_TTL_SECONDS- seconds to reuse last upstream fetch (default300)
- Clone
dotfilesto~/.config/dotfiles - If private dotfiles are wanted, confirm
gh auth statusworks beforedot init; init clonesdotfiles-privateto~/.config/dotfiles-privateautomatically when auth is available - Install bootstrap build prerequisites:
sudo pacman -S --needed git mise - Run
cd ~/.config/dotfiles/dot && mise --no-config exec bun@latest -- bun install && mise --no-config exec bun@latest -- bun run build - Run
~/.config/dotfiles/scripts/.local/bin/dot init --noninteractive --confirmfor desktop/VM setup,dot init --host laptop --noninteractive --confirmfor laptop setup, ordot initin an interactive shell - If stock Omarchy config directories already exist at
~/.config/hypr,~/.config/waybar,~/.config/ghostty, or~/.config/uwsm,dot initbacks them up with a.dot-init-backup-*suffix before cloning the managed repos - Restart shell and confirm
dot helpis onPATH - Run
dot git-diffand verify expected repo state - Run
dot updatefor ongoing sync, stow, rebuild, and init-state backfill
dot init creates ~/.config/hypr/host immediately after syncing Omarchy repos and before stow/package setup. It then runs mise install immediately after stowing dotfiles and before installing managed Arch/AUR package lists, so Bun, Node, pnpm, and similar developer tools should come from the stowed mise config rather than global pacman packages.
For GNOME Boxes shared folders, Arch provides spice-webdavd in the phodav package. Share a host folder from Boxes and pass --log <shared-path>/dot-init.log when you want init output written somewhere visible from the host.