Skip to content

Fix installer hyprpm headers and editor env - #5

Open
avdrav1 wants to merge 59 commits into
typecraft-dev:mainfrom
avdrav1:fix-installer-hyprpm-headers-and-editor-env
Open

Fix installer hyprpm headers and editor env#5
avdrav1 wants to merge 59 commits into
typecraft-dev:mainfrom
avdrav1:fix-installer-hyprpm-headers-and-editor-env

Conversation

@avdrav1

@avdrav1 avdrav1 commented Aug 22, 2026

Copy link
Copy Markdown

No description provided.

avdrav1 and others added 30 commits January 12, 2026 02:29
- Replace Miasma waybar theme with Quickshell Rise
- Install via official installer with V1 version and Claude backend
- Add autostart hook for post-boot startup
- Remove waybar stow from dotfiles (no longer needed)

Co-Authored-By: Oz <oz-agent@warp.dev>
Co-Authored-By: Oz <oz-agent@warp.dev>
- Remove install-kiro-ide.sh and install-kiro-cli.sh from install-all.sh
- Remove install-mpd.sh, install-rmpc.sh, install-music-tools.sh from install-all.sh
- Remove mpd/rmpc stow profiles from install-dotfiles.sh
- Bump Node.js from latest:20 to latest:22 in install-nodejs.sh

Co-Authored-By: Oz <oz-agent@warp.dev>
…upport

- Store patched mainstream-quickshell-git PKGBUILD in quickshell/ with
  cpptrace removed and -DCRASH_HANDLER=OFF (cpptrace not in AUR)
- install-theme.sh: add/remove a fallback Arch mirror around pacman calls
  to handle packages missing from stable-mirror.omarchy.org
- install-theme.sh: install all Qt6 deps required by the Rise bar
- install-theme.sh: build quickshell from local PKGBUILD instead of
  installing stock quickshell 0.2.1 (which lacks IdleInhibitor)

Co-Authored-By: Oz <oz-agent@warp.dev>
Move monitor scale/resolution into the git-tracked overrides file so it
persists across machines and rebuilds (monitors.conf is untracked and
omarchy-managed). Override is sourced last, so it wins.

Co-Authored-By: Oz <oz-agent@warp.dev>
Switch install-claude-desktop.sh to the Cowork-capable claude-desktop-bin AUR package (replacing the archived aaddrick build, preserving ~/.config/Claude) and add install-claude-cowork-service.sh to install the native Cowork backend and enable the claude-cowork systemd user service. Wire both into install-all.sh and document them in WARP.md.

Co-Authored-By: Oz <oz-agent@warp.dev>
- install-claude-desktop.sh and install-claude-cowork-service.sh now run 'yay -S --needed' unconditionally (install if missing, update if behind, no-op if current) instead of early-exiting when already installed.

- Harden archived-aaddrick removal: match the literal installed package via 'pacman -Qq | grep -qx' so it can't remove claude-desktop-bin's provides=claude-desktop alias.

- install-all.sh cd's to its own directory so relative installer paths resolve when invoked by absolute path.

- WARP.md: note the two claude scripts install-or-update to the latest.

Co-Authored-By: Oz <oz-agent@warp.dev>
hyprland-overrides.conf now sources ~/.config/hypr/monitors.local.conf and
reuses $MONSCALE for lid/keybind rules, so the per-machine scale lives in one
untracked local file. Add monitors.local.conf.example template and have
install-hyprland-overrides.sh seed the local file on fresh builds.

Co-Authored-By: Oz <oz-agent@warp.dev>
Replace the untracked local-file approach with git-tracked per-host files in
hosts/. install-hyprland-overrides.sh now symlinks
~/.config/hypr/monitors.local.conf -> hosts/<hostname>.conf (seeding from
hosts/default.conf on new machines). Adds hosts/dellxps13.conf (scale 1.5) and
hosts/default.conf; removes monitors.local.conf.example.

Co-Authored-By: Oz <oz-agent@warp.dev>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This reverts commit ce1f6cb.
Restore work that was lost when main was reset back to 71ce027; the commits
survived only via a stash ref (tip 7d26524) and are re-applied here as files:

- installers: install-editor.sh, install-aerc-mail.sh,
  install-snappy-switcher.sh, install-syncthing.sh, install-vivaldi.sh
