From ebea0fd6ecf2660e0dc74c01aa6f09b4345d8e3c Mon Sep 17 00:00:00 2001 From: Jeena Date: Thu, 14 May 2026 12:44:11 +0000 Subject: [PATCH] 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) --- hypr/menu.list | 3 ++- hypr/scripts/monitor-mirror.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 hypr/scripts/monitor-mirror.sh diff --git a/hypr/menu.list b/hypr/menu.list index 98e563d..8bcf1e1 100644 --- a/hypr/menu.list +++ b/hypr/menu.list @@ -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 region=hyprshot -m region Color Picker=hyprpicker --autocopy Hypertension=xdg-open ~/Documents/Private-Documents/High-Blood-Preassure-test-results.ods Emoji Picker=~/.config/hypr/scripts/emoji-picker.py Shortcuts=~/.config/hypr/scripts/cheatsheet.py ~/.config/hypr/shortcuts.txt +Mirror Display=~/.config/hypr/scripts/monitor-mirror.sh diff --git a/hypr/scripts/monitor-mirror.sh b/hypr/scripts/monitor-mirror.sh new file mode 100755 index 0000000..72e4ed1 --- /dev/null +++ b/hypr/scripts/monitor-mirror.sh @@ -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