waybar: pin the bar to the main monitor of the active profile

The previous fix listed both profiles' primaries, "output": ["eDP-1",
"DP-1"] -- but DP-1 is the laptop's second monitor too, so the laptop
would have got a bar on it as well as on eDP-1. No static list can express
"the main monitor" when the two machines share an output name.

Resolve it at launch instead. hypr/scripts/bar asks Hyprland for the
monitor at position 0x0 -- the main monitor in both profiles -- writes
{"output": "<name>"} to ~/.cache/waybar-output.jsonc, and execs waybar;
waybar/config.jsonc includes that fragment. autostart/services, the
bar_reload bind and the performance script all go through the wrapper, so
a reload re-resolves after docking. Signals still target the waybar
process, not the wrapper.

Verified all three paths on mainPC: the fragment pins the bar to DP-1
only, an empty fragment falls back to a bar on every output, and a
fragment naming a disconnected output maps nothing (the failure mode this
started from). Config parses on both profiles.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01StGBghPW9Dm7z7uj2VNWHr
This commit is contained in:
2026-09-04 16:55:33 +02:00
parent 9e045cf096
commit bed974bd4d
5 changed files with 38 additions and 11 deletions

View File

@@ -1,12 +1,13 @@
[
{
"include": "~/.config/waybar/bars/main.jsonc",
"include": [
"~/.config/waybar/bars/main.jsonc",
// "output", resolved per machine by hypr/scripts/bar -- see the comment
// there. Missing file just means a bar on every monitor.
"~/.cache/waybar-output.jsonc",
],
"height": 50,
"layer": "top",
// Primary output of each machine profile (see hypr/configs/profiles):
// eDP-1 on the laptop, DP-1 on the PC. Waybar skips names that are
// not connected, so one list works on both.
"output": ["eDP-1", "DP-1"],
"mode": "dock",
"exclusive": true,
"passtrough": false,