- host configs: hosts/av-framework.conf, hosts/hp-elite-book.conf
- wiring: install-all.sh (calls the 5 scripts), install-dotfiles.sh
  (stow aerc-mail + snappy-switcher), hyprland-overrides.conf
  (snappy-switcher keybinds + cursor no_warps)
- syncthing/repo infra: .gitignore, .stignore, .stfolder marker
- stop tracking .claude/settings.local.json (now gitignored; kept on disk)

Co-Authored-By: Oz <oz-agent@warp.dev>
avdrav1 and others added 29 commits July 1, 2026 09:56
The Quickshell Rise bar's Bluetooth widget shells out to `bluetoothctl`
(from bluez-utils) to determine power state and connected-device count.
Without it the widget always renders the disabled icon even though
Bluetooth works. Add bluez-utils to the bar's dependency install.

Co-Authored-By: Oz <oz-agent@warp.dev>
The cleanup step removed ~/.config/snappy-switcher/config.ini before
stowing. Once that dir is folded into a single stow symlink, the path
resolves through the symlink and deletes the tracked config.ini from the
dotfiles repo working tree, which disables the Dos-Moos theme. Drop it
from the rm list and instead clear only a real (non-symlink) config dir
before stowing.

Co-Authored-By: Oz <oz-agent@warp.dev>
snappy-switcher reads config.ini only at daemon startup, so a running
instance keeps the default theme until restarted. After applying the
Dos-Moos theme, restart the daemon (guarded on an active Hyprland session
and the binary being present, kept non-fatal) so the switcher picks up
its themed config automatically.

Co-Authored-By: Oz <oz-agent@warp.dev>
- install-vscode.sh: visual-studio-code-bin (AUR); config stowed from
  dotfiles vscode package into ~/.config/Code/User/.
- install-obsidian.sh: obsidian (extra repo). No dotfiles profile —
  settings are per-vault in each vault's .obsidian/ folder.
- install-slack.sh: slack-desktop (AUR). No dotfiles profile — Electron
  profile in ~/.config/Slack holds per-machine secrets.

Wire all three into install-all.sh (apps block). install-dotfiles.sh now
stows the vscode package (mkdir ~/.config/Code/User first so only the two
files symlink, not the whole Code dir). WARP.md reference entries added.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Omarchy 4 ("quattro") moved Hyprland config from hyprlang .conf to Lua.
The upgrade force-installs stock hyprland.lua and leaves .conf files on
disk but unread, so the `source = .../hyprland-overrides.conf` line this
repo appends was silently doing nothing on the upgraded machine.

Add a parallel Lua tree under hypr/lua/ and teach the installer to detect
which parser a machine uses, so a fleet can be mid-migration. The legacy
.conf tree is untouched and still installs on 3.x machines; both must be
kept in sync until every machine has moved.

Three Lua-parser behaviours drove the design, all of which fail silently:

* Monitor scale cannot be set from this repo's modules at all.
  omarchy-hyprland-monitor-watch polls every 2s and reapplies the internal
  display's scale, sed-parsing it out of ~/.config/hypr/monitors.lua and
  falling back to a hardcoded 2 when that isn't a bare number -- which the
  stock `= "auto"` triggers, and which is why this machine sat at 2x.
  install-hyprland-overrides.sh now generates that file from the host file
  instead, so changing scale requires an installer re-run, not just a
  hyprctl reload.

* require() caches, and Hyprland's bootstrap.lua clears package.loaded only
  for its own prefixes, so a required entry point would load once and never
  re-run on reload. hyprland.lua reaches init.lua via dofile and init.lua
  clears the supplement. cache itself.

* Plugins are reachable only through their Lua namespace. The scrolloverview
  binds now go through hl.plugin.scrolloverview.* -- hyprctl dispatch
  evaluates Lua, so the scrolloverview:* dispatcher names are unreachable.
  The module no-ops when the plugin isn't built.

Per the user's call, the custom lid-switch and monitor-toggle binds are
dropped in favour of Omarchy's built-in clamshell handling and
SUPER+CTRL+Delete; they used `hyprctl keyword`, which the Lua parser
rejects outright.

