Compare commits

...

3 commits

Author SHA1 Message Date
Jeena
ebea0fd6ec feat: add mirror-display toggle to launch menu
Adds a "Mirror Display" entry that calls a helper script which finds
the first connected non-internal monitor and toggles mirroring of
eDP-1 onto it via hyprctl. Use case: plugging into a conference room
TV/projector while travelling.

Also fixes the menu's "Screenshot full" entry to capture the active
output instead of the hardcoded DP-1, matching the equivalent fix to
the Ctrl+Print keybind.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 12:44:11 +00:00
Jeena
8ac4023dc1 fix: capture active monitor in screenshot bind instead of hardcoded DP-1
Ctrl+Print was tied to DP-1, so it failed on the laptop alone or with
a different external. Using -m active picks the currently focused
output, so the same bind works on any host.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 12:30:50 +00:00
Jeena
7b99932299 feat: add wob overlay for volume and brightness keys
Move FIFO setup and percentage emission into helper scripts so the
Hyprland config has no raw $VAR references — Hyprland's parser
substitutes $varname at parse time, which mangled awk's $2 and
$HYPRLAND_INSTANCE_SIGNATURE and left binds broken after reload.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 12:03:43 +00:00
8 changed files with 80 additions and 6 deletions

View file

@ -1,4 +1,5 @@
exec-once = fcitx5 exec-once = fcitx5
exec-once = ~/.config/hypr/scripts/wob-daemon.sh
exec-once = [workspace 1 silent] $browser exec-once = [workspace 1 silent] $browser
exec-once = [workspace 2 silent] thunderbird exec-once = [workspace 2 silent] thunderbird
exec-once = [workspace 2 silent] element-desktop exec-once = [workspace 2 silent] element-desktop

View file

@ -282,12 +282,12 @@ bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
bindd = SUPER SHIFT, down, Swap window down, swapwindow, d bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
# Laptop multimedia keys for volume and LCD brightness # Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ bindel = ,XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/wob-volume.sh up
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- bindel = ,XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/wob-volume.sh down
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ bindel = ,XF86MonBrightnessUp, exec, ~/.config/hypr/scripts/wob-brightness.sh up
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- bindel = ,XF86MonBrightnessDown, exec, ~/.config/hypr/scripts/wob-brightness.sh down
# Requires playerctl # Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next bindl = , XF86AudioNext, exec, playerctl next

View file

@ -12,7 +12,7 @@ bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, F, fullscreen bind = $mainMod, F, fullscreen
# Screenshot # Screenshot
bind = CTRL, PRINT, exec, hyprshot -m output -m DP-1 bind = CTRL, PRINT, exec, hyprshot -m active -m output
bind = , PRINT, exec, hyprshot -m window bind = , PRINT, exec, hyprshot -m window
bind = SHIFT, PRINT, exec, hyprshot -m region bind = SHIFT, PRINT, exec, hyprshot -m region

View file

@ -1,7 +1,8 @@
Screenshot full=hyprshot -m output -m DP-1 Screenshot full=hyprshot -m active -m output
Screenshot window=hyprshot -m window Screenshot window=hyprshot -m window
Screenshot region=hyprshot -m region Screenshot region=hyprshot -m region
Color Picker=hyprpicker --autocopy Color Picker=hyprpicker --autocopy
Hypertension=xdg-open ~/Documents/Private-Documents/High-Blood-Preassure-test-results.ods Hypertension=xdg-open ~/Documents/Private-Documents/High-Blood-Preassure-test-results.ods
Emoji Picker=~/.config/hypr/scripts/emoji-picker.py Emoji Picker=~/.config/hypr/scripts/emoji-picker.py
Shortcuts=~/.config/hypr/scripts/cheatsheet.py ~/.config/hypr/shortcuts.txt Shortcuts=~/.config/hypr/scripts/cheatsheet.py ~/.config/hypr/shortcuts.txt
Mirror Display=~/.config/hypr/scripts/monitor-mirror.sh

26
hypr/scripts/monitor-mirror.sh Executable file
View file

@ -0,0 +1,26 @@
#!/usr/bin/env bash
# Toggle: mirror the internal display to the first connected external monitor.
# Travel use case — plug into a conference room TV/projector via HDMI, press
# the bound key, and the external mirrors the laptop. Press again to revert
# to the host's default monitor layout (via hyprctl reload).
set -u
internal="eDP-1"
external=$(hyprctl monitors -j | jq -r ".[] | select(.name != \"$internal\") | .name" | head -n1)
if [[ -z "$external" ]]; then
notify-send "Mirror" "No external display connected"
exit 0
fi
mirror_of=$(hyprctl monitors -j | jq -r ".[] | select(.name == \"$external\") | .mirrorOf // \"\"")
if [[ -n "$mirror_of" ]]; then
hyprctl reload
notify-send "Mirror" "Off — reverted to default layout"
else
hyprctl keyword monitor "$external,preferred,auto,1,mirror,$internal"
notify-send "Mirror" "On — $internal$external"
fi

17
hypr/scripts/wob-brightness.sh Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Adjust backlight and emit current percentage to the wob overlay FIFO.
# Usage: wob-brightness.sh up|down
set -u
case "${1:-}" in
up) brightnessctl -e4 -n2 set 5%+ >/dev/null ;;
down) brightnessctl -e4 -n2 set 5%- >/dev/null ;;
*) echo "usage: $0 up|down" >&2; exit 2 ;;
esac
fifo="${XDG_RUNTIME_DIR:-/tmp}/hypr-wob.${HYPRLAND_INSTANCE_SIGNATURE:-default}"
[[ -p "$fifo" ]] || exit 0
current=$(brightnessctl get)
max=$(brightnessctl max)
awk -v c="$current" -v m="$max" 'BEGIN { printf "%d\n", (c/m)*100 }' > "$fifo"

14
hypr/scripts/wob-daemon.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
# Run by Hyprland exec-once. Creates a per-instance FIFO and pipes it to wob
# so volume/brightness binds can show an on-screen overlay.
set -u
command -v wob >/dev/null 2>&1 || exit 0
fifo="${XDG_RUNTIME_DIR:-/tmp}/hypr-wob.${HYPRLAND_INSTANCE_SIGNATURE:-default}"
rm -f "$fifo"
mkfifo "$fifo"
trap 'rm -f "$fifo"' EXIT
tail -f "$fifo" | wob

15
hypr/scripts/wob-volume.sh Executable file
View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# Adjust volume and emit current percentage to the wob overlay FIFO.
# Usage: wob-volume.sh up|down
set -u
case "${1:-}" in
up) wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ ;;
down) wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- ;;
*) echo "usage: $0 up|down" >&2; exit 2 ;;
esac
fifo="${XDG_RUNTIME_DIR:-/tmp}/hypr-wob.${HYPRLAND_INSTANCE_SIGNATURE:-default}"
[[ -p "$fifo" ]] || exit 0
wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{printf "%d\n", $2*100}' > "$fifo"