diff --git a/bin/omarchy-hyprland-monitor-internal-disable b/bin/omarchy-hyprland-monitor-internal-disable new file mode 100755 index 00000000..ab26d34e --- /dev/null +++ b/bin/omarchy-hyprland-monitor-internal-disable @@ -0,0 +1,13 @@ +#!/bin/bash + +# Disable the internal laptop display. No-op if already disabled or if it +# would leave no active display. + +if omarchy-hyprland-monitors-many; then + if omarchy-hyprland-toggle-disabled internal-monitor-disable; then + omarchy-hyprland-toggle internal-monitor-disable --enabled-notification "󰍹 Internal display off" + fi +else + notify-send -u low "󰍹 Can't disable the only active display" + exit 1 +fi diff --git a/bin/omarchy-hyprland-monitor-internal-enable b/bin/omarchy-hyprland-monitor-internal-enable new file mode 100755 index 00000000..8f326bad --- /dev/null +++ b/bin/omarchy-hyprland-monitor-internal-enable @@ -0,0 +1,7 @@ +#!/bin/bash + +# Enable the internal laptop display. No-op if already enabled. + +if omarchy-hyprland-toggle-enabled internal-monitor-disable; then + omarchy-hyprland-toggle internal-monitor-disable --disabled-notification "󰍹 Internal display on" +fi diff --git a/bin/omarchy-hyprland-monitor-internal-recover b/bin/omarchy-hyprland-monitor-internal-recover index 54df8099..41a81d4f 100755 --- a/bin/omarchy-hyprland-monitor-internal-recover +++ b/bin/omarchy-hyprland-monitor-internal-recover @@ -4,11 +4,6 @@ # are currently active (e.g. external got disconnected live, during sleep, or # wasn't present on boot). -if omarchy-hyprland-toggle-enabled internal-monitor-disable; then - ACTIVE_COUNT=$(hyprctl monitors -j 2>/dev/null | jq 'length') - if [[ ${ACTIVE_COUNT:-0} -eq 0 ]]; then - omarchy-hyprland-toggle \ - --disabled-notification "󰍹 Internal display restored (no external connected)" \ - internal-monitor-disable - fi +if omarchy-hyprland-monitors-none && omarchy-hyprland-toggle-enabled internal-monitor-disable; then + omarchy-hyprland-monitor-internal-enable fi diff --git a/bin/omarchy-hyprland-monitor-internal-toggle b/bin/omarchy-hyprland-monitor-internal-toggle index 6cacea09..61316ce0 100755 --- a/bin/omarchy-hyprland-monitor-internal-toggle +++ b/bin/omarchy-hyprland-monitor-internal-toggle @@ -2,15 +2,8 @@ # Toggle the internal laptop display on/off. -if omarchy-hyprland-toggle-disabled internal-monitor-disable; then - ACTIVE_COUNT=$(hyprctl monitors -j | jq 'length') - if [[ $ACTIVE_COUNT -le 1 ]]; then - notify-send -u low "󰍹 Can't disable the only active display" - exit 1 - fi +if omarchy-hyprland-toggle-enabled internal-monitor-disable; then + omarchy-hyprland-monitor-internal-enable +else + omarchy-hyprland-monitor-internal-disable fi - -omarchy-hyprland-toggle \ - --enabled-notification "󰍹 Internal display off" \ - --disabled-notification "󰍹 Internal display on" \ - internal-monitor-disable diff --git a/bin/omarchy-hyprland-monitors-many b/bin/omarchy-hyprland-monitors-many new file mode 100755 index 00000000..50035c3f --- /dev/null +++ b/bin/omarchy-hyprland-monitors-many @@ -0,0 +1,5 @@ +#!/bin/bash + +# Returns true when there are multiple monitors connected (so we can disable the internal one) + +(( $(hyprctl monitors -j 2>/dev/null | jq length) > 1 )) diff --git a/bin/omarchy-hyprland-monitors-none b/bin/omarchy-hyprland-monitors-none new file mode 100755 index 00000000..e5061f63 --- /dev/null +++ b/bin/omarchy-hyprland-monitors-none @@ -0,0 +1,5 @@ +#!/bin/bash + +# Returns true when no monitors are connected + +(( $(hyprctl monitors -j 2>/dev/null | jq length) == 0 )) diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 7de79d6b..e3256a6e 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -29,6 +29,8 @@ bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal-toggle +bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal-disable +bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal-enable # Control Apple Display brightness bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000