Profiles: machines, roles and shared layers

The repo was one machine's capture. It is now a set of profiles built from
layers under profiles/:

  machines/  hp-laptop, macbook-air-m2, coder-desktop
  roles/     developer, devops, ai-agents
  features/  handoff (lan-mouse)
  shared     base, personal, personal-desktop

A profile resolves to its includes (depth first), any --roles, then itself;
for a path several layers provide, the last wins. install.sh --show prints
the layers and which one owns each file.

Hyprland settings no longer share a file: base's hyprland.lua loads
~/.config/hypr/layers/*.lua with Omarchy's own require_all, and bindings.lua
stays stock so nothing binds twice. Verified with Hyprland 0.56.2
--verify-config for all three profiles, plus a broken probe layer to prove
the directory is loaded.

packages.txt gains per-line arch (Arch Linux ARM lacks opencode, codex, mise,
shellcheck) and cmd= (skip when dotfiles' ~/.local/bin already provides the
command), and an [ignore] section that replaces capture.sh's hard-coded list.
Tab-separated records would have collapsed empty fields under read, so
package records use the unit separator.

hp-laptop: re-captured. monitors.lua catch-all scale is now 1, shell.json
has four new plugins, fix-stuck-displays has its connector-name fix,
navbar-cat is gone, plugin-manager and omarchy-phone are pinned, the
herdr-hud working tree is re-diffed and bin/herdr-web rides along. Its
handoff peer is now the Air (192.168.1.49); the old default list was the
HP's own addresses, written from the Air's side.

macbook-air-m2: captured read-only over SSH as it is (no themes, plugins
or bar changes). Its LAN_MOUSE_POINTER_SCALE=0.7 moves from the shared unit
into a lan-mouse.service.d drop-in in its own layer.

coder-desktop: the Omarchy settings covert-cloud's image used to patch in
by hand (Virtual-1 at 1920x1080, no animations, stay-awake, Retro 82 once),
for the image to apply at a pinned commit. Roles reach it per workspace via
install.sh --roles ... --no-clobber.

capture.sh writes each file back into the layer that owns it, and refuses
to run before the first layered install unless --force, since the old file
shapes would land in shared layers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153egowV1Xw2RNjZnSyZicc
This commit is contained in:
2026-10-16 16:01:54 -04:00
co-authored by Claude Opus 5.5
parent b3f3f46b98
commit 87a31858fd
98 changed files with 2010 additions and 532 deletions
+7
View File
@@ -0,0 +1,7 @@
# See machines/hp-laptop/packages.txt for the format.
[repo]
claude-code cmd=claude # omarchy repo, both arches
github-copilot-cli cmd=copilot # omarchy repo, both arches
gemini-cli cmd=gemini
opencode x86_64 cmd=opencode # not in Arch Linux ARM; dotfiles installs it there
openai-codex x86_64 cmd=codex # not in Arch Linux ARM; dotfiles installs it there
+9
View File
@@ -0,0 +1,9 @@
# Coding agents. Omarchy already ships herdr (the agent multiplexer) and
# `omarchy agent`, which launches whichever agent `omarchy-default-agent`
# names; this installs the agents themselves. Choosing the default is left to
# the person (Omarchy menu > Setup > Agent), or to a layer that ships
# config/omarchy/defaults/agent, as personal/ does.
description="Coding agents: Claude Code, OpenCode, Codex, Gemini, Copilot"
# mcp-config points opencode at the covert-gpt LiteLLM gateway (needs secrets);
# hermes is the Hermes agent. Neither belongs on a Coder desktop.
dotfiles=(bin mcp-config hermes)
+13
View File
@@ -0,0 +1,13 @@
# See machines/hp-laptop/packages.txt for the format. cmd= skips a package whose
# command is already on PATH, e.g. from dotfiles' ~/.local/bin shims.
[repo]
github-cli cmd=gh # GitHub CLI
git-delta cmd=delta # syntax-highlighted git diffs
uv cmd=uv # Python packaging and venvs
just cmd=just # command runner
direnv cmd=direnv # per-directory env (.envrc)
shfmt cmd=shfmt # shell formatter
shellcheck x86_64 cmd=shellcheck # not built for aarch64 by Arch Linux ARM
httpie cmd=http # HTTP client
mise x86_64 cmd=mise # runtime manager Omarchy's dev-env uses; HP has mise-bin, ALARM has no mise
visual-studio-code-bin cmd=code # editor (omarchy repo)
+8
View File
@@ -0,0 +1,8 @@
# General software development. Omarchy already ships git, docker (+compose,
# buildx), lazygit, lazydocker, nvim, ripgrep, fd, fzf, clang/llvm and
# `omarchy install dev-env <lang>` for language runtimes via mise, so this only
# adds what is missing from that.
description="Software development: gh, delta, uv, just, direnv, VS Code"
# dotfiles modules this role pairs with on Nic's machines (advisory; install.sh
# prints them, it never runs dotfiles itself): zsh, git
dotfiles=(zsh git)
+28
View File
@@ -0,0 +1,28 @@
# See machines/hp-laptop/packages.txt for the format.
[repo]
# --- Kubernetes ---
kubectl cmd=kubectl
helm cmd=helm
k9s cmd=k9s
kubectx cmd=kubectx # kubectx + kubens
stern cmd=stern # multi-pod log tailing
kustomize cmd=kustomize
talosctl cmd=talosctl # the Omni-managed cluster runs Talos
cilium-cli cmd=cilium-cli,cilium
# --- infrastructure as code ---
opentofu cmd=tofu
terragrunt cmd=terragrunt
packer cmd=packer # Proxmox desktop images
ansible cmd=ansible
go-task cmd=go-task,task # Arch names the binary go-task; dotfiles installs it as task
go-yq cmd=yq
sops cmd=sops # encrypted secrets in git
age cmd=age # sops' key backend
# --- network debugging ---
bind cmd=dig # dig, delv, nslookup
mtr cmd=mtr
whois cmd=whois
nmap cmd=nmap
tcpdump cmd=tcpdump
+8
View File
@@ -0,0 +1,8 @@
# Infrastructure and Kubernetes work: the Omni/Talos cluster, OpenTofu,
# Packer/Proxmox images, Ansible.
#
# On Nic's laptops dotfiles' bin/ already puts most of these in ~/.local/bin,
# and each line's cmd= skips the package when that shim exists. On a Coder
# desktop (no dotfiles, no 1Password) the Arch packages are the tools.
description="Infrastructure/Kubernetes: kubectl, helm, k9s, tofu, talosctl, ansible"
dotfiles=(bin ansible secrets)