Verified on hp-elite-book: no config errors, scale stable at 1.0 across ten
daemon polls, one bind per rebound key (including Omarchy's doubled
ALT+TAB), and the scale workflow round-trips 1 -> 1.5 -> 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fcitx5's "Quick Phrase" addon defaults to a Super+grave trigger, which
collides with the SUPER+` workspace-overview bind. fcitx5 grabs the key
at the input-method layer, so Hyprland never sees a conflict -- the
overview opened AND a Quick Phrase prompt popped on every press, with
nothing in this repo or hyprctl binds to explain it.

The config itself lands in the dotfiles repo (new fcitx5 stow package);
wire it up here: add the file to install-dotfiles.sh's removal list and
stow it. The mkdir -p ahead of the stow is load-bearing -- on a machine
where fcitx5 has never run, ~/.config/fcitx5 does not exist and stow
folds the whole dir into a single symlink, dumping fcitx5's runtime
state (profile, cached_layouts) into the dotfiles repo. Same trap
already documented for the vscode package.

Also note the collision at both SUPER+grave bind sites (Lua and legacy
hyprlang trees), since that is where you would look when debugging it
and the cause lives in another repo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The host files claimed scale 1, but that was an untouched copy of the
default and would be unreadable on the 13.5" 2880x1920 panel. The live
scale was actually 2: ~/.config/hypr/monitors.lua was still stock Omarchy
("auto"), which omarchy-hyprland-monitor-watch can't parse, so it fell
back to its hardcoded 2.

1.5 divides evenly (-> 1920x1280 effective), avoiding fractional-scaling
blur. Updated both the Lua and legacy hyprlang host files.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
install-theme.sh runs under `set -euo pipefail` and did the Rise bar first,
so a bar failure skipped theming entirely. On Omarchy 4 it failed every time:
the guard checked for a package named exactly `quickshell`, but omarchy 4
installs `quickshell-git` (a dependency of omarchy-dev). Nothing was removed,
then `makepkg -si --noconfirm` built fine and `pacman -U` hit the PKGBUILD's
conflicts=(quickshell quickshell-git) -- --noconfirm declines the replace
prompt, so it aborted before the theme was ever installed.

- Move the theme install (and the snappy-switcher restart that depends on it)
  to the top. It has no dependency on the bar.
- Skip the Rise bar when omarchy-shell exists. Omarchy 4 ships its own
  quickshell-based shell, and our pinned mainstream-quickshell-git is an older
  commit than what omarchy-bar runs on, so installing it there means either a
  hard conflict or a downgrade under omarchy's own shell.
- Check both quickshell and quickshell-git in the removal guard, so the
  Omarchy 3 path can't hit the same name-matching bug.

install-all.sh has no `set -e`, so the failure was invisible -- the run kept
going and still printed the manual-steps summary, reading as success. Route
every installer through a `run` helper that records failures and reports them
at the end, exiting non-zero. Per-installer failures stay non-fatal.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
install-claude-desktop.sh: claude-desktop-bin was removed from the AUR.
Switch to Anthropic's official claude-desktop build (ships Chat, Cowork,
and Claude Code) and rework the migration loop to strip the superseded
claude-desktop-bin instead of the new package's own name.

install-tailscale.sh: `tailscale status | head -5` under `set -o pipefail`
exits 141 (SIGPIPE) once the tailnet has >5 entries, making install-all.sh
report a false failure. Swallow it with `|| true`.

Retire install-claude-cowork-service.sh: its AUR package is deprecated and
Cowork now ships in the official desktop app. Remove the script, its
install-all.sh line, and WARP.md references.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
install-theme.sh skipped Rise entirely whenever omarchy-shell was present,
so Omarchy 4 machines got the Dos-Moos theme but kept the stock bar. The
skip existed because the script built a pinned mainstream-quickshell-git
from quickshell/PKGBUILD, which declares conflicts=(quickshell
quickshell-git) -- installing it on quattro meant a pacman conflict or
downgrading the package omarchy-bar itself runs on.

That build is no longer needed. Upstream's dependency check only requires
`qs` on PATH, and it now detects quattro directly (qsr_has_quattro),
hiding the stock bar under --autostart instead of fighting it. Verified
on omarchy 4: Rise starts and reaches ready=true against the stock
quickshell-git, with no package changes at all.

So drop the guard, the PKGBUILD build, the pacman -Rdd force-removal, the
Qt6 build-dep list and the fallback-mirror workaround it needed. What
remains is one pacman -S for upstream's actual prerequisites plus the
installer call. The fonts move here deliberately: upstream installs them
via sudo pacman from inside a set -e script, so a machine missing them
aborts mid-install on a sudo prompt.

--autostart also replaces the hand-rolled post-boot hook download.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every installer that ran sudo/yay/systemctl unconditionally failed the
install-all.sh summary on an already-provisioned machine: `yay -S`
pre-authenticates via sudo before it works out there's nothing to do, so
guardless scripts always tried to elevate and died in a non-interactive
run. Guard each privileged step on the work actually being needed (the
existing command -v convention), so a re-run is a sudo-free no-op:

- ghostty/tmux/stow: guard yay behind `command -v`
- tailscale: enable --now only when not already enabled+active
- theme: install only the missing bar packages
- scroll-overview: install only missing toolchain pkgs; copy the pacman
  hook only when it differs
- claude-desktop: retry the AUR fetch to ride out transient resets

Also authenticate sudo once up front in install-all.sh and keep it warm
for the whole run, failing fast with an actionable message when there's
no tty instead of piling spurious failures into the summary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
install-shibumi.sh matched Rise with `pkill -f 'quickshell/bar/shell.qml'`,
but that path is Rise's *config path* -- it appears only in Quickshell's
instance registry, never in the process cmdline, which reads `qs -n -d -c bar`.
The pattern never matched, and the trailing `|| true` swallowed the miss, so
the old Rise bar kept running and drawing over Shibumi while the script
reported success. Worse, step 3 then deleted its config dir, leaving a bar
with no config behind it.

Query Quickshell's registry instead and kill by pid, selecting instances whose
config path is under ~/.config/quickshell/bar/ so the stock omarchy-shell
instance (/usr/share/omarchy/shell/shell.qml) is structurally excluded. Falls
back to plain kill, and no-ops when qs isn't installed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
install-hyprland-scroll-overview.sh only ran `hyprpm update` in the branch
for an already-added plugin. On a machine where hyprpm has never run -- and
on any machine whose Hyprland was upgraded since it last did -- it went
straight to `hyprpm add`, which exits immediately with

  ✖ Headers outdated, please run hyprpm update.

hyprpm refuses every operation until the headers under
/var/cache/hyprpm/$USER/headersRoot match the running Hyprland, and it bails
there: before it consults upstream's commit pins, and before it clones the
plugin at all. The PLUGIN_FALLBACK_REV retry hit the identical wall, so under
`set -e` the script failed leaving an empty /var/cache/hyprpm/$USER with no
state.toml to explain why, and `hyprpm list` empty.

That made the existing "no commit pin" comment misleading as a diagnosis: the
pin gap is real (upstream stops at v0.55.4, Arch ships 0.56.2) but is never
reached. The plugin itself compiles clean against 0.56.2 headers, so the
fallback path does work once headers exist.

Hoist `hyprpm update` ahead of the add and run it unconditionally -- it is the
only thing that installs those headers (clone Hyprland at the running commit,
configure, `sudo make installheaders`), and it doubles as the refresh path for
an already-added plugin, so the branch below no longer needs its own call.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q3e9CKwrcZwGAm56jxqxJF
install-editor.sh guarded on ~/.config/uwsm/default and `exit 0`d when it was
absent. Omarchy 4 no longer creates that file -- it is still sourced when
present, but the supported override point is now ~/.config/uwsm/env.d/*, as
/usr/share/omarchy/default/uwsm/env.d/10-omarchy says itself. So on every
current install the script skipped its entire job and returned success:
install-all.sh recorded no failure, EDITOR stayed at Omarchy's default and
VISUAL was never set at all.

The early exit also made the last step unreachable, and that step is the one
that matters on Omarchy 4. The session default is
`EDITOR="omarchy-launch-editor --inline"`, and that launcher reads
~/.local/state/omarchy/defaults/editor (falling back to nvim), so writing that
file redirects $EDITOR, the SUPER+SHIFT+N keybind and `omarchy default editor`
at once. `fresh` is already on the launcher's inline whitelist, so it opens in
the calling terminal rather than a new window.

- Write the Omarchy state file first and unconditionally.
- Branch on the layout the machine actually has rather than assuming the
  legacy one: edit ~/.config/uwsm/default where it exists, otherwise generate
  ~/.config/uwsm/env.d/50-supplement-editor. uwsm's process_config_dirs_reversed
  walks the XDG hierarchy in increasing priority and sources <dir>/uwsm/env.d/*,
  so a ~/.config drop-in loads last and beats 10-omarchy.
- Generate that drop-in in full so re-runs overwrite it instead of having to
  parse back what a previous run wrote.
- Drop the stale claim that Omarchy's default editor is zeditor/Zed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q3e9CKwrcZwGAm56jxqxJF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant