Single-script builder (nosignal.sh) that turns a stock Arch Linux ISO into a fully-offline installer for a themed Hyprland + caelestia (Quickshell) desktop: matching SDDM greeter, Btrfs/Limine bootable snapshots, chwd-style GPU detection, and a curated "os updates" layer (keybind cheatsheet, settings panels, system polish, on-box management skill). See README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| hyprmoncfgd-override.conf | ||
| install-monitor-control-fix.sh | ||
| README.md | ||
monitor-control-fix — make saved hyprmoncfg profiles actually apply
Bug fix for monitor-control (hyprmoncfg). Saving a monitor profile in the
Super+Ctrl+H TUI had no effect: ~/.config/hypr/monitors.conf stayed
empty and the layout/scale never changed.
Root cause
hyprmoncfg writes monitors.conf only if it can confirm that file is
sourced — and it checks only the single file passed as --hypr-config
(default hyprland.conf). On caelestia the source line lives in
hypr-user.conf, and hyprland.conf includes it indirectly:
hyprland.conf ──source = $cConf/hypr-user.conf──▶ hypr-user.conf
└─source = ~/.config/hypr/monitors.conf
hyprmoncfg does not follow that nested include (nor expand the $cConf
variable), so it reports "monitors.conf is not sourced by hyprland.conf" and
aborts. The daemon log shows it even finds the right profile first:
best profile "profile-…" score=100
apply failed: …/monitors.conf is not sourced by …/hyprland.conf
Fix
Point hyprmoncfg's verification at hypr-user.conf (which sources
monitors.conf directly), with an absolute --monitors-conf (otherwise it
resolves relative to the --hypr-config directory). Applied in two places:
- Daemon — systemd user drop-in
hyprmoncfgd.service.d/override.confre-runshyprmoncfgdwith the two flags (using the%hhome specifier). The drop-in also gates startup with anExecStartPreloop: at login the daemon raced Hyprland's startup —hyprctl instances -jis momentarily invalid JSON, the first profile apply failed and flashed an error notification (the daemon's own 5s retry then succeeded). The gate waits (≤30s) for the instances JSON to parse before the daemon starts, so no failed first attempt and no notification. - TUI —
Super+Ctrl+Hrebound tohyprmoncfg --hypr-config … --monitors-conf ….
No package change; no edits to the forbidden caelestia clone files.
Files
hyprmoncfgd-override.conf→~/.config/systemd/user/hyprmoncfgd.service.d/override.conf- binds appended to
~/.config/caelestia/hypr-user.conf(idempotent marked block)
Install
sh install-monitor-control-fix.sh
Builder notes — fold into monitor-control
Cleanest is to bake the two flags into monitor-control directly rather than ship a separate fix:
- Add the
hyprmoncfgd.service.d/override.confdrop-in to the image (or patch the upstream unit / package the daemon with these defaults). - Make the
Super+Ctrl+Hbind inmonitor-control/hyprland-monitor-control.confinclude--hypr-config $HOME/.config/caelestia/hypr-user.conf --monitors-conf $HOME/.config/hypr/monitors.conf. - Upstream-worthy: hyprmoncfg should follow nested
source =includes and expand Hyprland variables when locating the monitors.conf source line.