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
@@ -0,0 +1,11 @@
-- personal-desktop layer: the bindings that go with this layer's plugins.
-- Open Claude instead of the stock ChatGPT webapp.
hl.unbind("SUPER + SHIFT + A")
o.bind("SUPER + SHIFT + A", "Claude", { webapp = "https://claude.ai" })
-- Herdr HUD overlay (indie.herdr-hud native plugin, local branch).
o.bind("SUPER + H", "Toggle Herdr HUD", "omarchy-shell shell toggle indie.herdr-hud '{}'")
o.bind("SUPER + ALT + H", "Show or hide Herdr HUD button", "omarchy-shell shell call indie.herdr-hud toggleVisibility '{}'")
o.bind("SUPER + CTRL + DOWN", "Herdr HUD: next agent", "omarchy-shell shell call indie.herdr-hud nextAgent '{}'")
o.bind("SUPER + CTRL + UP", "Herdr HUD: previous agent", "omarchy-shell shell call indie.herdr-hud previousAgent '{}'")
@@ -0,0 +1,12 @@
# btop Activity defaults. Use "More plugin settings > Open settings file"
# to edit your own copy. Valid saves apply immediately; no restart is needed.
# Keep each setting on one line. Omitted settings use the defaults below.
# Interval ladder, in milliseconds, that the Update interval arrows step
# through. Any whole number from 100 ms to one day can still be typed.
poll_intervals = [250, 500, 1000, 2000, 5000]
# What a left click on the bar icon does. "open" launches or focuses btop;
# "toggle" also closes the plugin's btop window. The popup's start action always
# opens or focuses btop, regardless of this setting.
left_click = "toggle"
@@ -0,0 +1,110 @@
{
"version": 1,
"idle": {
"screensaver": 1200,
"lock": 1800
},
"bar": {
"position": "top",
"transparent": false,
"centerAnchor": "omarchy.clock",
"layout": {
"left": [
{
"id": "omarchy.menu"
},
{
"id": "omarchy.workspaces"
},
{
"id": "niccoconnor.mantel"
},
{
"id": "omarchy.active-window"
}
],
"center": [
{
"id": "omarchy.indicators"
},
{
"id": "omarchy.keyboard-layout"
},
{
"id": "omarchy.clock",
"format": "dddd HH:mm",
"formatAlt": "d MMMM 'W'ww yyyy",
"verticalFormat": "HH\n—\nmm"
},
{
"id": "omarchy.weather"
},
{
"id": "kb2uka.port-doctor"
},
{
"id": "akshar.radio-atlas"
},
{
"id": "omaplug"
},
{
"id": "omarchy.system-update"
}
],
"right": [
{
"id": "omarchy.tray"
},
{
"id": "izeesoft.omarchy-phone"
},
{
"id": "omarchy.spacer"
},
{
"id": "io.github.juancasanueva.plugin-manager",
"tiledExpandedPanel": true
},
{
"id": "io.github.thisisgm.omapods"
},
{
"id": "crmne.hyprmoncfg"
},
{
"id": "ilyazar.btop"
},
{
"id": "vstoms.netbird"
},
{
"id": "omarchy.agents"
},
{
"id": "omarchy.bluetooth"
},
{
"id": "omarchy.network"
},
{
"id": "omarchy.audio"
},
{
"id": "omarchy.monitor"
},
{
"id": "omarchy.power"
}
]
}
},
"plugins": [
{
"id": "indie.herdr-hud"
},
{
"id": "niccoconnor.keyhints"
}
]
}
@@ -0,0 +1,2 @@
[font]
base-size = 10