# omarchy-setup Every customization this laptop has on top of a stock Omarchy install, in one place, so a second machine can be brought to the same state. Captured from Omarchy **4.0.4-1** on **2026-10-10**. ```bash git clone ~/omarchy-setup cd ~/omarchy-setup ./install.sh --dry-run # see what it would change ./install.sh # do it ``` `install.sh` is idempotent and backs up anything it overwrites as `.bak.`. `capture.sh` runs the other way, pulling live changes back into the repo so this stays the source of truth. ## What is in here | Path | What | |---|---| | `config/` | Mirrors `~/.config`. Only files that differ from Omarchy's shipped defaults. | | `themes/` | The three hand-built themes, wallpapers included. | | `plugins.txt` | The 10 Omarchy shell plugins, each pinned to a commit. | | `plugin-patches/` | Local plugin work that exists on no remote (see below). | | `bin/` | `omarchy-handoff` and `fix-stuck-displays`. | | `systemd/user/` | `lan-mouse.service`, `voxtype.service`. | | `system/` | `/etc` drop-ins: the ARP sysctl and `hid_apple` fnmode. | | `packages.txt` | Packages beyond the Omarchy baseline, each with a reason. | ## The customizations, and why **Displays** (`config/hypr/monitors.lua`) are the fiddliest part. The file is the single source of truth for monitor rules on purpose — overlapping rules spread across several files is what previously made external displays unrecoverable. Three outputs are named by EDID description rather than connector, so they match whichever port they land on: the built-in Chimei panel at 1.25x, the LG IPS236 on HDMI at 1x, and the LG TV through the Anker dock. The TV is deliberately left on `preferred` (3840x2160@30) — the dock negotiates DP alt-mode with only two lanes, so forcing 4K60 produced a "monitor has no mode" loop. `GDK_SCALE=1` with a 1.25 monitor scale; the stock pairing is 2 and `auto`. `hyprland.lua` sources `hyprmoncfg-monitors.lua` last so the `hyprmoncfg` daemon's generated layout wins over anything above it. `bin/fix-stuck-displays` recovers the related kernel-side failure: after suspend/resume i915 can leave an unplugged connector "disconnected" but still "enabled" on a pipe Hyprland has forgotten, which blocks every other output from modesetting. It forces the connector on, disables it through Hyprland to release the pipe, then returns it to auto-detect. It needs passwordless sudo for `tee /sys/class/drm/*/status`. **Keyboard/mouse sharing** (`bin/omarchy-handoff`, `systemd/user/lan-mouse.service`) drives `lan-mouse` to share input with the other Omarchy laptop, bound to `SUPER+SHIFT+K` (`SUPER+K` is already Keybindings). The script's header comment is the real documentation — it records the non-obvious facts that cost hours: `capture_backend` must be `layer-shell` (the portal backend is a silent no-op on Hyprland 0.56.2), `[authorized_fingerprints]` is keyed by fingerprint and the reversed form fails silently, and the log variable is `LAN_MOUSE_LOG_LEVEL`, not `RUST_LOG`. It runs as a user unit rather than from `autostart.lua` because `o.launch_on_start` sends both streams to `/dev/null`, hiding every pairing failure. `system/sysctl.d/99-omarchy-handoff-arp.conf` goes with it: Wi-Fi and the dock's ethernet both sit on `192.168.1.0/24`, and with the default ARP settings the subnet's mapping collapses onto whichever NIC replied last. **Bar and shell** (`config/omarchy/shell.json`) adds `omarchy.active-window` to the left, five plugin widgets, and `indie.herdr-hud` as a non-bar plugin. Idle is stretched a long way past stock — screensaver at 20 minutes, lock at 30, against 2.5 and 5. **Keybindings** (`config/hypr/bindings.lua`) rebinds `SUPER+SHIFT+A` from the stock ChatGPT webapp to Claude, and adds four Herdr HUD bindings plus Handoff. **Input** (`config/hypr/input.lua`) enables the three-finger horizontal workspace gesture that ships commented out, and flattens pointer acceleration for `unknown-device*`. That second rule belongs to Handoff: lan-mouse forwards relative deltas the *sending* compositor has already accelerated, and since Omarchy leaves `accel_profile` adaptive the receiver amplifies them a second time, so a forwarded pointer arrives hypersensitive while the local trackpad feels normal. `wlr-virtual-pointer` gives Hyprland no device name — virtual keyboards get named, pointers don't — hence matching on `unknown-device`; no real pointer on this machine uses that name, so the rule cannot touch the trackpad. **Terminals** are all dropped to a smaller font (9 -> 8) except ghostty, which went the other way to 12. `shell.toml` sets the bar font base size to 10. **Branding** (`config/omarchy/branding/`) replaces the about and screensaver ASCII art. **`hid_apple` fnmode=2** makes the F-keys act as F-keys on an Apple keyboard. It only takes effect after `sudo mkinitcpio -P` or a module reload. ## Local plugin work `indie.herdr-hud` is the one piece that exists on no remote. Ten commits live on its `local` branch — touchpad scroll feel, agent ordering, context-size display — and they stay off the upstream PR deliberately. `plugin-patches/` carries them as a git bundle plus a patch for the uncommitted working tree, and `install.sh` replays both after cloning. `io.github.tallsam.navbar-cat` has a one-file working tree change captured the same way. `capture.sh plugins` re-bundles and re-diffs these, so local work keeps flowing back into the repo. ## Not in here, on purpose - **Secrets.** `~/.config/lan-mouse/` holds a private key and per-machine fingerprints; `~/.config/novnc/auth.env`, SSH keys and the git credential helpers are likewise machine-local. Pair a new machine with `omarchy-handoff peer ` and `omarchy-handoff doctor`. - **Shell, git and dev tooling.** That is already its own repo, `dotfiles` (`git.nic-oconnor.com/public/dotfiles`), which handles zsh, mise, 1Password and the `~/.local/bin` tool shims. The only overlap avoided here is `~/.config/git/config`, whose customizations are identity and credential helpers — `dotfiles` territory. - **The remote-access stack.** `wayvnc`, `novnc`, `sunshine`, `freerdp`, `remmina` and `omarchy-remote-desktop` are installed on this laptop but scoped out. `kokd.remote-desktop` is still in `plugins.txt` since it is a bar plugin, but it is not placed in `shell.json`. - **Work tooling.** The keycloak helpers (`kcadm`, `kclogin`, `wren-keycloak`) and `paperclipai.service`. - **aether-managed themes.** `pink-gt3rs`, `porsche-cayman` and `porsche-rain` carry a `.aether-managed` marker and are reinstallable with `aether`, so their ~18MB of wallpapers and previews stay out. - **`btop.conf`.** Its only diff against stock is v1.4.7 default drift, not a real customization. - **Backup files.** Fifteen `.bak.*` and `.prefix.*` files are sitting in `~/.config/hypr` and `~/.config/omarchy` from earlier editing sessions. They are not tracked and are safe to delete. ## Adding a file `capture.sh` only refreshes what the repo already tracks, so start it by hand: ```bash cp ~/.config/foo/bar.conf config/foo/bar.conf # path mirrors ~/.config git add config/foo/bar.conf ``` `install.sh config` and `capture.sh config` both walk `config/` recursively, so nothing else needs changing. Check first that the file actually differs from stock — `diff /usr/share/omarchy/config/foo/bar.conf ~/.config/foo/bar.conf` — or you will be tracking a file Omarchy already ships.