From de2824edde366f75df4ded5bb4e49d6e64a72eae Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:31:31 +0000 Subject: [PATCH 01/11] Quote OMARCHY_PATH in migration source command Agent-Logs-Url: https://github.com/basecamp/omarchy/sessions/36fb96d5-70fd-4365-9550-e7ff5f8735d1 Co-authored-by: dhh <2741+dhh@users.noreply.github.com> --- migrations/1776410469.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/1776410469.sh b/migrations/1776410469.sh index 24aab0d6..6f182c04 100644 --- a/migrations/1776410469.sh +++ b/migrations/1776410469.sh @@ -2,7 +2,7 @@ echo "Add flags sourcing to hyprland.conf" HYPR_CONF=~/.config/hypr/hyprland.conf -source $OMARCHY_PATH/install/config/omarchy-toggles.sh +source "$OMARCHY_PATH/install/config/omarchy-toggles.sh" if [[ -f $HYPR_CONF ]] && ! grep -q "toggles/hypr/\*\.conf" "$HYPR_CONF"; then echo -e "\n# Toggle config flags dynamically\nsource = ~/.local/state/omarchy/toggles/hypr/*.conf" >> "$HYPR_CONF" From 86a9d3e04c07bdac1ceab18b38a293aa084925dc Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 09:36:10 +0200 Subject: [PATCH 02/11] Allow the timelimit to be extending by passing in an explicit set of minutes --- bin/omarchy-sudo-passwordless-toggle | 34 ++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/bin/omarchy-sudo-passwordless-toggle b/bin/omarchy-sudo-passwordless-toggle index f2071f62..530a7dea 100755 --- a/bin/omarchy-sudo-passwordless-toggle +++ b/bin/omarchy-sudo-passwordless-toggle @@ -1,12 +1,19 @@ #!/bin/bash # Toggle passwordless sudo for the current user. +# Usage: omarchy-sudo-passwordless-toggle [MINUTES] # First run: enables passwordless sudo for 15 minutes (after confirmation). # Second run: disables it early. NOPASSWD_FILE="/etc/sudoers.d/99-omarchy-nopasswd-${USER}" TIMER_NAME="omarchy-nopasswd-expire-${USER}" +MINUTES=${1:-15} +if [[ $1 && ! $1 =~ ^[0-9]+$ ]]; then + echo "Usage: omarchy-sudo-passwordless-toggle [MINUTES]" >&2 + exit 1 +fi + # Safety: if the file exists but the timer doesn't (e.g. after reboot), clean up if sudo test -f "$NOPASSWD_FILE" && ! systemctl is-active "${TIMER_NAME}.timer" &>/dev/null; then sudo rm "$NOPASSWD_FILE" @@ -14,28 +21,37 @@ fi # Check for the file directly — sudo -n can stay cached or be granted by other rules if sudo test -f "$NOPASSWD_FILE"; then - sudo rm "$NOPASSWD_FILE" - sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null - echo "Passwordless sudo has been DISABLED. Sudo will require a password again." + if [[ $1 ]]; then + sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null + sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \ + rm "$NOPASSWD_FILE" + echo "Passwordless sudo timer updated. It will now automatically disable in ${MINUTES} minutes." + else + sudo rm "$NOPASSWD_FILE" + sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null + echo "Passwordless sudo has been DISABLED. Sudo will require a password again." + fi else echo "" - echo "⚠️ WARNING: This will allow ANY process running as your user to" - echo "execute ANY command as root WITHOUT a password for 15 minutes." + echo "⚠️WARNING: This will allow ANY process running as your user to" + echo "execute ANY command as root WITHOUT a password for ${MINUTES} minutes." echo "" echo "This is useful for AI agents that need to run sudo commands," echo "but it significantly weakens the security of your system." echo "Anyone or anything with access to your user account gets full root." echo "" - echo "Passwordless sudo will automatically disable after 15 minutes." + echo "Passwordless sudo will automatically disable after ${MINUTES} minutes." echo "Run this command again to disable it early." echo "" - if gum confirm "Enable passwordless sudo for 15 minutes? This is a significant security risk!"; then + if gum confirm "Enable passwordless sudo for ${MINUTES} minutes? This is a significant security risk!"; then echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee "$NOPASSWD_FILE" > /dev/null sudo chmod 440 "$NOPASSWD_FILE" - sudo systemd-run --on-active=15m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \ + sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \ rm "$NOPASSWD_FILE" - echo "Passwordless sudo has been ENABLED. It will automatically disable in 15 minutes." + + echo "" + echo "Passwordless sudo has been ENABLED. It will automatically disable in ${MINUTES} minutes." echo "Note: if you restart before then, run omarchy-sudo-passwordless-toggle again to disable it." else echo "Aborted. No changes made." From 24ad7c7abada7d78b5baf1cb294415c37a2ab59d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 09:55:58 +0200 Subject: [PATCH 03/11] Drop home snapshots, limit root shots to just 5, no btrfs quotas cc @ryanrhughes --- default/snapper/root | 8 ++++++ install/login/limine-snapper.sh | 24 ++++------------ migrations/1776927490.sh | 50 +++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 default/snapper/root create mode 100644 migrations/1776927490.sh diff --git a/default/snapper/root b/default/snapper/root new file mode 100644 index 00000000..96d0ef23 --- /dev/null +++ b/default/snapper/root @@ -0,0 +1,8 @@ +# Omarchy snapshots root only for pre-update recovery — kept to 5, no timeline +SUBVOLUME="/" +FSTYPE="btrfs" + +NUMBER_LIMIT="5" +NUMBER_LIMIT_IMPORTANT="5" + +TIMELINE_CREATE="no" diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh index c91815dc..d588f43f 100644 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -50,26 +50,14 @@ EOF # We overwrite the whole thing knowing the limine-update will add the entries for us sudo cp $OMARCHY_PATH/default/limine/limine.conf /boot/limine.conf - # Match Snapper configs if not installing from the ISO - if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then - if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then - sudo snapper -c root create-config / - fi - - if ! sudo snapper list-configs 2>/dev/null | grep -q "home"; then - sudo snapper -c home create-config /home - fi + # Only snapshot root — /home is user data; rolling it back loses user work + if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then + sudo snapper -c root create-config / fi + sudo cp $OMARCHY_PATH/default/snapper/root /etc/snapper/configs/root - # Enable quota to allow space-aware algorithms to work - sudo btrfs quota enable / - - # Tweak default Snapper configs - sudo sed -i 's/^TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/{root,home} - sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home} - sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home} - sudo sed -i 's/^SPACE_LIMIT="0.5"/SPACE_LIMIT="0.3"/' /etc/snapper/configs/{root,home} - sudo sed -i 's/^FREE_LIMIT="0.2"/FREE_LIMIT="0.3"/' /etc/snapper/configs/{root,home} + # Disable btrfs quotas — full qgroup accounting is a major performance drag + sudo btrfs quota disable / 2>/dev/null || true chrootable_systemctl_enable limine-snapper-sync.service fi diff --git a/migrations/1776927490.sh b/migrations/1776927490.sh new file mode 100644 index 00000000..d2c743d9 --- /dev/null +++ b/migrations/1776927490.sh @@ -0,0 +1,50 @@ +echo "Drop /home snapshots, btrfs quotas, and timeline snapshots (keep 5 root snapshots, never more)" + +if ! omarchy-cmd-present snapper btrfs; then + exit 0 +fi + +# Disable btrfs quotas first — every subvolume delete below would otherwise update +# all qgroups, which is exactly the performance drag we're removing. +sudo btrfs quota disable / 2>/dev/null || true + +# Remove the home config, all its snapshots, and the .snapshots subvolume. +# If the snapshots look like someone's been using them manually (pre/post pairs, +# userdata tags, freeform descriptions), ask before destroying. +if sudo snapper list-configs 2>/dev/null | grep -q "home"; then + drop_home="yes" + + if sudo snapper -c home --csvout list 2>/dev/null | \ + awk -F, 'NR>1 && ($6=="pre" || $6=="post" || $13!="" || ($12!="current" && $12!="timeline" && $12 !~ /^[0-9]+\.[0-9]+\.[0-9]+/))' | \ + grep -q .; then + gum confirm "Drop unused /home snapshots for better performance?" || drop_home="no" + fi + + if [[ $drop_home == "yes" ]]; then + sudo snapper -c home list --columns number 2>/dev/null | awk 'NR>2 && $1 != "0" {print $1}' | \ + xargs -r sudo snapper -c home delete 2>/dev/null + sudo snapper -c home delete-config 2>/dev/null + + if [[ -d /home/.snapshots ]]; then + for snap in /home/.snapshots/*/snapshot; do + [[ -d $snap ]] && sudo btrfs subvolume delete "$snap" 2>/dev/null + done + sudo rm -rf /home/.snapshots/* 2>/dev/null + sudo btrfs subvolume delete /home/.snapshots 2>/dev/null + fi + fi +fi + +# Ensure root config exists and matches our shipped defaults +if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then + sudo snapper -c root create-config / +fi +sudo cp $OMARCHY_PATH/default/snapper/root /etc/snapper/configs/root + +# Delete all timeline snapshots — we only want pre-update (cleanup=number) snapshots +sudo snapper -c root list --columns number,cleanup 2>/dev/null | \ + awk '$3 == "timeline" {print $1}' | \ + xargs -r sudo snapper -c root delete 2>/dev/null + +# Enforce NUMBER_LIMIT=5 on any existing number snapshots beyond the new cap +sudo snapper -c root cleanup number 2>/dev/null From 3618eebdaa341b08f1b216199014ef3986d97602 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 10:18:38 +0200 Subject: [PATCH 04/11] Make recover always a silent operation --- bin/omarchy-hyprland-monitor-internal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-hyprland-monitor-internal b/bin/omarchy-hyprland-monitor-internal index 74e6f491..d30fd34c 100755 --- a/bin/omarchy-hyprland-monitor-internal +++ b/bin/omarchy-hyprland-monitor-internal @@ -21,7 +21,7 @@ disable() { recover() { if omarchy-hyprland-monitors-none && omarchy-hyprland-toggle-enabled "$TOGGLE"; then - enable + omarchy-hyprland-toggle "$TOGGLE" fi } From 2982ac4725ae643653c8ddb220cf438810aff1e2 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 10:49:24 +0200 Subject: [PATCH 05/11] Ensure headless monitors aren't counted --- bin/omarchy-hyprland-monitors-none | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-hyprland-monitors-none b/bin/omarchy-hyprland-monitors-none index e5061f63..231a0ba7 100755 --- a/bin/omarchy-hyprland-monitors-none +++ b/bin/omarchy-hyprland-monitors-none @@ -1,5 +1,5 @@ #!/bin/bash -# Returns true when no monitors are connected +# Returns true when no real monitors are connected (ignoring Hyprland's HEADLESS fallback) -(( $(hyprctl monitors -j 2>/dev/null | jq length) == 0 )) +(( $(hyprctl monitors -j 2>/dev/null | jq '[.[] | select(.name | startswith("HEADLESS") | not)] | length') == 0 )) From cac03a5b642aa60dd610a858e3d7a0f9207562b1 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 10:54:34 +0200 Subject: [PATCH 06/11] Add i alias for ide with opencode and claude --- default/bash/aliases | 1 + 1 file changed, 1 insertion(+) diff --git a/default/bash/aliases b/default/bash/aliases index b8d9cb75..b3f6ad22 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -48,6 +48,7 @@ alias cx='printf "\033[2J\033[3J\033[H" && claude --permission-mode bypassPermis alias d='docker' alias r='rails' alias t='tmux attach || tmux new -s Work' +alias i='tdl c cx' n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; } # Git From 2682cc28538f1198b04fb4387876837c177692f4 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 10:58:00 +0200 Subject: [PATCH 07/11] There is no rc-mirror, only stable-mirror and mirror --- boot.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.sh b/boot.sh index e17c7af2..fc5de13c 100755 --- a/boot.sh +++ b/boot.sh @@ -26,7 +26,7 @@ if [[ $OMARCHY_REF == "dev" ]]; then echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null elif [[ $OMARCHY_REF == "rc" ]]; then export OMARCHY_MIRROR=rc - echo 'Server = https://rc-mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null + echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null else export OMARCHY_MIRROR=stable echo 'Server = https://stable-mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null From 6953ea9af86234e19eaa4b1112457dee238d1d59 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 10:59:04 +0200 Subject: [PATCH 08/11] The mirror needs to be edge here too --- boot.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.sh b/boot.sh index fc5de13c..116a4b93 100755 --- a/boot.sh +++ b/boot.sh @@ -25,7 +25,7 @@ if [[ $OMARCHY_REF == "dev" ]]; then export OMARCHY_MIRROR=edge echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null elif [[ $OMARCHY_REF == "rc" ]]; then - export OMARCHY_MIRROR=rc + export OMARCHY_MIRROR=edge echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null else export OMARCHY_MIRROR=stable From 96afc684611a847a1a4a9c179f80441fc3652baf Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 11:14:14 +0200 Subject: [PATCH 09/11] Move to a hardware check for external monitors instead to deal with recover timing --- bin/omarchy-hw-external-monitors | 10 ++++++++++ bin/omarchy-hyprland-monitor-internal | 4 ++-- bin/omarchy-hyprland-monitors-many | 5 ----- bin/omarchy-hyprland-monitors-none | 5 ----- 4 files changed, 12 insertions(+), 12 deletions(-) create mode 100755 bin/omarchy-hw-external-monitors delete mode 100755 bin/omarchy-hyprland-monitors-many delete mode 100755 bin/omarchy-hyprland-monitors-none diff --git a/bin/omarchy-hw-external-monitors b/bin/omarchy-hw-external-monitors new file mode 100755 index 00000000..b5dc967b --- /dev/null +++ b/bin/omarchy-hw-external-monitors @@ -0,0 +1,10 @@ +#!/bin/bash + +# Returns true when an external monitor is physically connected. +# Uses kernel DRM state so the result is independent of Hyprland's startup timing. + +for status in /sys/class/drm/card*-*/status; do + [[ "$status" == *-eDP-*/status ]] && continue + [[ "$(<"$status")" == "connected" ]] && exit 0 +done +exit 1 diff --git a/bin/omarchy-hyprland-monitor-internal b/bin/omarchy-hyprland-monitor-internal index d30fd34c..6936d2cf 100755 --- a/bin/omarchy-hyprland-monitor-internal +++ b/bin/omarchy-hyprland-monitor-internal @@ -9,7 +9,7 @@ enable() { } disable() { - if omarchy-hyprland-monitors-many; then + if omarchy-hw-external-monitors; then if omarchy-hyprland-toggle-disabled "$TOGGLE"; then omarchy-hyprland-toggle --enabled-notification "󰍹 Laptop display disabled" "$TOGGLE" fi @@ -20,7 +20,7 @@ disable() { } recover() { - if omarchy-hyprland-monitors-none && omarchy-hyprland-toggle-enabled "$TOGGLE"; then + if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then omarchy-hyprland-toggle "$TOGGLE" fi } diff --git a/bin/omarchy-hyprland-monitors-many b/bin/omarchy-hyprland-monitors-many deleted file mode 100755 index 50035c3f..00000000 --- a/bin/omarchy-hyprland-monitors-many +++ /dev/null @@ -1,5 +0,0 @@ -#!/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 deleted file mode 100755 index 231a0ba7..00000000 --- a/bin/omarchy-hyprland-monitors-none +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Returns true when no real monitors are connected (ignoring Hyprland's HEADLESS fallback) - -(( $(hyprctl monitors -j 2>/dev/null | jq '[.[] | select(.name | startswith("HEADLESS") | not)] | length') == 0 )) From 3c8d7bb5cea11c07aed4cb82e28d3f3cd4c670d9 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 11:14:46 +0200 Subject: [PATCH 10/11] Revert "There is no rc-mirror, only stable-mirror and mirror" This reverts commit 2682cc28538f1198b04fb4387876837c177692f4. --- boot.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boot.sh b/boot.sh index 116a4b93..e17c7af2 100755 --- a/boot.sh +++ b/boot.sh @@ -25,8 +25,8 @@ if [[ $OMARCHY_REF == "dev" ]]; then export OMARCHY_MIRROR=edge echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null elif [[ $OMARCHY_REF == "rc" ]]; then - export OMARCHY_MIRROR=edge - echo 'Server = https://mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null + export OMARCHY_MIRROR=rc + echo 'Server = https://rc-mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null else export OMARCHY_MIRROR=stable echo 'Server = https://stable-mirror.omarchy.org/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist >/dev/null From a74afeb4e5aae89393318d32bcac40804ce0a8ba Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Apr 2026 11:54:11 +0200 Subject: [PATCH 11/11] Switch to an earlier recovery for the internal monitor on reboot --- bin/omarchy-cmd-first-run | 1 + bin/omarchy-hw-recover-internal-monitor | 11 +++++++++++ .../user/omarchy-recover-internal-monitor.service | 11 +++++++++++ default/hypr/autostart.conf | 1 - install/first-run/recover-internal-monitor.sh | 1 + migrations/1776935686.sh | 9 +++++++++ 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 bin/omarchy-hw-recover-internal-monitor create mode 100644 config/systemd/user/omarchy-recover-internal-monitor.service create mode 100644 install/first-run/recover-internal-monitor.sh create mode 100644 migrations/1776935686.sh diff --git a/bin/omarchy-cmd-first-run b/bin/omarchy-cmd-first-run index 830bef54..67a0c321 100755 --- a/bin/omarchy-cmd-first-run +++ b/bin/omarchy-cmd-first-run @@ -10,6 +10,7 @@ if [[ -f $FIRST_RUN_MODE ]]; then rm -f "$FIRST_RUN_MODE" bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh" + bash "$OMARCHY_PATH/install/first-run/recover-internal-monitor.sh" bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh" bash "$OMARCHY_PATH/install/first-run/firewall.sh" bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh" diff --git a/bin/omarchy-hw-recover-internal-monitor b/bin/omarchy-hw-recover-internal-monitor new file mode 100755 index 00000000..794cafea --- /dev/null +++ b/bin/omarchy-hw-recover-internal-monitor @@ -0,0 +1,11 @@ +#!/bin/bash + +# Clear the internal-monitor-disable toggle if no external display is connected. +# Runs before the graphical session so Hyprland doesn't block on having no output +# to render to when the user rebooted with the external unplugged. + +TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf" + +if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then + rm -f "$TOGGLE" +fi diff --git a/config/systemd/user/omarchy-recover-internal-monitor.service b/config/systemd/user/omarchy-recover-internal-monitor.service new file mode 100644 index 00000000..fef52180 --- /dev/null +++ b/config/systemd/user/omarchy-recover-internal-monitor.service @@ -0,0 +1,11 @@ +[Unit] +Description=Recover the internal monitor toggle when no external display is connected +Before=graphical-session-pre.target +ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf + +[Service] +Type=oneshot +ExecStart=%h/.local/share/omarchy/bin/omarchy-hw-recover-internal-monitor + +[Install] +WantedBy=graphical-session-pre.target diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index f34aa49f..984b55a3 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -7,7 +7,6 @@ exec-once = uwsm-app -- swayosd-server exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = omarchy-cmd-first-run exec-once = omarchy-powerprofiles-init -exec-once = omarchy-hyprland-monitor-internal recover exec-once = uwsm-app -- omarchy-hyprland-monitor-watch # Slow app launch fix -- set systemd vars diff --git a/install/first-run/recover-internal-monitor.sh b/install/first-run/recover-internal-monitor.sh new file mode 100644 index 00000000..c1e84fc0 --- /dev/null +++ b/install/first-run/recover-internal-monitor.sh @@ -0,0 +1 @@ +systemctl --user enable omarchy-recover-internal-monitor.service diff --git a/migrations/1776935686.sh b/migrations/1776935686.sh new file mode 100644 index 00000000..303db7b8 --- /dev/null +++ b/migrations/1776935686.sh @@ -0,0 +1,9 @@ +echo "Recover the internal monitor at login when no external display is connected" + +SERVICE=omarchy-recover-internal-monitor.service + +mkdir -p ~/.config/systemd/user +cp $OMARCHY_PATH/config/systemd/user/$SERVICE ~/.config/systemd/user/$SERVICE + +systemctl --user daemon-reload +systemctl --user enable $SERVICE