From 19d1ee2b00e009c13ed89f7a3b125a1b93ab1c22 Mon Sep 17 00:00:00 2001 From: Michael Larsen Date: Thu, 18 Sep 2025 13:01:26 +0200 Subject: [PATCH 01/47] Added fix for ealy 2013 macbook pro's using an older chipset, BCM4331 --- .../hardware/{fix-apple-bcm4360.sh => fix-apple-bcm43xx.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename install/config/hardware/{fix-apple-bcm4360.sh => fix-apple-bcm43xx.sh} (100%) diff --git a/install/config/hardware/fix-apple-bcm4360.sh b/install/config/hardware/fix-apple-bcm43xx.sh similarity index 100% rename from install/config/hardware/fix-apple-bcm4360.sh rename to install/config/hardware/fix-apple-bcm43xx.sh From ad30ef6339be16bc3c5d0824e140aa9741943af9 Mon Sep 17 00:00:00 2001 From: Michael Larsen Date: Thu, 18 Sep 2025 14:53:04 +0200 Subject: [PATCH 02/47] Tried with a different approach for cleaner code --- install/config/hardware/fix-apple-bcm43xx.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/install/config/hardware/fix-apple-bcm43xx.sh b/install/config/hardware/fix-apple-bcm43xx.sh index f7d6d324..17a57d87 100644 --- a/install/config/hardware/fix-apple-bcm43xx.sh +++ b/install/config/hardware/fix-apple-bcm43xx.sh @@ -1,5 +1,16 @@ -# Install wifi drivers for 2013-2015 MacBooks using the BCM4360 chip -if lspci -nnv | grep -A2 "14e4:43a0" | grep -q "106b:"; then +# Install Wi-Fi drivers for Broadcom chips on MacBooks: +# - BCM4360 (2013–2015) +# - BCM4331 (2012, early 2013) + +# Grab the PCI ID string once +pci_info=$(lspci -nnv) + +if echo "$pci_info" | grep -q "14e4:43a0" && echo "$pci_info" | grep -q "106b:"; then echo "Apple BCM4360 detected" - sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers +# sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers +elif echo "$pci_info" | grep -q "14e4:4331" && echo "$pci_info" | grep -q "106b:"; then + echo "Apple BCM4331 detected" +# sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers +else + echo "No supported Broadcom chip detected" fi From 4d50c8bd336b898efc2cf5f6fb4c194d05fb0bc8 Mon Sep 17 00:00:00 2001 From: Michael Larsen Date: Thu, 18 Sep 2025 15:16:24 +0200 Subject: [PATCH 03/47] Clean up Tested the logic on the MacBook. It worked and the install of the drivers are reenabled. --- install/config/hardware/fix-apple-bcm43xx.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/install/config/hardware/fix-apple-bcm43xx.sh b/install/config/hardware/fix-apple-bcm43xx.sh index 17a57d87..1a479991 100644 --- a/install/config/hardware/fix-apple-bcm43xx.sh +++ b/install/config/hardware/fix-apple-bcm43xx.sh @@ -7,10 +7,8 @@ pci_info=$(lspci -nnv) if echo "$pci_info" | grep -q "14e4:43a0" && echo "$pci_info" | grep -q "106b:"; then echo "Apple BCM4360 detected" -# sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers + sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers elif echo "$pci_info" | grep -q "14e4:4331" && echo "$pci_info" | grep -q "106b:"; then echo "Apple BCM4331 detected" -# sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers -else - echo "No supported Broadcom chip detected" + sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers fi From 45465d3e7ca1c5352eaf4ea514114daa90d913a1 Mon Sep 17 00:00:00 2001 From: Djordje Kovacevic Date: Sun, 21 Sep 2025 08:40:48 +0200 Subject: [PATCH 04/47] Fix TUI install script - $TERMINAL should remain variable --- bin/omarchy-tui-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-tui-install b/bin/omarchy-tui-install index 121ce940..1b373f6f 100755 --- a/bin/omarchy-tui-install +++ b/bin/omarchy-tui-install @@ -43,7 +43,7 @@ cat >"$DESKTOP_FILE" < Date: Sun, 21 Sep 2025 09:29:44 +0200 Subject: [PATCH 05/47] Add migration to fix Docker and Disk Usage TUIs --- migrations/1758436991.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 migrations/1758436991.sh diff --git a/migrations/1758436991.sh b/migrations/1758436991.sh new file mode 100644 index 00000000..b9a2e7b5 --- /dev/null +++ b/migrations/1758436991.sh @@ -0,0 +1,17 @@ +echo "Fix Disk Usage and Docker TUIs" + +APP_DIR="$HOME/.local/share/applications" +ICON_DIR="$APP_DIR/icons" + +# Don't use omarchy-tui-remove to preserve icons + +if [[ -f "$APP_DIR/Docker.desktop" ]]; then + rm "$APP_DIR/Docker.desktop" + omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png" +fi + +if [[ -f "$APP_DIR/Disk Usage.desktop" ]]; then + rm "$APP_DIR/Disk Usage.desktop" + omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png" +fi + From 38d536ba9df3fcf8e48a3054837b75051018d926 Mon Sep 17 00:00:00 2001 From: Shawn Yeager Date: Sun, 21 Sep 2025 16:18:12 -0500 Subject: [PATCH 06/47] Fix for '(null)' display on AirPod source selection --- bin/omarchy-cmd-audio-switch | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/omarchy-cmd-audio-switch b/bin/omarchy-cmd-audio-switch index 63ce7a1e..d73205c3 100755 --- a/bin/omarchy-cmd-audio-switch +++ b/bin/omarchy-cmd-audio-switch @@ -23,7 +23,13 @@ fi next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]") next_sink_name=$(echo "$next_sink" | jq -r '.name') + next_sink_description=$(echo "$next_sink" | jq -r '.description') +if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then + sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"') + next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//') +fi + next_sink_volume=$(echo "$next_sink" | jq -r \ '.volume | to_entries[0].value.value_percent | sub("%"; "")') next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute') From 607915a5d1338cf2118b75b4a704abb0d3bf68c6 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 21 Sep 2025 18:12:21 -0400 Subject: [PATCH 07/47] Combine ifs --- install/config/hardware/fix-apple-bcm43xx.sh | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/install/config/hardware/fix-apple-bcm43xx.sh b/install/config/hardware/fix-apple-bcm43xx.sh index 1a479991..1311a491 100644 --- a/install/config/hardware/fix-apple-bcm43xx.sh +++ b/install/config/hardware/fix-apple-bcm43xx.sh @@ -2,13 +2,10 @@ # - BCM4360 (2013–2015) # - BCM4331 (2012, early 2013) -# Grab the PCI ID string once pci_info=$(lspci -nnv) -if echo "$pci_info" | grep -q "14e4:43a0" && echo "$pci_info" | grep -q "106b:"; then - echo "Apple BCM4360 detected" - sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers -elif echo "$pci_info" | grep -q "14e4:4331" && echo "$pci_info" | grep -q "106b:"; then - echo "Apple BCM4331 detected" +if echo "$pci_info" | grep -q "106b:" && + (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then + echo "Apple BCM4360 / BCM4331 detected" sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers fi From 4d9f932e6cf36247a11006a86927b552d0cb999b Mon Sep 17 00:00:00 2001 From: Djordje Kovacevic Date: Tue, 23 Sep 2025 22:52:58 +0200 Subject: [PATCH 08/47] Replace "--class" with "--class=" --- bin/omarchy-tui-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-tui-install b/bin/omarchy-tui-install index 1b373f6f..916db654 100755 --- a/bin/omarchy-tui-install +++ b/bin/omarchy-tui-install @@ -43,7 +43,7 @@ cat >"$DESKTOP_FILE" < Date: Thu, 25 Sep 2025 21:54:07 +0200 Subject: [PATCH 09/47] Add Helium browser to supported browsers list in omarchy-launch-webapp --- bin/omarchy-launch-webapp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-launch-webapp b/bin/omarchy-launch-webapp index 0276d966..eeb3ad77 100755 --- a/bin/omarchy-launch-webapp +++ b/bin/omarchy-launch-webapp @@ -3,7 +3,7 @@ browser=$(xdg-settings get default-web-browser) case $browser in -google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi*) ;; +google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;; *) browser="chromium.desktop" ;; esac From 3376838dfb6252a01314706e3ad547c8291e7d85 Mon Sep 17 00:00:00 2001 From: Patrick Byrne Date: Thu, 25 Sep 2025 21:59:37 +0200 Subject: [PATCH 10/47] Fix Helium browser detection in launch script --- bin/omarchy-launch-webapp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-launch-webapp b/bin/omarchy-launch-webapp index eeb3ad77..441748ea 100755 --- a/bin/omarchy-launch-webapp +++ b/bin/omarchy-launch-webapp @@ -3,7 +3,7 @@ browser=$(xdg-settings get default-web-browser) case $browser in -google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;; +google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium-browser*) ;; *) browser="chromium.desktop" ;; esac From 96b64189a6159dff5c6cfb28aba26ed09331bec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20M=C3=ADnguez?= Date: Thu, 25 Sep 2025 22:58:55 +0200 Subject: [PATCH 11/47] feat: Added MacBook10,1 to the fix-apple-spi-keyboard.sh --- install/config/hardware/fix-apple-spi-keyboard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/config/hardware/fix-apple-spi-keyboard.sh b/install/config/hardware/fix-apple-spi-keyboard.sh index f549669f..14756789 100644 --- a/install/config/hardware/fix-apple-spi-keyboard.sh +++ b/install/config/hardware/fix-apple-spi-keyboard.sh @@ -1,5 +1,5 @@ # Detect MacBook models that need SPI keyboard modules -if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook12,1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then +if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then echo "Detected MacBook with SPI keyboard" sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms From d4b0ba5d944dc3aa05db05f92ee9af305c4a02f4 Mon Sep 17 00:00:00 2001 From: observable Date: Wed, 24 Sep 2025 13:37:56 -0500 Subject: [PATCH 12/47] Use output display or region geometry to record The previous code did not identify the output display correctly, leading to wf-recorder asking the user to select the region when the user requested the display output to be selected. With this change the bash script will use slurp with the -o flag to identify the display output. This has not been tested with wl-screenrec as no change has been made to its call signature in omarchy-cmd-screenrecord and the wl-screenrec binary is not included in the default omarchy installation. --- bin/omarchy-cmd-screenrecord | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-cmd-screenrecord b/bin/omarchy-cmd-screenrecord index 29fda33d..ee4622f2 100755 --- a/bin/omarchy-cmd-screenrecord +++ b/bin/omarchy-cmd-screenrecord @@ -15,7 +15,7 @@ SCOPE="$1" AUDIO=$([[ $2 == "audio" ]] && echo "--audio") start_screenrecording() { - filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" + local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" if lspci | grep -qi 'nvidia'; then wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" & @@ -47,7 +47,8 @@ screenrecording_active() { if screenrecording_active; then stop_screenrecording elif [[ "$SCOPE" == "output" ]]; then - start_screenrecording + output=$(slurp -o) || exit 1 + start_screenrecording -g "$output" else region=$(slurp) || exit 1 start_screenrecording -g "$region" From 25df782e2f54ad3a4b0cfb9d3b61f05717ec7d4e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 26 Sep 2025 18:52:27 +0200 Subject: [PATCH 13/47] Suggest how to have a smaller-than-max-width single window aspect ratio --- config/hypr/looknfeel.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/hypr/looknfeel.conf b/config/hypr/looknfeel.conf index 1816d776..39022b89 100644 --- a/config/hypr/looknfeel.conf +++ b/config/hypr/looknfeel.conf @@ -15,3 +15,9 @@ decoration { # Use round window corners # rounding = 8 } + +# https://wiki.hypr.land/Configuring/Dwindle-Layout/ +dwindle { + # Avoid overly wide single-window layouts on wide screens + # single_window_aspect_ratio = 1 1 +} From fba17b7da4eac2b5da077b08876de8a02850ffb9 Mon Sep 17 00:00:00 2001 From: "Joel Gaff, Jr" Date: Thu, 25 Sep 2025 21:53:08 -0700 Subject: [PATCH 14/47] Add more Mac models to SPI keyboard support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added: MacBook 8,1 MacBook 9,1 MacBook 8,1 uses slightly different moduels from what I can tell, so I’ve added a case statment. Please tweak as needed. --- install/config/hardware/fix-apple-spi-keyboard.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/install/config/hardware/fix-apple-spi-keyboard.sh b/install/config/hardware/fix-apple-spi-keyboard.sh index 14756789..46d1fed3 100644 --- a/install/config/hardware/fix-apple-spi-keyboard.sh +++ b/install/config/hardware/fix-apple-spi-keyboard.sh @@ -1,7 +1,14 @@ # Detect MacBook models that need SPI keyboard modules -if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then +if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook[89],1|MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then echo "Detected MacBook with SPI keyboard" sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms - echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null + case "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" in + MacBook8,1) + echo "MODULES=(applespi spi_pxa2xx_platform spi_pxa2xx_pci)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null + ;; + MacBook9,1|MacBook1[02],1|MacBookPro13,1|MacBookPro13,2|MacBookPro13,3|MacBookPro14,1|MacBookPro14,2|MacBookPro14,3) + echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null + ;; + esac fi From cd39bbf692d047e575a1be1e3bbe1131a5f6edd3 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 28 Sep 2025 14:52:24 -0400 Subject: [PATCH 15/47] Fix conflict + rearrange --- .../config/hardware/fix-apple-spi-keyboard.sh | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/install/config/hardware/fix-apple-spi-keyboard.sh b/install/config/hardware/fix-apple-spi-keyboard.sh index 46d1fed3..19fd88f6 100644 --- a/install/config/hardware/fix-apple-spi-keyboard.sh +++ b/install/config/hardware/fix-apple-spi-keyboard.sh @@ -1,14 +1,12 @@ # Detect MacBook models that need SPI keyboard modules -if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook[89],1|MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then +product_name="$(cat /sys/class/dmi/id/product_name 2>/dev/null)" +if [[ "$product_name" =~ MacBook[89],1|MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then echo "Detected MacBook with SPI keyboard" sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms - case "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" in - MacBook8,1) - echo "MODULES=(applespi spi_pxa2xx_platform spi_pxa2xx_pci)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null - ;; - MacBook9,1|MacBook1[02],1|MacBookPro13,1|MacBookPro13,2|MacBookPro13,3|MacBookPro14,1|MacBookPro14,2|MacBookPro14,3) - echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null - ;; - esac + if [[ "$product_name" == "MacBook8,1" ]]; then + echo "MODULES=(applespi spi_pxa2xx_platform spi_pxa2xx_pci)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null + else + echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null + fi fi From 971422b757d9a748e269b53f76cb63bacad26be8 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 28 Sep 2025 15:02:54 -0400 Subject: [PATCH 16/47] Update install script name --- install/config/all.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/config/all.sh b/install/config/all.sh index 1336dee3..a9affb79 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -24,6 +24,6 @@ run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh -run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm4360.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh From 796ef67ede4c7fb75c75bf2a0d66d41b4caefe54 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 28 Sep 2025 15:18:25 -0400 Subject: [PATCH 17/47] Revert "Fix for '(null)' display on AirPod source selection" --- bin/omarchy-cmd-audio-switch | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bin/omarchy-cmd-audio-switch b/bin/omarchy-cmd-audio-switch index d73205c3..63ce7a1e 100755 --- a/bin/omarchy-cmd-audio-switch +++ b/bin/omarchy-cmd-audio-switch @@ -23,13 +23,7 @@ fi next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]") next_sink_name=$(echo "$next_sink" | jq -r '.name') - next_sink_description=$(echo "$next_sink" | jq -r '.description') -if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then - sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"') - next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//') -fi - next_sink_volume=$(echo "$next_sink" | jq -r \ '.volume | to_entries[0].value.value_percent | sub("%"; "")') next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute') From ea6b6c6b7f0d5f54979f8be408eacacc3d9e9a34 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 28 Sep 2025 17:08:08 -0400 Subject: [PATCH 18/47] Typo --- bin/omarchy-restart-pipewire | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-restart-pipewire b/bin/omarchy-restart-pipewire index f6a7260b..f26ee09e 100755 --- a/bin/omarchy-restart-pipewire +++ b/bin/omarchy-restart-pipewire @@ -1,4 +1,4 @@ #!/bin/bash -echo -e "Restarting pirewire audio service...\n" +echo -e "Restarting pipewire audio service...\n" systemctl --user restart pipewire.service From 67011160b2c8de8c757017b6baa3d68a60a277e2 Mon Sep 17 00:00:00 2001 From: Fransiscus Rolanda Malau Date: Mon, 29 Sep 2025 23:14:53 +0700 Subject: [PATCH 19/47] hypr: add Helium to chromium-based browser tagging (follow-up to #1945) (#2056) --- default/hypr/apps/browser.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/hypr/apps/browser.conf b/default/hypr/apps/browser.conf index 1ff18150..b6df0072 100644 --- a/default/hypr/apps/browser.conf +++ b/default/hypr/apps/browser.conf @@ -1,5 +1,5 @@ # Browser types -windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable) +windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium) windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf) # Force chromium-based browsers into a tile to deal with --app bug From 1022734a67bc9370c04bc45cc309a7f0a08c36a5 Mon Sep 17 00:00:00 2001 From: Alexandre Perreault Date: Mon, 29 Sep 2025 12:18:20 -0400 Subject: [PATCH 20/47] feat: clear states when relaunching or rebooting from the system menu (#2053) --- bin/omarchy-menu | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 0dd68ec1..e18c247b 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -451,9 +451,9 @@ show_system_menu() { *Lock*) omarchy-lock-screen ;; *Screensaver*) omarchy-launch-screensaver force ;; *Suspend*) systemctl suspend ;; - *Relaunch*) uwsm stop ;; - *Restart*) systemctl reboot ;; - *Shutdown*) systemctl poweroff ;; + *Relaunch*) omarchy-state clear relaunch-required && uwsm stop ;; + *Restart*) omarchy-state clear re*-required && systemctl reboot ;; + *Shutdown*) omarchy-state clear re*-required && systemctl poweroff ;; *) back_to show_main_menu ;; esac } From a51011fbb81d39bb5883db1b752a2bcf8831cfac Mon Sep 17 00:00:00 2001 From: Aislan Dener Souza Vicentini Date: Mon, 29 Sep 2025 13:32:53 -0300 Subject: [PATCH 21/47] add suport fingerprint from FPC - Thinkpad E14 Gen 6 (#2023) --- bin/omarchy-setup-fingerprint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-setup-fingerprint b/bin/omarchy-setup-fingerprint index 422fb1e4..93b70e6d 100755 --- a/bin/omarchy-setup-fingerprint +++ b/bin/omarchy-setup-fingerprint @@ -20,7 +20,7 @@ print_info() { } check_fingerprint_hardware() { - if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan|validity'; then + if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan|validity|FPC'; then print_error "\nNo fingerprint sensor detected." return 1 fi From 9903a9b333968ca8a7fef04978d05567cee4b798 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 30 Sep 2025 12:24:19 +0200 Subject: [PATCH 22/47] Increase the delay before the "window is not responding" notice is shown Closes #2098 Co-authored-by: @CaffeinatedTech --- default/hypr/looknfeel.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 9b8f3077..f9bae668 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -86,6 +86,7 @@ misc { disable_hyprland_logo = true disable_splash_rendering = true focus_on_activate = true + anr_missed_pings = 5 } # https://wiki.hypr.land/Configuring/Variables/#cursor From 977103011ef2baa8fa76d13583ba640aead30d34 Mon Sep 17 00:00:00 2001 From: Kye Davey Date: Tue, 30 Sep 2025 20:27:41 +1000 Subject: [PATCH 23/47] fix removal of webapps that use additional handler (#2096) Co-authored-by: Ryan Hughes --- bin/omarchy-webapp-remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-webapp-remove b/bin/omarchy-webapp-remove index 833e8989..ca4daefc 100755 --- a/bin/omarchy-webapp-remove +++ b/bin/omarchy-webapp-remove @@ -6,7 +6,7 @@ DESKTOP_DIR="$HOME/.local/share/applications/" if [ "$#" -eq 0 ]; then # Find all web apps while IFS= read -r -d '' file; do - if grep -q '^Exec=.*omarchy-launch-webapp.*' "$file"; then + if grep -q '^Exec=.*\(omarchy-launch-webapp\|omarchy-webapp-handler\).*' "$file"; then WEB_APPS+=("$(basename "${file%.desktop}")") fi done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0) From 1ac8e96df3263024f51dfa6fe4dcd82cbd1e7614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulf=20K=C3=B6ther?= Date: Tue, 30 Sep 2025 12:29:02 +0200 Subject: [PATCH 24/47] Alter input.conf kb_options to take non-us keyboards into account (#2086) Co-authored-by: Ryan Hughes --- config/hypr/input.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hypr/input.conf b/config/hypr/input.conf index ca5f1f5e..8a09359f 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -3,7 +3,7 @@ input { # Use multiple keyboard layouts and switch between them with Left Alt + Right Alt # kb_layout = us,dk,eu - kb_options = compose:caps # ,grp:alts_toggle + kb_options = compose:caps # ,grp:shifts_toggle # Change speed of keyboard repeat repeat_rate = 40 From 7819ae354e012af5053429c07c683bb0215c64c1 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 2 Oct 2025 20:04:19 +0200 Subject: [PATCH 25/47] Go back to using -set-theme-color until the policy coloring is fixed --- bin/omarchy-theme-set-browser | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/omarchy-theme-set-browser b/bin/omarchy-theme-set-browser index 759d2c4e..655ebe31 100755 --- a/bin/omarchy-theme-set-browser +++ b/bin/omarchy-theme-set-browser @@ -4,16 +4,17 @@ CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme if omarchy-cmd-present chromium || omarchy-cmd-present brave; then if [[ -f $CHROMIUM_THEME ]]; then - rgb=$(<$CHROMIUM_THEME) + THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ }) else # Use a default, neutral grey if theme doesn't have a color + THEME_RGB_COLOR="28,32,39" THEME_HEX_COLOR="#1c2027" fi if omarchy-cmd-present chromium; then - echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null - chromium --refresh-platform-policy --no-startup-window + rm -f /etc/chromium/policies/managed/color.json + chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" fi if omarchy-cmd-present brave; then From e0f16b9098c96e6c8ebae4bf9c3698cbc5a418eb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 4 Oct 2025 17:41:05 +0200 Subject: [PATCH 26/47] Reduce timeout for hung applications to more like 5-6s --- default/hypr/looknfeel.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index f9bae668..f4b4a44f 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -86,7 +86,7 @@ misc { disable_hyprland_logo = true disable_splash_rendering = true focus_on_activate = true - anr_missed_pings = 5 + anr_missed_pings = 3 } # https://wiki.hypr.land/Configuring/Variables/#cursor From 42835338580d9291343696e4a69f3bed99394d6a Mon Sep 17 00:00:00 2001 From: Lucas Goossen Date: Sat, 4 Oct 2025 12:53:55 -0300 Subject: [PATCH 27/47] Made keybindings menu a little more human readable (#1824) Co-authored-by: Lucas Goossen --- bin/omarchy-menu-keybindings | 105 +++++++++++++++++------------- config/hypr/bindings.conf | 4 +- default/hypr/bindings.conf | 4 +- default/hypr/bindings/tiling.conf | 30 ++++----- migrations/1755870033.sh | 2 +- 5 files changed, 79 insertions(+), 66 deletions(-) diff --git a/bin/omarchy-menu-keybindings b/bin/omarchy-menu-keybindings index 1d1b40ac..ab13025b 100755 --- a/bin/omarchy-menu-keybindings +++ b/bin/omarchy-menu-keybindings @@ -11,30 +11,44 @@ # - Map numeric modifier key mask to a textual rendition # - Output comma-separated values that the parser can understand dynamic_bindings() { - hyprctl -j binds | \ - jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | \ + hyprctl -j binds | + jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | sed -r \ - -e 's/null//' \ - -e 's,~/.local/share/omarchy/bin/,,' \ - -e 's,uwsm app -- ,,' \ - -e 's/@0//' \ - -e 's/,@/,code:/' \ - -e 's/^0,/,/' \ - -e 's/^1,/SHIFT,/' \ - -e 's/^4,/CTRL,/' \ - -e 's/^5,/SHIFT CTRL,/' \ - -e 's/^8,/ALT,/' \ - -e 's/^9,/SHIFT ALT,/' \ - -e 's/^12,/CTRL ALT,/' \ - -e 's/^13,/SHIFT CTRL ALT,/' \ - -e 's/^64,/SUPER,/' \ - -e 's/^65,/SUPER SHIFT,/' \ - -e 's/^68,/SUPER CTRL,/' \ - -e 's/^69,/SUPER SHIFT CTRL,/' \ - -e 's/^72,/SUPER ALT,/' \ - -e 's/^73,/SUPER SHIFT ALT,/' \ - -e 's/^76,/SUPER CTRL ALT,/' \ - -e 's/^77,/SUPER SHIFT CTRL ALT,/' + -e 's/null//' \ + -e 's,~/.local/share/omarchy/bin/,,' \ + -e 's,uwsm app -- ,,' \ + -e 's/@0//' \ + -e 's/,@/,code:/' \ + -e 's/,code:10,/,1,/' \ + -e 's/,code:11,/,2,/' \ + -e 's/,code:12,/,3,/' \ + -e 's/,code:13,/,4,/' \ + -e 's/,code:14,/,5,/' \ + -e 's/,code:15,/,6,/' \ + -e 's/,code:16,/,7,/' \ + -e 's/,code:17,/,8,/' \ + -e 's/,code:18,/,9,/' \ + -e 's/,code:19,/,0,/' \ + -e 's/,code:20,/,-,/' \ + -e 's/,code:21,/,=,/' \ + -e 's/^0,/,/' \ + -e 's/,mouse:272,/,MOUSE LEFT,/' \ + -e 's/,mouse:273,/,MOUSE RIGHT,/' \ + -e 's/^1,/SHIFT,/' \ + -e 's/^4,/CTRL,/' \ + -e 's/^5,/SHIFT CTRL,/' \ + -e 's/^8,/ALT,/' \ + -e 's/^9,/SHIFT ALT,/' \ + -e 's/^12,/CTRL ALT,/' \ + -e 's/^13,/SHIFT CTRL ALT,/' \ + -e 's/^64,/SUPER,/' \ + -e 's/^65,/SUPER SHIFT,/' \ + -e 's/^68,/SUPER CTRL,/' \ + -e 's/^69,/SUPER SHIFT CTRL,/' \ + -e 's/^72,/SUPER ALT,/' \ + -e 's/^73,/SUPER SHIFT ALT,/' \ + -e 's/^76,/SUPER CTRL ALT,/' \ + -e 's/^77,/SUPER SHIFT CTRL ALT,/' } # Parse and format keybindings @@ -46,7 +60,7 @@ dynamic_bindings() { # - Prints everything in a nicely aligned format. parse_bindings() { awk -F, ' -{ + { # Combine the modifier and key (first two fields) key_combo = $1 " + " $2; @@ -58,36 +72,35 @@ parse_bindings() { action = $3; if (action == "") { - # Reconstruct the command from the remaining fields - for (i = 4; i <= NF; i++) { - action = action $i (i < NF ? "," : ""); - } + # Reconstruct the command from the remaining fields + for (i = 4; i <= NF; i++) { + action = action $i (i < NF ? "," : ""); + } - # Clean up trailing commas, remove leading "exec, ", and trim - sub(/,$/, "", action); - gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); - gsub(/^[ \t]+|[ \t]+$/, "", action); - gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one + # Clean up trailing commas, remove leading "exec, ", and trim + sub(/,$/, "", action); + gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); + gsub(/^[ \t]+|[ \t]+$/, "", action); + gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one - # Escape XML entities - gsub(/&/, "\\&", action); - gsub(//, "\\>", action); - gsub(/"/, "\\"", action); - gsub(/'"'"'/, "\\'", action); + # Escape XML entities + gsub(/&/, "\\&", action); + gsub(//, "\\>", action); + gsub(/"/, "\\"", action); + gsub(/'"'"'/, "\\'", action); } - if (action != "") { - printf "%-35s → %s\n", key_combo, action; - } + if (action != "") { + printf "%-35s → %s\n", key_combo, action; + } }' } monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') menu_height=$((monitor_height * 40 / 100)) -dynamic_bindings | \ - sort -u | \ - parse_bindings | \ +dynamic_bindings | + sort -u | + parse_bindings | walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" - diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index 6076049b..b8e6ea31 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -2,7 +2,7 @@ $terminal = uwsm app -- $TERMINAL $browser = omarchy-launch-browser -bindd = SUPER, return, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" +bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window bindd = SUPER, B, Browser, exec, $browser bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private @@ -12,7 +12,7 @@ bindd = SUPER, T, Activity, exec, $terminal -e btop bindd = SUPER, D, Docker, exec, $terminal -e lazydocker bindd = SUPER, G, Signal, exec, omarchy-launch-or-focus signal "uwsm app -- signal-desktop" bindd = SUPER, O, Obsidian, exec, omarchy-launch-or-focus obsidian "uwsm app -- obsidian -disable-gpu --enable-wayland-ime" -bindd = SUPER, slash, Passwords, exec, uwsm app -- 1password +bindd = SUPER, SLASH, Passwords, exec, uwsm app -- 1password # If your web app url contains #, type it as ## to prevent hyperland treat it as comments bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" diff --git a/default/hypr/bindings.conf b/default/hypr/bindings.conf index 2927eb34..20fee804 100644 --- a/default/hypr/bindings.conf +++ b/default/hypr/bindings.conf @@ -1,6 +1,6 @@ # Deprecated bindings file. New installations include everything directly. -bindd = SUPER, return, Terminal, exec, $terminal +bindd = SUPER, RETURN, Terminal, exec, $terminal bindd = SUPER, F, File manager, exec, $fileManager bindd = SUPER, B, Web browser, exec, $browser bindd = SUPER, M, Music player, exec, $music @@ -9,7 +9,7 @@ bindd = SUPER, T, Top, exec, $terminal -e btop bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker bindd = SUPER, G, Messenger, exec, $messenger bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu -bindd = SUPER, slash, Password manager, exec, $passwordManager +bindd = SUPER, SLASH, Password manager, exec, $passwordManager source = ~/.local/share/omarchy/default/hypr/bindings/media.conf source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index ff2437b9..a0e0f0b5 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -10,10 +10,10 @@ bindd = SHIFT, F11, Force full screen, fullscreen, 0 bindd = ALT, F11, Full width, fullscreen, 1 # Move focus with SUPER + arrow keys -bindd = SUPER, left, Move focus left, movefocus, l -bindd = SUPER, right, Move focus right, movefocus, r -bindd = SUPER, up, Move focus up, movefocus, u -bindd = SUPER, down, Move focus down, movefocus, d +bindd = SUPER, LEFT, Move focus left, movefocus, l +bindd = SUPER, RIGHT, Move focus right, movefocus, r +bindd = SUPER, UP, Move focus up, movefocus, u +bindd = SUPER, DOWN, Move focus down, movefocus, d # Switch workspaces with SUPER + [0-9] bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 @@ -39,22 +39,22 @@ bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8 bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9 bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10 -# Tab between workspaces +# TAB between workspaces bindd = SUPER, TAB, Next workspace, workspace, e+1 bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1 bindd = SUPER CTRL, TAB, Former workspace, workspace, previous # Swap active window with the one next to it with SUPER + SHIFT + arrow keys -bindd = SUPER SHIFT, left, Swap window to the left, swapwindow, l -bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r -bindd = SUPER SHIFT, up, Swap window up, swapwindow, u -bindd = SUPER SHIFT, down, Swap window down, swapwindow, d +bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l +bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r +bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u +bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d # Cycle through applications on active workspace -bindd = ALT, Tab, Cycle to next window, cyclenext -bindd = ALT SHIFT, Tab, Cycle to prev window, cyclenext, prev -bindd = ALT, Tab, Reveal active window on top, bringactivetotop -bindd = ALT SHIFT, Tab, Reveal active window on top, bringactivetotop +bindd = ALT, TAB, Cycle to next window, cyclenext +bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev +bindd = ALT, TAB, Reveal active window on top, bringactivetotop +bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop # Resize active window bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key @@ -63,8 +63,8 @@ bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100 bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100 # Scroll through existing workspaces with SUPER + scroll -bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1 -bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1 +bindd = SUPER, MOUSE_DOWN, Scroll active workspace forward, workspace, e+1 +bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindmd = SUPER, mouse:272, Move window, movewindow diff --git a/migrations/1755870033.sh b/migrations/1755870033.sh index fde865be..d7b6e8f9 100644 --- a/migrations/1755870033.sh +++ b/migrations/1755870033.sh @@ -1,5 +1,5 @@ echo "Use current terminal shell cwd for new terminal working directories" if ! grep -q "working-directory" ~/.config/hypr/bindings.conf; then - sed -i '/bindd = SUPER, return, Terminal, exec, \$terminal/ s|$| --working-directory=$(omarchy-cmd-terminal-cwd)|' ~/.config/hypr/bindings.conf + sed -i '/bindd = SUPER, RETURN, Terminal, exec, \$terminal/ s|$| --working-directory=$(omarchy-cmd-terminal-cwd)|' ~/.config/hypr/bindings.conf fi From bba224e9a5b674f0a0a9e5ff79b4837a43ca992b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 4 Oct 2025 17:55:27 +0200 Subject: [PATCH 28/47] Speedup keybindings show by using caching Co-authored-by: @davidwinter --- bin/omarchy-menu-keybindings | 118 +++++++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 33 deletions(-) diff --git a/bin/omarchy-menu-keybindings b/bin/omarchy-menu-keybindings index ab13025b..cd1a9b54 100755 --- a/bin/omarchy-menu-keybindings +++ b/bin/omarchy-menu-keybindings @@ -3,6 +3,69 @@ # A script to display Hyprland keybindings defined in your configuration # using walker for an interactive search menu. +declare -A KEYCODE_SYM_MAP + +build_keymap_cache() { + local keymap + keymap="$(xkbcli compile-keymap)" || { + echo "Failed to compile keymap" >&2 + return 1 + } + + while IFS=, read -r code sym; do + [[ -z "$code" || -z "$sym" ]] && continue + KEYCODE_SYM_MAP["$code"]="$sym" + done < <( + awk ' + BEGIN { sec = "" } + /xkb_keycodes/ { sec = "codes"; next } + /xkb_symbols/ { sec = "syms"; next } + sec == "codes" { + if (match($0, /<([A-Za-z0-9_]+)>\s*=\s*([0-9]+)\s*;/, m)) code_by_name[m[1]] = m[2] + } + sec == "syms" { + if (match($0, /key\s*<([A-Za-z0-9_]+)>\s*\{\s*\[\s*([^, \]]+)/, m)) sym_by_name[m[1]] = m[2] + } + END { + for (k in code_by_name) { + c = code_by_name[k] + s = sym_by_name[k] + if (c != "" && s != "" && s != "NoSymbol") print c "," s + } + } + ' <<<"$keymap" + ) +} + +lookup_keycode_cached() { + printf '%s\n' "${KEYCODE_SYM_MAP[$1]}" +} + +parse_keycodes() { + local start end elapsed + [[ "${DEBUG:-0}" == "1" ]] && start=$(date +%s.%N) + while IFS= read -r line; do + if [[ "$line" =~ code:([0-9]+) ]]; then + code="${BASH_REMATCH[1]}" + symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE") + echo "${line/code:${code}/$symbol}" + else + echo "$line" + fi + done + + if [[ "$DEBUG" == "1" ]]; then + end=$(date +%s.%N) + # fall back to awk if bc is missing + if command -v bc >/dev/null 2>&1; then + elapsed=$(echo "$end - $start" | bc) + else + elapsed=$(awk -v s="$start" -v e="$end" 'BEGIN{printf "%.6f", (e - s)}') + fi + echo "[DEBUG] parse_keycodes elapsed: ${elapsed}s" >&2 + fi +} + # Fetch dynamic keybindings from Hyprland # # Also do some pre-processing: @@ -19,21 +82,7 @@ dynamic_bindings() { -e 's,uwsm app -- ,,' \ -e 's/@0//' \ -e 's/,@/,code:/' \ - -e 's/,code:10,/,1,/' \ - -e 's/,code:11,/,2,/' \ - -e 's/,code:12,/,3,/' \ - -e 's/,code:13,/,4,/' \ - -e 's/,code:14,/,5,/' \ - -e 's/,code:15,/,6,/' \ - -e 's/,code:16,/,7,/' \ - -e 's/,code:17,/,8,/' \ - -e 's/,code:18,/,9,/' \ - -e 's/,code:19,/,0,/' \ - -e 's/,code:20,/,-,/' \ - -e 's/,code:21,/,=,/' \ -e 's/^0,/,/' \ - -e 's/,mouse:272,/,MOUSE LEFT,/' \ - -e 's/,mouse:273,/,MOUSE RIGHT,/' \ -e 's/^1,/SHIFT,/' \ -e 's/^4,/CTRL,/' \ -e 's/^5,/SHIFT CTRL,/' \ @@ -60,7 +109,7 @@ dynamic_bindings() { # - Prints everything in a nicely aligned format. parse_bindings() { awk -F, ' - { +{ # Combine the modifier and key (first two fields) key_combo = $1 " + " $2; @@ -72,35 +121,38 @@ parse_bindings() { action = $3; if (action == "") { - # Reconstruct the command from the remaining fields - for (i = 4; i <= NF; i++) { - action = action $i (i < NF ? "," : ""); - } + # Reconstruct the command from the remaining fields + for (i = 4; i <= NF; i++) { + action = action $i (i < NF ? "," : ""); + } - # Clean up trailing commas, remove leading "exec, ", and trim - sub(/,$/, "", action); - gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); - gsub(/^[ \t]+|[ \t]+$/, "", action); - gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one + # Clean up trailing commas, remove leading "exec, ", and trim + sub(/,$/, "", action); + gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); + gsub(/^[ \t]+|[ \t]+$/, "", action); + gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one - # Escape XML entities - gsub(/&/, "\\&", action); - gsub(//, "\\>", action); - gsub(/"/, "\\"", action); - gsub(/'"'"'/, "\\'", action); + # Escape XML entities + gsub(/&/, "\\&", action); + gsub(//, "\\>", action); + gsub(/"/, "\\"", action); + gsub(/'"'"'/, "\\'", action); } - if (action != "") { - printf "%-35s → %s\n", key_combo, action; - } + if (action != "") { + printf "%-35s → %s\n", key_combo, action; + } }' } monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') menu_height=$((monitor_height * 40 / 100)) +build_keymap_cache + dynamic_bindings | sort -u | + parse_keycodes | parse_bindings | walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" From bbe4461c053e441e59dfb8ac5f8d072ddadd0555 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 10:54:45 +0200 Subject: [PATCH 29/47] Only give one line to avoid the jitter --- bin/omarchy-cmd-screensaver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index e336c8b0..70202bf1 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -18,7 +18,7 @@ hyprctl keyword cursor:invisible true while true; do effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) tte -i ~/.config/omarchy/branding/screensaver.txt \ - --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ + --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 1)) --anchor-canvas c --anchor-text c \ "$effect" & while pgrep -x tte >/dev/null; do From 6544d1b9702aabfb17cbe430eca8f2828b6e7f43 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 5 Oct 2025 11:18:40 -0400 Subject: [PATCH 30/47] Add auto-changing colors for Neovim (#1712) * Add MVP variant of nvim switcher * Update nvim configs * Remove config * Add migration for the new live themeing * Fix plugin * Remove theme * Update to actually work * Make it faster * Fix quirks --------- Co-authored-by: David Heinemeier Hansson --- config/nvim/lua/plugins/all-themes.lua | 56 +++++++++++++++++++ .../lua/plugins/omarchy-theme-hotreload.lua | 45 +++++++++++++++ config/nvim/lua/plugins/theme.lua | 8 --- migrations/1758081785.sh | 4 ++ themes/catppuccin-latte/neovim.lua | 9 +-- themes/catppuccin/neovim.lua | 5 ++ themes/osaka-jade/neovim.lua | 18 +++--- themes/ristretto/neovim.lua | 41 ++++---------- themes/tokyo-night/neovim.lua | 6 +- 9 files changed, 141 insertions(+), 51 deletions(-) create mode 100644 config/nvim/lua/plugins/all-themes.lua create mode 100644 config/nvim/lua/plugins/omarchy-theme-hotreload.lua delete mode 100644 config/nvim/lua/plugins/theme.lua create mode 100644 migrations/1758081785.sh diff --git a/config/nvim/lua/plugins/all-themes.lua b/config/nvim/lua/plugins/all-themes.lua new file mode 100644 index 00000000..c17001a3 --- /dev/null +++ b/config/nvim/lua/plugins/all-themes.lua @@ -0,0 +1,56 @@ +return { + -- Load all theme plugins but don't apply them + -- This ensures all colorschemes are available for hot-reloading + { + "ribru17/bamboo.nvim", + lazy = true, + priority = 1000, + }, + { + "catppuccin/nvim", + name = "catppuccin", + lazy = true, + priority = 1000, + }, + { + "sainnhe/everforest", + lazy = true, + priority = 1000, + }, + { + "ellisonleao/gruvbox.nvim", + lazy = true, + priority = 1000, + }, + { + "rebelot/kanagawa.nvim", + lazy = true, + priority = 1000, + }, + { + "tahayvr/matteblack.nvim", + lazy = true, + priority = 1000, + }, + { + "loctvl842/monokai-pro.nvim", + lazy = true, + priority = 1000, + }, + { + "shaunsingh/nord.nvim", + lazy = true, + priority = 1000, + }, + { + "rose-pine/neovim", + name = "rose-pine", + lazy = true, + priority = 1000, + }, + { + "folke/tokyonight.nvim", + lazy = true, + priority = 1000, + }, +} diff --git a/config/nvim/lua/plugins/omarchy-theme-hotreload.lua b/config/nvim/lua/plugins/omarchy-theme-hotreload.lua new file mode 100644 index 00000000..8d05a5b8 --- /dev/null +++ b/config/nvim/lua/plugins/omarchy-theme-hotreload.lua @@ -0,0 +1,45 @@ +return { + { + name = "theme-hotreload", + dir = vim.fn.stdpath("config"), + lazy = false, + priority = 1000, + config = function() + local transparency_file = vim.fn.stdpath("config") .. "/plugin/after/transparency.lua" + + vim.api.nvim_create_autocmd("User", { + pattern = "LazyReload", + callback = function() + package.loaded["plugins.theme"] = nil + + vim.schedule(function() + local ok, theme_spec = pcall(require, "plugins.theme") + if not ok then + return + end + + for _, spec in ipairs(theme_spec) do + if spec[1] == "LazyVim/LazyVim" and spec.opts and spec.opts.colorscheme then + local colorscheme = spec.opts.colorscheme + + require("lazy.core.loader").colorscheme(colorscheme) + + vim.defer_fn(function() + pcall(vim.cmd.colorscheme, colorscheme) + + if vim.fn.filereadable(transparency_file) == 1 then + vim.defer_fn(function() + vim.cmd.source(transparency_file) + end, 5) + end + end, 5) + + break + end + end + end) + end, + }) + end, + }, +} diff --git a/config/nvim/lua/plugins/theme.lua b/config/nvim/lua/plugins/theme.lua deleted file mode 100644 index dad2d30b..00000000 --- a/config/nvim/lua/plugins/theme.lua +++ /dev/null @@ -1,8 +0,0 @@ -return { - { - "LazyVim/LazyVim", - opts = { - colorscheme = "tokyonight", - }, - }, -} diff --git a/migrations/1758081785.sh b/migrations/1758081785.sh new file mode 100644 index 00000000..40e062a9 --- /dev/null +++ b/migrations/1758081785.sh @@ -0,0 +1,4 @@ +echo "Add live themeing to neovim" + +cp -f $OMARCHY_PATH/config/nvim/lua/plugins/all-themes.lua ~/.config/nvim/lua/plugins/ +cp -f $OMARCHY_PATH/config/nvim/lua/plugins/omarchy-theme-hotreload.lua ~/.config/nvim/lua/plugins/ diff --git a/themes/catppuccin-latte/neovim.lua b/themes/catppuccin-latte/neovim.lua index 07a53cf8..53eaf45c 100644 --- a/themes/catppuccin-latte/neovim.lua +++ b/themes/catppuccin-latte/neovim.lua @@ -3,12 +3,9 @@ return { "catppuccin/nvim", name = "catppuccin", priority = 1000, - config = function() - require("catppuccin").setup({ - flavour = "latte", -- other options: "mocha", "frappe", "macchiato" - }) - vim.cmd.colorscheme("catppuccin-latte") - end, + opts = { + flavour = "latte", + }, }, { "LazyVim/LazyVim", diff --git a/themes/catppuccin/neovim.lua b/themes/catppuccin/neovim.lua index dbe34f5e..a8683876 100644 --- a/themes/catppuccin/neovim.lua +++ b/themes/catppuccin/neovim.lua @@ -1,4 +1,9 @@ return { + { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + }, { "LazyVim/LazyVim", opts = { diff --git a/themes/osaka-jade/neovim.lua b/themes/osaka-jade/neovim.lua index b2bd3f20..b3c9edc5 100644 --- a/themes/osaka-jade/neovim.lua +++ b/themes/osaka-jade/neovim.lua @@ -1,9 +1,13 @@ return { - "ribru17/bamboo.nvim", - lazy = false, - priority = 1000, - config = function() - require("bamboo").setup({}) - require("bamboo").load() - end, + { + "ribru17/bamboo.nvim", + priority = 1000, + opts = {}, + }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "bamboo", + }, + }, } diff --git a/themes/ristretto/neovim.lua b/themes/ristretto/neovim.lua index 38959d47..d862d161 100644 --- a/themes/ristretto/neovim.lua +++ b/themes/ristretto/neovim.lua @@ -1,31 +1,14 @@ return { - { - "gthelding/monokai-pro.nvim", - config = function() - require("monokai-pro").setup({ - filter = "ristretto", - override = function() - return { - NonText = { fg = "#948a8b" }, - MiniIconsGrey = { fg = "#948a8b" }, - MiniIconsRed = { fg = "#fd6883" }, - MiniIconsBlue = { fg = "#85dacc" }, - MiniIconsGreen = { fg = "#adda78" }, - MiniIconsYellow = { fg = "#f9cc6c" }, - MiniIconsOrange = { fg = "#f38d70" }, - MiniIconsPurple = { fg = "#a8a9eb" }, - MiniIconsAzure = { fg = "#a8a9eb" }, - MiniIconsCyan = { fg = "#85dacc" }, -- same value as MiniIconsBlue for consistency - } - end, - }) - vim.cmd([[colorscheme monokai-pro]]) - end, - }, - { - "LazyVim/LazyVim", - opts = { - colorscheme = "monokai-pro", - }, - }, + { + "loctvl842/monokai-pro.nvim", + opts = { + filter = "ristretto", + }, + }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "monokai-pro", + }, + }, } diff --git a/themes/tokyo-night/neovim.lua b/themes/tokyo-night/neovim.lua index dad2d30b..39327c9b 100644 --- a/themes/tokyo-night/neovim.lua +++ b/themes/tokyo-night/neovim.lua @@ -1,8 +1,12 @@ return { + { + "folke/tokyonight.nvim", + priority = 1000, + }, { "LazyVim/LazyVim", opts = { - colorscheme = "tokyonight", + colorscheme = "tokyonight-night", }, }, } From a079af948ba4e9f411267a9137943ea448e829af Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 5 Oct 2025 12:14:11 -0400 Subject: [PATCH 31/47] Change default shutdown timeout to 5sec (#1886) * Shutdown faster * Add migration * Reduce shutdown timeout from 10s to 5s --------- Co-authored-by: David Heinemeier Hansson --- install/config/all.sh | 1 + install/config/fast-shutdown.sh | 7 +++++++ migrations/1758564460_enable_fast_shutdown.sh | 2 ++ 3 files changed, 10 insertions(+) create mode 100755 install/config/fast-shutdown.sh create mode 100644 migrations/1758564460_enable_fast_shutdown.sh diff --git a/install/config/all.sh b/install/config/all.sh index a9affb79..eeb9810b 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -14,6 +14,7 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh run_logged $OMARCHY_INSTALL/config/docker.sh run_logged $OMARCHY_INSTALL/config/mimetypes.sh run_logged $OMARCHY_INSTALL/config/localdb.sh +run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh diff --git a/install/config/fast-shutdown.sh b/install/config/fast-shutdown.sh new file mode 100755 index 00000000..bbbfafdc --- /dev/null +++ b/install/config/fast-shutdown.sh @@ -0,0 +1,7 @@ +sudo mkdir -p /etc/systemd/system.conf.d + +cat < Date: Sun, 5 Oct 2025 12:18:22 -0400 Subject: [PATCH 32/47] Make HEY the default mailto handler (#1822) --- bin/omarchy-webapp-handler-hey | 11 +++++++++++ install/config/mimetypes.sh | 3 +++ install/packaging/webapps.sh | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100755 bin/omarchy-webapp-handler-hey diff --git a/bin/omarchy-webapp-handler-hey b/bin/omarchy-webapp-handler-hey new file mode 100755 index 00000000..37f4cf2d --- /dev/null +++ b/bin/omarchy-webapp-handler-hey @@ -0,0 +1,11 @@ +#!/bin/bash +url="$1" +web_url="https://app.hey.com" + +# Handle mailto: URLs +if [[ $url =~ ^mailto: ]]; then + email=$(echo "$url" | sed 's/mailto://') + web_url="https://app.hey.com/messages/new?to=$email" +fi + +exec omarchy-launch-webapp "$web_url" diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh index 48bb8cfa..ee662f55 100644 --- a/install/config/mimetypes.sh +++ b/install/config/mimetypes.sh @@ -33,3 +33,6 @@ xdg-mime default mpv.desktop video/x-ms-asf xdg-mime default mpv.desktop video/x-ogm+ogg xdg-mime default mpv.desktop video/x-theora+ogg xdg-mime default mpv.desktop application/ogg + +# Use Hey for mailto: links +xdg-mime default HEY.desktop x-scheme-handler/mailto diff --git a/install/packaging/webapps.sh b/install/packaging/webapps.sh index df20bd3e..c5f7350b 100644 --- a/install/packaging/webapps.sh +++ b/install/packaging/webapps.sh @@ -1,4 +1,4 @@ -omarchy-webapp-install "HEY" https://app.hey.com HEY.png +omarchy-webapp-install "HEY" https://app.hey.com HEY.png "omarchy-webapp-handler-hey %u" "x-scheme-handler/mailto" omarchy-webapp-install "Basecamp" https://launchpad.37signals.com Basecamp.png omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ WhatsApp.png omarchy-webapp-install "Google Photos" https://photos.google.com/ "Google Photos.png" From 2e0064943b6cc9103d8ee32b3e21af30a558ec95 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 5 Oct 2025 12:23:26 -0400 Subject: [PATCH 33/47] Update version reporting (#1724) --- bin/omarchy-version | 3 +-- version | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 version diff --git a/bin/omarchy-version b/bin/omarchy-version index 4ac84815..5ddc823f 100755 --- a/bin/omarchy-version +++ b/bin/omarchy-version @@ -1,3 +1,2 @@ #!/bin/bash - -git -C "$OMARCHY_PATH" describe --tags $(git -C "$OMARCHY_PATH" rev-list --tags --max-count=1) +cat $OMARCHY_PATH/version diff --git a/version b/version new file mode 100644 index 00000000..1fe43e4f --- /dev/null +++ b/version @@ -0,0 +1 @@ +3.0.0-RC From f2021a95a4067d6d8a4395c860b78e723ee6ae88 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 5 Oct 2025 12:30:43 -0400 Subject: [PATCH 34/47] Login and UKI updates (#1860) * Change DM to SDDM * Move to custom named UKI * Skip creation on Mac * Add entry to make sure VSCode uses gnome keyring * Fix order for UKI generation * Limine only * BTRFS only --- bin/omarchy-install-vscode | 21 +++ bin/omarchy-menu | 2 +- install/login/all.sh | 4 +- install/login/alt-bootloaders.sh | 115 --------------- install/login/default-keyring.sh | 20 +++ install/login/enable-mkinitcpio.sh | 18 --- install/login/limine-snapper.sh | 44 ++++-- install/login/plymouth.sh | 147 -------------------- install/login/sddm.sh | 14 ++ install/omarchy-base.packages | 2 + install/preflight/guard.sh | 6 + migrations/1758487660_change_dm_to_sddm.sh | 24 ++++ migrations/1758487662_move_to_custom_uki.sh | 38 +++++ 13 files changed, 164 insertions(+), 291 deletions(-) create mode 100755 bin/omarchy-install-vscode delete mode 100644 install/login/alt-bootloaders.sh create mode 100644 install/login/default-keyring.sh delete mode 100644 install/login/enable-mkinitcpio.sh create mode 100644 install/login/sddm.sh create mode 100755 migrations/1758487660_change_dm_to_sddm.sh create mode 100644 migrations/1758487662_move_to_custom_uki.sh diff --git a/bin/omarchy-install-vscode b/bin/omarchy-install-vscode new file mode 100755 index 00000000..4a081c15 --- /dev/null +++ b/bin/omarchy-install-vscode @@ -0,0 +1,21 @@ +#!/bin/bash + +echo "Installing VSCode..." +omarchy-pkg-add visual-studio-code-bin + +mkdir -p ~/.vscode + +cat > ~/.vscode/argv.json << 'EOF' +// This configuration file allows you to pass permanent command line arguments to VS Code. +// Only a subset of arguments is currently supported to reduce the likelihood of breaking +// the installation. +// +// PLEASE DO NOT CHANGE WITHOUT UNDERSTANDING THE IMPACT +// +// NOTE: Changing this file requires a restart of VS Code. +{ + "password-store":"gnome-libsecret" +} +EOF + +setsid gtk-launch code diff --git a/bin/omarchy-menu b/bin/omarchy-menu index e18c247b..3c1f0055 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -260,7 +260,7 @@ show_install_service_menu() { show_install_editor_menu() { case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in - *VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;; + *VSCode*) present_terminal omarchy-install-vscode ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; *Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; diff --git a/install/login/all.sh b/install/login/all.sh index e4be282f..2c03df32 100644 --- a/install/login/all.sh +++ b/install/login/all.sh @@ -1,4 +1,4 @@ run_logged $OMARCHY_INSTALL/login/plymouth.sh +run_logged $OMARCHY_INSTALL/login/default-keyring.sh +run_logged $OMARCHY_INSTALL/login/sddm.sh run_logged $OMARCHY_INSTALL/login/limine-snapper.sh -run_logged $OMARCHY_INSTALL/login/enable-mkinitcpio.sh -run_logged $OMARCHY_INSTALL/login/alt-bootloaders.sh diff --git a/install/login/alt-bootloaders.sh b/install/login/alt-bootloaders.sh deleted file mode 100644 index bb35d9b0..00000000 --- a/install/login/alt-bootloaders.sh +++ /dev/null @@ -1,115 +0,0 @@ -if ! command -v limine &>/dev/null; then - # Add kernel hooks - if ! grep -Eq '^HOOKS=.*plymouth' /etc/mkinitcpio.conf; then - # Backup original mkinitcpio.conf just in case - backup_timestamp=$(date +"%Y%m%d%H%M%S") - sudo cp /etc/mkinitcpio.conf "/etc/mkinitcpio.conf.bak.${backup_timestamp}" - - # Add plymouth to HOOKS array after 'base udev' or 'base systemd' - if grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base systemd"; then - sudo sed -i '/^HOOKS=/s/base systemd/base systemd plymouth/' /etc/mkinitcpio.conf - elif grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base udev"; then - sudo sed -i '/^HOOKS=/s/base udev/base udev plymouth/' /etc/mkinitcpio.conf - else - echo "Couldn't add the Plymouth hook" - fi - - # Regenerate initramfs - sudo mkinitcpio -P - fi - - # Add kernel parameters for Plymouth - if [ -d "/boot/loader/entries" ]; then # systemd-boot - echo "Detected systemd-boot" - - for entry in /boot/loader/entries/*.conf; do - if [ -f "$entry" ]; then - # Skip fallback entries - if [[ "$(basename "$entry")" == *"fallback"* ]]; then - echo "Skipped: $(basename "$entry") (fallback entry)" - continue - fi - - # Skip if splash it already present for some reason - if ! grep -q "splash" "$entry"; then - sudo sed -i '/^options/ s/$/ splash quiet/' "$entry" - else - echo "Skipped: $(basename "$entry") (splash already present)" - fi - fi - done - elif [ -f "/etc/default/grub" ]; then # Grub - echo "Detected grub" - - # Backup GRUB config before modifying - backup_timestamp=$(date +"%Y%m%d%H%M%S") - sudo cp /etc/default/grub "/etc/default/grub.bak.${backup_timestamp}" - - # Check if splash is already in GRUB_CMDLINE_LINUX_DEFAULT - if ! grep -q "GRUB_CMDLINE_LINUX_DEFAULT.*splash" /etc/default/grub; then - # Get current GRUB_CMDLINE_LINUX_DEFAULT value - current_cmdline=$(grep "^GRUB_CMDLINE_LINUX_DEFAULT=" /etc/default/grub | cut -d'"' -f2) - - # Add splash and quiet if not present - new_cmdline="$current_cmdline" - if [[ ! "$current_cmdline" =~ splash ]]; then - new_cmdline="$new_cmdline splash" - fi - if [[ ! "$current_cmdline" =~ quiet ]]; then - new_cmdline="$new_cmdline quiet" - fi - - # Trim any leading/trailing spaces - new_cmdline=$(echo "$new_cmdline" | xargs) - - sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=\".*\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$new_cmdline\"/" /etc/default/grub - - # Regenerate grub config - sudo grub-mkconfig -o /boot/grub/grub.cfg - else - echo "GRUB already configured with splash kernel parameters" - fi - elif [ -d "/etc/cmdline.d" ]; then # UKI - echo "Detected a UKI setup" - # Relying on mkinitcpio to assemble a UKI - # https://wiki.archlinux.org/title/Unified_kernel_image - if ! grep -q splash /etc/cmdline.d/*.conf; then - # Need splash, create the omarchy file - echo "splash" | sudo tee -a /etc/cmdline.d/omarchy.conf - fi - if ! grep -q quiet /etc/cmdline.d/*.conf; then - # Need quiet, create or append the omarchy file - echo "quiet" | sudo tee -a /etc/cmdline.d/omarchy.conf - fi - elif [ -f "/etc/kernel/cmdline" ]; then # UKI Alternate - # Alternate UKI kernel cmdline location - echo "Detected a UKI setup" - - # Backup kernel cmdline config before modifying - backup_timestamp=$(date +"%Y%m%d%H%M%S") - sudo cp /etc/kernel/cmdline "/etc/kernel/cmdline.bak.${backup_timestamp}" - - current_cmdline=$(cat /etc/kernel/cmdline) - - # Add splash and quiet if not present - new_cmdline="$current_cmdline" - if [[ ! "$current_cmdline" =~ splash ]]; then - new_cmdline="$new_cmdline splash" - fi - if [[ ! "$current_cmdline" =~ quiet ]]; then - new_cmdline="$new_cmdline quiet" - fi - - # Trim any leading/trailing spaces - new_cmdline=$(echo "$new_cmdline" | xargs) - - # Write new file - echo $new_cmdline | sudo tee /etc/kernel/cmdline - else - echo "" - echo " None of systemd-boot, GRUB, or UKI detected. Please manually add these kernel parameters:" - echo " - splash (to see the graphical splash screen)" - echo " - quiet (for silent boot)" - echo "" - fi -fi diff --git a/install/login/default-keyring.sh b/install/login/default-keyring.sh new file mode 100644 index 00000000..52c94301 --- /dev/null +++ b/install/login/default-keyring.sh @@ -0,0 +1,20 @@ +KEYRING_DIR="$HOME/.local/share/keyrings" +KEYRING_FILE="Default_keyring.keyring" +DEFAULT_FILE="default" + +cat << EOF | tee "$KEYRING_FILE" +[keyring] +display-name=Default keyring +ctime=$(date +%s) +mtime=0 +lock-on-idle=false +lock-after=false +EOF + +cat << EOF | tee "$DEFAULT_FILE" +Default_keyring +EOF + +chmod 700 "$KEYRING_DIR" +chmod 600 "$KEYRING_FILE" +chmod 644 "$DEFAULT_FILE" diff --git a/install/login/enable-mkinitcpio.sh b/install/login/enable-mkinitcpio.sh deleted file mode 100644 index 7422d8db..00000000 --- a/install/login/enable-mkinitcpio.sh +++ /dev/null @@ -1,18 +0,0 @@ -echo "Re-enabling mkinitcpio hooks..." - -# Restore the specific mkinitcpio pacman hooks -if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled ]; then - sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled /usr/share/libalpm/hooks/90-mkinitcpio-install.hook -fi - -if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled ]; then - sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook -fi - -echo "mkinitcpio hooks re-enabled" - -if command -v limine &>/dev/null; then - sudo limine-update -else - sudo mkinitcpio -P -fi diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh index 2d9dc292..6a037207 100644 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -1,4 +1,6 @@ if command -v limine &>/dev/null; then + sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook + sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf </dev/null HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) EOF @@ -34,6 +36,7 @@ KERNEL_CMDLINE[default]="$CMDLINE" KERNEL_CMDLINE[default]+="quiet splash" ENABLE_UKI=yes +CUSTOM_UKI_NAME="omarchy" ENABLE_LIMINE_FALLBACK=yes @@ -75,7 +78,6 @@ term_background_bright: 24283b EOF - sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook # Match Snapper configs if not installing from the ISO if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then @@ -96,13 +98,39 @@ EOF chrootable_systemctl_enable limine-snapper-sync.service fi -# Add UKI entry to UEFI machines to skip bootloader showing on normal boot -if [[ -n $EFI ]] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy && +echo "Re-enabling mkinitcpio hooks..." + +# Restore the specific mkinitcpio pacman hooks +if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled /usr/share/libalpm/hooks/90-mkinitcpio-install.hook +fi + +if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook +fi + +echo "mkinitcpio hooks re-enabled" + +sudo limine-update + +if [[ -n $EFI ]] && efibootmgr &>/dev/null; then + # Remove the archinstall-created Limine entry + while IFS= read -r bootnum; do + sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 + done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Arch Linux Limine" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') +fi + +if [[ -n $EFI ]] && efibootmgr &>/dev/null && ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "American Megatrends" && ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then - sudo efibootmgr --create \ - --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ - --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ - --label "Omarchy" \ - --loader "\\EFI\\Linux\\$(cat /etc/machine-id)_linux.efi" + + uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1) + + if [[ -n "$uki_file" ]]; then + sudo efibootmgr --create \ + --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ + --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ + --label "Omarchy" \ + --loader "\\EFI\\Linux\\$uki_file" + fi fi diff --git a/install/login/plymouth.sh b/install/login/plymouth.sh index 72102f27..fad64fe2 100644 --- a/install/login/plymouth.sh +++ b/install/login/plymouth.sh @@ -1,151 +1,4 @@ -# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security - -# ============================================================================== -# PLYMOUTH SETUP -# ============================================================================== - if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/ sudo plymouth-set-default-theme omarchy fi - -# ============================================================================== -# SEAMLESS LOGIN -# ============================================================================== - -if [ ! -x /usr/local/bin/seamless-login ]; then - # Compile the seamless login helper -- needed to prevent seeing terminal between loader and desktop - cat <<'CCODE' >/tmp/seamless-login.c -/* -* Seamless Login - Minimal SDDM-style Plymouth transition -* Replicates SDDM's VT management for seamless auto-login -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) { - int vt_fd; - int vt_num = 1; // TTY1 - char vt_path[32]; - - if (argc < 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); - return 1; - } - - // Open the VT (simple approach like SDDM) - snprintf(vt_path, sizeof(vt_path), "/dev/tty%d", vt_num); - vt_fd = open(vt_path, O_RDWR); - if (vt_fd < 0) { - perror("Failed to open VT"); - return 1; - } - - // Activate the VT - if (ioctl(vt_fd, VT_ACTIVATE, vt_num) < 0) { - perror("VT_ACTIVATE failed"); - close(vt_fd); - return 1; - } - - // Wait for VT to be active - if (ioctl(vt_fd, VT_WAITACTIVE, vt_num) < 0) { - perror("VT_WAITACTIVE failed"); - close(vt_fd); - return 1; - } - - // Critical: Set graphics mode to prevent console text - if (ioctl(vt_fd, KDSETMODE, KD_GRAPHICS) < 0) { - perror("KDSETMODE KD_GRAPHICS failed"); - close(vt_fd); - return 1; - } - - // Clear VT and close (like SDDM does) - const char *clear_seq = "\33[H\33[2J"; - if (write(vt_fd, clear_seq, strlen(clear_seq)) < 0) { - perror("Failed to clear VT"); - } - - close(vt_fd); - - // Set working directory to user's home - const char *home = getenv("HOME"); - if (home) chdir(home); - - // Now execute the session command - execvp(argv[1], &argv[1]); - perror("Failed to exec session"); - return 1; -} -CCODE - - gcc -o /tmp/seamless-login /tmp/seamless-login.c - sudo mv /tmp/seamless-login /usr/local/bin/seamless-login - sudo chmod +x /usr/local/bin/seamless-login - rm /tmp/seamless-login.c -fi - -if [ ! -f /etc/systemd/system/omarchy-seamless-login.service ]; then - cat </dev/null && abort "Fresh + Vanilla Arch" pacman -Qe plasma-desktop &>/dev/null && abort "Fresh + Vanilla Arch" +# Must have limine installed +command -v limine &>/dev/null || abort "Limine bootloader" + +# Must have btrfs root filesystem +[ "$(findmnt -n -o FSTYPE /)" = "btrfs" ] || abort "Btrfs root filesystem" + # Cleared all guards echo "Guards: OK" diff --git a/migrations/1758487660_change_dm_to_sddm.sh b/migrations/1758487660_change_dm_to_sddm.sh new file mode 100755 index 00000000..23d62447 --- /dev/null +++ b/migrations/1758487660_change_dm_to_sddm.sh @@ -0,0 +1,24 @@ +echo "Change display manager to SDDM" + +sudo pacman -S --needed --noconfirm sddm libsecret gnome-keyring + +sudo mkdir -p /etc/sddm.conf.d + +cat </dev/null && [[ -f /etc/default/limine ]]; then + if grep -q "^ENABLE_UKI=yes" /etc/default/limine; then + if ! grep -q "^CUSTOM_UKI_NAME=" /etc/default/limine; then + sudo sed -i '/^ENABLE_UKI=yes/a CUSTOM_UKI_NAME="omarchy"' /etc/default/limine + fi + + # Remove the archinstall-created Limine entry + while IFS= read -r bootnum; do + sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 + done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Arch Linux Limine" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') + + sudo limine-update + + uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1) + + if [[ -n "$uki_file" ]]; then + while IFS= read -r bootnum; do + sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 + done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Omarchy" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') + + # Skip EFI entry creation on Apple hardware + if ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then + sudo efibootmgr --create \ + --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ + --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ + --label "Omarchy" \ + --loader "\\EFI\\Linux\\$uki_file" + fi + fi + else + echo "Not using UKI. Not making any changes." + fi +else + echo "Boot config is non-standard. Not making any changes." +fi + From 5f2013a482ccfc7bd4151dff142e00ce90264733 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 21:09:56 +0200 Subject: [PATCH 35/47] Correct the path for asdcontrol on new installations --- install/config/sudoless-asdcontrol.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/config/sudoless-asdcontrol.sh b/install/config/sudoless-asdcontrol.sh index 120c6fc2..5ae03563 100644 --- a/install/config/sudoless-asdcontrol.sh +++ b/install/config/sudoless-asdcontrol.sh @@ -1,3 +1,3 @@ # Setup sudo-less controls for controlling brightness on Apple Displays -echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol +echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol sudo chmod 440 /etc/sudoers.d/asdcontrol From cab70bbe4fc9a5ddb89cc9a0193155885af4d12c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 21:10:13 +0200 Subject: [PATCH 36/47] Revert "Login and UKI updates (#1860)" This reverts commit f2021a95a4067d6d8a4395c860b78e723ee6ae88. --- bin/omarchy-install-vscode | 21 --- bin/omarchy-menu | 2 +- install/login/all.sh | 4 +- install/login/alt-bootloaders.sh | 115 +++++++++++++++ install/login/default-keyring.sh | 20 --- install/login/enable-mkinitcpio.sh | 18 +++ install/login/limine-snapper.sh | 44 ++---- install/login/plymouth.sh | 147 ++++++++++++++++++++ install/login/sddm.sh | 14 -- install/omarchy-base.packages | 2 - install/preflight/guard.sh | 6 - migrations/1758487660_change_dm_to_sddm.sh | 24 ---- migrations/1758487662_move_to_custom_uki.sh | 38 ----- 13 files changed, 291 insertions(+), 164 deletions(-) delete mode 100755 bin/omarchy-install-vscode create mode 100644 install/login/alt-bootloaders.sh delete mode 100644 install/login/default-keyring.sh create mode 100644 install/login/enable-mkinitcpio.sh delete mode 100644 install/login/sddm.sh delete mode 100755 migrations/1758487660_change_dm_to_sddm.sh delete mode 100644 migrations/1758487662_move_to_custom_uki.sh diff --git a/bin/omarchy-install-vscode b/bin/omarchy-install-vscode deleted file mode 100755 index 4a081c15..00000000 --- a/bin/omarchy-install-vscode +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -echo "Installing VSCode..." -omarchy-pkg-add visual-studio-code-bin - -mkdir -p ~/.vscode - -cat > ~/.vscode/argv.json << 'EOF' -// This configuration file allows you to pass permanent command line arguments to VS Code. -// Only a subset of arguments is currently supported to reduce the likelihood of breaking -// the installation. -// -// PLEASE DO NOT CHANGE WITHOUT UNDERSTANDING THE IMPACT -// -// NOTE: Changing this file requires a restart of VS Code. -{ - "password-store":"gnome-libsecret" -} -EOF - -setsid gtk-launch code diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 3c1f0055..e18c247b 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -260,7 +260,7 @@ show_install_service_menu() { show_install_editor_menu() { case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in - *VSCode*) present_terminal omarchy-install-vscode ;; + *VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; *Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; diff --git a/install/login/all.sh b/install/login/all.sh index 2c03df32..e4be282f 100644 --- a/install/login/all.sh +++ b/install/login/all.sh @@ -1,4 +1,4 @@ run_logged $OMARCHY_INSTALL/login/plymouth.sh -run_logged $OMARCHY_INSTALL/login/default-keyring.sh -run_logged $OMARCHY_INSTALL/login/sddm.sh run_logged $OMARCHY_INSTALL/login/limine-snapper.sh +run_logged $OMARCHY_INSTALL/login/enable-mkinitcpio.sh +run_logged $OMARCHY_INSTALL/login/alt-bootloaders.sh diff --git a/install/login/alt-bootloaders.sh b/install/login/alt-bootloaders.sh new file mode 100644 index 00000000..bb35d9b0 --- /dev/null +++ b/install/login/alt-bootloaders.sh @@ -0,0 +1,115 @@ +if ! command -v limine &>/dev/null; then + # Add kernel hooks + if ! grep -Eq '^HOOKS=.*plymouth' /etc/mkinitcpio.conf; then + # Backup original mkinitcpio.conf just in case + backup_timestamp=$(date +"%Y%m%d%H%M%S") + sudo cp /etc/mkinitcpio.conf "/etc/mkinitcpio.conf.bak.${backup_timestamp}" + + # Add plymouth to HOOKS array after 'base udev' or 'base systemd' + if grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base systemd"; then + sudo sed -i '/^HOOKS=/s/base systemd/base systemd plymouth/' /etc/mkinitcpio.conf + elif grep "^HOOKS=" /etc/mkinitcpio.conf | grep -q "base udev"; then + sudo sed -i '/^HOOKS=/s/base udev/base udev plymouth/' /etc/mkinitcpio.conf + else + echo "Couldn't add the Plymouth hook" + fi + + # Regenerate initramfs + sudo mkinitcpio -P + fi + + # Add kernel parameters for Plymouth + if [ -d "/boot/loader/entries" ]; then # systemd-boot + echo "Detected systemd-boot" + + for entry in /boot/loader/entries/*.conf; do + if [ -f "$entry" ]; then + # Skip fallback entries + if [[ "$(basename "$entry")" == *"fallback"* ]]; then + echo "Skipped: $(basename "$entry") (fallback entry)" + continue + fi + + # Skip if splash it already present for some reason + if ! grep -q "splash" "$entry"; then + sudo sed -i '/^options/ s/$/ splash quiet/' "$entry" + else + echo "Skipped: $(basename "$entry") (splash already present)" + fi + fi + done + elif [ -f "/etc/default/grub" ]; then # Grub + echo "Detected grub" + + # Backup GRUB config before modifying + backup_timestamp=$(date +"%Y%m%d%H%M%S") + sudo cp /etc/default/grub "/etc/default/grub.bak.${backup_timestamp}" + + # Check if splash is already in GRUB_CMDLINE_LINUX_DEFAULT + if ! grep -q "GRUB_CMDLINE_LINUX_DEFAULT.*splash" /etc/default/grub; then + # Get current GRUB_CMDLINE_LINUX_DEFAULT value + current_cmdline=$(grep "^GRUB_CMDLINE_LINUX_DEFAULT=" /etc/default/grub | cut -d'"' -f2) + + # Add splash and quiet if not present + new_cmdline="$current_cmdline" + if [[ ! "$current_cmdline" =~ splash ]]; then + new_cmdline="$new_cmdline splash" + fi + if [[ ! "$current_cmdline" =~ quiet ]]; then + new_cmdline="$new_cmdline quiet" + fi + + # Trim any leading/trailing spaces + new_cmdline=$(echo "$new_cmdline" | xargs) + + sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=\".*\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$new_cmdline\"/" /etc/default/grub + + # Regenerate grub config + sudo grub-mkconfig -o /boot/grub/grub.cfg + else + echo "GRUB already configured with splash kernel parameters" + fi + elif [ -d "/etc/cmdline.d" ]; then # UKI + echo "Detected a UKI setup" + # Relying on mkinitcpio to assemble a UKI + # https://wiki.archlinux.org/title/Unified_kernel_image + if ! grep -q splash /etc/cmdline.d/*.conf; then + # Need splash, create the omarchy file + echo "splash" | sudo tee -a /etc/cmdline.d/omarchy.conf + fi + if ! grep -q quiet /etc/cmdline.d/*.conf; then + # Need quiet, create or append the omarchy file + echo "quiet" | sudo tee -a /etc/cmdline.d/omarchy.conf + fi + elif [ -f "/etc/kernel/cmdline" ]; then # UKI Alternate + # Alternate UKI kernel cmdline location + echo "Detected a UKI setup" + + # Backup kernel cmdline config before modifying + backup_timestamp=$(date +"%Y%m%d%H%M%S") + sudo cp /etc/kernel/cmdline "/etc/kernel/cmdline.bak.${backup_timestamp}" + + current_cmdline=$(cat /etc/kernel/cmdline) + + # Add splash and quiet if not present + new_cmdline="$current_cmdline" + if [[ ! "$current_cmdline" =~ splash ]]; then + new_cmdline="$new_cmdline splash" + fi + if [[ ! "$current_cmdline" =~ quiet ]]; then + new_cmdline="$new_cmdline quiet" + fi + + # Trim any leading/trailing spaces + new_cmdline=$(echo "$new_cmdline" | xargs) + + # Write new file + echo $new_cmdline | sudo tee /etc/kernel/cmdline + else + echo "" + echo " None of systemd-boot, GRUB, or UKI detected. Please manually add these kernel parameters:" + echo " - splash (to see the graphical splash screen)" + echo " - quiet (for silent boot)" + echo "" + fi +fi diff --git a/install/login/default-keyring.sh b/install/login/default-keyring.sh deleted file mode 100644 index 52c94301..00000000 --- a/install/login/default-keyring.sh +++ /dev/null @@ -1,20 +0,0 @@ -KEYRING_DIR="$HOME/.local/share/keyrings" -KEYRING_FILE="Default_keyring.keyring" -DEFAULT_FILE="default" - -cat << EOF | tee "$KEYRING_FILE" -[keyring] -display-name=Default keyring -ctime=$(date +%s) -mtime=0 -lock-on-idle=false -lock-after=false -EOF - -cat << EOF | tee "$DEFAULT_FILE" -Default_keyring -EOF - -chmod 700 "$KEYRING_DIR" -chmod 600 "$KEYRING_FILE" -chmod 644 "$DEFAULT_FILE" diff --git a/install/login/enable-mkinitcpio.sh b/install/login/enable-mkinitcpio.sh new file mode 100644 index 00000000..7422d8db --- /dev/null +++ b/install/login/enable-mkinitcpio.sh @@ -0,0 +1,18 @@ +echo "Re-enabling mkinitcpio hooks..." + +# Restore the specific mkinitcpio pacman hooks +if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled /usr/share/libalpm/hooks/90-mkinitcpio-install.hook +fi + +if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook +fi + +echo "mkinitcpio hooks re-enabled" + +if command -v limine &>/dev/null; then + sudo limine-update +else + sudo mkinitcpio -P +fi diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh index 6a037207..2d9dc292 100644 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -1,6 +1,4 @@ if command -v limine &>/dev/null; then - sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook - sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf </dev/null HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) EOF @@ -36,7 +34,6 @@ KERNEL_CMDLINE[default]="$CMDLINE" KERNEL_CMDLINE[default]+="quiet splash" ENABLE_UKI=yes -CUSTOM_UKI_NAME="omarchy" ENABLE_LIMINE_FALLBACK=yes @@ -78,6 +75,7 @@ term_background_bright: 24283b EOF + sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook # Match Snapper configs if not installing from the ISO if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then @@ -98,39 +96,13 @@ EOF chrootable_systemctl_enable limine-snapper-sync.service fi -echo "Re-enabling mkinitcpio hooks..." - -# Restore the specific mkinitcpio pacman hooks -if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled ]; then - sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled /usr/share/libalpm/hooks/90-mkinitcpio-install.hook -fi - -if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled ]; then - sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook -fi - -echo "mkinitcpio hooks re-enabled" - -sudo limine-update - -if [[ -n $EFI ]] && efibootmgr &>/dev/null; then - # Remove the archinstall-created Limine entry - while IFS= read -r bootnum; do - sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 - done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Arch Linux Limine" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') -fi - -if [[ -n $EFI ]] && efibootmgr &>/dev/null && +# Add UKI entry to UEFI machines to skip bootloader showing on normal boot +if [[ -n $EFI ]] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy && ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "American Megatrends" && ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then - - uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1) - - if [[ -n "$uki_file" ]]; then - sudo efibootmgr --create \ - --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ - --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ - --label "Omarchy" \ - --loader "\\EFI\\Linux\\$uki_file" - fi + sudo efibootmgr --create \ + --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ + --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ + --label "Omarchy" \ + --loader "\\EFI\\Linux\\$(cat /etc/machine-id)_linux.efi" fi diff --git a/install/login/plymouth.sh b/install/login/plymouth.sh index fad64fe2..72102f27 100644 --- a/install/login/plymouth.sh +++ b/install/login/plymouth.sh @@ -1,4 +1,151 @@ +# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security + +# ============================================================================== +# PLYMOUTH SETUP +# ============================================================================== + if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/ sudo plymouth-set-default-theme omarchy fi + +# ============================================================================== +# SEAMLESS LOGIN +# ============================================================================== + +if [ ! -x /usr/local/bin/seamless-login ]; then + # Compile the seamless login helper -- needed to prevent seeing terminal between loader and desktop + cat <<'CCODE' >/tmp/seamless-login.c +/* +* Seamless Login - Minimal SDDM-style Plymouth transition +* Replicates SDDM's VT management for seamless auto-login +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int vt_fd; + int vt_num = 1; // TTY1 + char vt_path[32]; + + if (argc < 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + // Open the VT (simple approach like SDDM) + snprintf(vt_path, sizeof(vt_path), "/dev/tty%d", vt_num); + vt_fd = open(vt_path, O_RDWR); + if (vt_fd < 0) { + perror("Failed to open VT"); + return 1; + } + + // Activate the VT + if (ioctl(vt_fd, VT_ACTIVATE, vt_num) < 0) { + perror("VT_ACTIVATE failed"); + close(vt_fd); + return 1; + } + + // Wait for VT to be active + if (ioctl(vt_fd, VT_WAITACTIVE, vt_num) < 0) { + perror("VT_WAITACTIVE failed"); + close(vt_fd); + return 1; + } + + // Critical: Set graphics mode to prevent console text + if (ioctl(vt_fd, KDSETMODE, KD_GRAPHICS) < 0) { + perror("KDSETMODE KD_GRAPHICS failed"); + close(vt_fd); + return 1; + } + + // Clear VT and close (like SDDM does) + const char *clear_seq = "\33[H\33[2J"; + if (write(vt_fd, clear_seq, strlen(clear_seq)) < 0) { + perror("Failed to clear VT"); + } + + close(vt_fd); + + // Set working directory to user's home + const char *home = getenv("HOME"); + if (home) chdir(home); + + // Now execute the session command + execvp(argv[1], &argv[1]); + perror("Failed to exec session"); + return 1; +} +CCODE + + gcc -o /tmp/seamless-login /tmp/seamless-login.c + sudo mv /tmp/seamless-login /usr/local/bin/seamless-login + sudo chmod +x /usr/local/bin/seamless-login + rm /tmp/seamless-login.c +fi + +if [ ! -f /etc/systemd/system/omarchy-seamless-login.service ]; then + cat </dev/null && abort "Fresh + Vanilla Arch" pacman -Qe plasma-desktop &>/dev/null && abort "Fresh + Vanilla Arch" -# Must have limine installed -command -v limine &>/dev/null || abort "Limine bootloader" - -# Must have btrfs root filesystem -[ "$(findmnt -n -o FSTYPE /)" = "btrfs" ] || abort "Btrfs root filesystem" - # Cleared all guards echo "Guards: OK" diff --git a/migrations/1758487660_change_dm_to_sddm.sh b/migrations/1758487660_change_dm_to_sddm.sh deleted file mode 100755 index 23d62447..00000000 --- a/migrations/1758487660_change_dm_to_sddm.sh +++ /dev/null @@ -1,24 +0,0 @@ -echo "Change display manager to SDDM" - -sudo pacman -S --needed --noconfirm sddm libsecret gnome-keyring - -sudo mkdir -p /etc/sddm.conf.d - -cat </dev/null && [[ -f /etc/default/limine ]]; then - if grep -q "^ENABLE_UKI=yes" /etc/default/limine; then - if ! grep -q "^CUSTOM_UKI_NAME=" /etc/default/limine; then - sudo sed -i '/^ENABLE_UKI=yes/a CUSTOM_UKI_NAME="omarchy"' /etc/default/limine - fi - - # Remove the archinstall-created Limine entry - while IFS= read -r bootnum; do - sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 - done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Arch Linux Limine" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') - - sudo limine-update - - uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1) - - if [[ -n "$uki_file" ]]; then - while IFS= read -r bootnum; do - sudo efibootmgr -b "$bootnum" -B >/dev/null 2>&1 - done < <(efibootmgr | grep -E "^Boot[0-9]{4}\*? Omarchy" | sed 's/^Boot\([0-9]\{4\}\).*/\1/') - - # Skip EFI entry creation on Apple hardware - if ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then - sudo efibootmgr --create \ - --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ - --part "$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]*$' | sed 's/^p//')" \ - --label "Omarchy" \ - --loader "\\EFI\\Linux\\$uki_file" - fi - fi - else - echo "Not using UKI. Not making any changes." - fi -else - echo "Boot config is non-standard. Not making any changes." -fi - From 3cb52c0b38f3cc2c60906acf7825b2dd8a2370ea Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 21:18:34 +0200 Subject: [PATCH 37/47] Correct bad path for sudoless Apple Display controls --- migrations/1759691413.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 migrations/1759691413.sh diff --git a/migrations/1759691413.sh b/migrations/1759691413.sh new file mode 100644 index 00000000..37fefa7c --- /dev/null +++ b/migrations/1759691413.sh @@ -0,0 +1,5 @@ +echo "Correct path for sudoless asdcontrol for working Apple Display hotkeys" + +if [[ $(command -v asdcontrol) == "/usr/bin/asdcontrol" ]]; then + echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol +fi From d4fddd7c755adf06208704d9bbfee384c6913c2d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 21:19:27 +0200 Subject: [PATCH 38/47] Interesting idea, but then we should do it across everything And update omarchy-dev-add-migration --- migrations/{1758564460_enable_fast_shutdown.sh => 1758564460.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename migrations/{1758564460_enable_fast_shutdown.sh => 1758564460.sh} (100%) diff --git a/migrations/1758564460_enable_fast_shutdown.sh b/migrations/1758564460.sh similarity index 100% rename from migrations/1758564460_enable_fast_shutdown.sh rename to migrations/1758564460.sh From bb4df39bbd2a4f270f6b61f3b37c162d83df2995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Gr=C3=BCndel?= Date: Sun, 5 Oct 2025 21:36:49 +0200 Subject: [PATCH 39/47] Remove background process from walker service in autostart configuration (#2235) --- default/hypr/autostart.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index 5c2f60b1..f646aac5 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -4,7 +4,7 @@ exec-once = uwsm app -- waybar exec-once = uwsm app -- fcitx5 exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill exec-once = uwsm app -- swayosd-server -exec-once = uwsm app -- walker --gapplication-service & +exec-once = uwsm app -- walker --gapplication-service exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+' exec-once = omarchy-cmd-first-run From 479f20d294726270484120179675fcd4e711a7b2 Mon Sep 17 00:00:00 2001 From: CHINMOY SAIKIA <120454422+AlwaysRead@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:10:31 +0530 Subject: [PATCH 40/47] Fix Neovim .desktop file to open files from GUI file manager (#2233) * Fix comment * Update Exec command to use shell execution for Nvim Fix Neovim .desktop file to allow opening files from GUI file manager. * Add migration --------- Co-authored-by: David Heinemeier Hansson --- applications/nvim.desktop | 2 +- default/hypr/apps/steam.conf | 2 +- migrations/1759693134.sh | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 migrations/1759693134.sh diff --git a/applications/nvim.desktop b/applications/nvim.desktop index ed118590..b064c32e 100644 --- a/applications/nvim.desktop +++ b/applications/nvim.desktop @@ -2,7 +2,7 @@ Name=Neovim GenericName=Text Editor Comment=Edit text files -Exec=$TERMINAL --class=nvim --title=nvim -e nvim -- %F +Exec=sh -c "$TERMINAL --class=nvim --title=nvim -e nvim -- %F" Terminal=false Type=Application Keywords=Text;editor; diff --git a/default/hypr/apps/steam.conf b/default/hypr/apps/steam.conf index bd6386cc..77d8a4bc 100644 --- a/default/hypr/apps/steam.conf +++ b/default/hypr/apps/steam.conf @@ -1,4 +1,4 @@ -# Float Steam, fullscreen RetroArch +# Float Steam windowrule = float, class:steam windowrule = center, class:steam, title:Steam windowrule = opacity 1 1, class:steam diff --git a/migrations/1759693134.sh b/migrations/1759693134.sh new file mode 100644 index 00000000..015fd8e0 --- /dev/null +++ b/migrations/1759693134.sh @@ -0,0 +1,3 @@ +echo "Fix opening in nvim from files manager" + +cp -f $OMARCHY_PATH/applications/nvim.desktop ~/.local/share/applications/nvim.desktop From 9c24150e69ff34d30d1acd1c971a919cc91d8910 Mon Sep 17 00:00:00 2001 From: Pastilhas Date: Sun, 5 Oct 2025 20:46:23 +0100 Subject: [PATCH 41/47] added gnome-disk-utility to base-packages (#2230) * Fix comment * added gnome-disk-utility next to nautilus in install/omarchy-base-packages --------- Co-authored-by: David Heinemeier Hansson --- install/omarchy-base.packages | 1 + 1 file changed, 1 insertion(+) diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index 7d408e22..e555db9b 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -68,6 +68,7 @@ mariadb-libs mise mpv nautilus +gnome-disk-utility noto-fonts noto-fonts-cjk noto-fonts-emoji From 164fc5ceb1c8daa9c9d160c745735003a17831f6 Mon Sep 17 00:00:00 2001 From: Gustave Denis <157362633+gustavedenis@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:47:27 +0200 Subject: [PATCH 42/47] =?UTF-8?q?fix(eza):=20added=20correct=20light=20the?= =?UTF-8?q?me=20for=20ros=C3=A9=20pine=20(#2214)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit correct light theme for rosé pine is rose-pine-dawn Co-authored-by: Gustave Denis --- themes/rose-pine/eza.yml | 192 +++++++++++++++++++-------------------- 1 file changed, 95 insertions(+), 97 deletions(-) diff --git a/themes/rose-pine/eza.yml b/themes/rose-pine/eza.yml index cc65ef0e..6597cb01 100644 --- a/themes/rose-pine/eza.yml +++ b/themes/rose-pine/eza.yml @@ -1,123 +1,121 @@ -# see https://github.com/eza-community/eza-themes/blob/main/themes/rose-pine.yml +# see https://github.com/eza-community/eza-themes/blob/main/themes/rose-pine-dawn.yml colourful: true # Colors are in format of: # color/paletteRef (Description) #color code -# Gold (Terminal Yellow) #f6c177 -# Love (Terminal Red) #eb6f92 -# Rose (Terminal Cyan) #ebbcba -# Base (Primary Background) #191724 -# Iris (Terminal Magenta) #c4a7e7 -# Foam (Terminal Blue) #9ccfd8 -# Pine (Terminal Green) #31748f -# Muted (Low Contrast Foreground) #6e6a86 -# Surface (Secondary Background Atop Base) #1f1d2e -# Overlay (Tertiary Background Atop Surface) #26233a -# Subtle (Medium Contrast Foreground) #908caa -# Text (High Contrast Foreground) #e0def4 -# Highlight Low (Low Contrast Highlight) #21202e -# Highlight Med (Medium Contrast Highlight) #403d52 -# Highlight High (High Contrast Highlight) #524f67 +# Gold (Terminal Yellow) #ea9d34 +# Love (Terminal Red) #b4637a +# Rose (Terminal Cyan) #d7827e +# Base (Primary Background) #faf4ed +# Iris (Terminal Magenta) #907aa9 +# Foam (Terminal Blue) #56949f +# Pine (Terminal Green) #286983 +# Text (High contrast foreground) #575279 +# Muted (Low Contrast Foreground) #9893a5 +# Subtle (Medium Contrast Foreground) #797593 +# Highlight Low (Low contrast highlight) #f4ede8 +# Highlight Med (Medium Contrast Highlight) #dfdad9 +# Highlight High (High Contrast Highlight) #cecacd filekinds: - normal: {foreground: "#e0def4"} - directory: {foreground: "#9ccfd8"} - symlink: {foreground: "#524f67"} - pipe: {foreground: "#908caa"} - block_device: {foreground: "#ebbcba"} - char_device: {foreground: "#f6c177"} - socket: {foreground: "#21202e"} - special: {foreground: "#c4a7e7"} - executable: {foreground: "#c4a7e7"} - mount_point: {foreground: "#403d52"} + normal: { foreground: "#575279" } + directory: { foreground: "#56949f" } + symlink: { foreground: "#cecacd" } + pipe: { foreground: "#797593" } + block_device: { foreground: "#d7827e" } + char_device: { foreground: "#ea9d34" } + socket: { foreground: "#f4ede8" } + special: { foreground: "#907aa9" } + executable: { foreground: "#907aa9" } + mount_point: { foreground: "#dfdad9" } perms: - user_read: {foreground: "#908caa"} - user_write: {foreground: "#403d52"} - user_execute_file: {foreground: "#c4a7e7"} - user_execute_other: {foreground: "#c4a7e7"} - group_read: {foreground: "#908caa"} - group_write: {foreground: "#403d52"} - group_execute: {foreground: "#c4a7e7"} - other_read: {foreground: "#908caa"} - other_write: {foreground: "#403d52"} - other_execute: {foreground: "#c4a7e7"} - special_user_file: {foreground: "#c4a7e7"} - special_other: {foreground: "#403d52"} - attribute: {foreground: "#908caa"} + user_read: { foreground: "#797593" } + user_write: { foreground: "#d7827e" } + user_execute_file: { foreground: "#907aa9" } + user_execute_other: { foreground: "#907aa9" } + group_read: { foreground: "#797593" } + group_write: { foreground: "#d7827e" } + group_execute: { foreground: "#907aa9" } + other_read: { foreground: "#797593" } + other_write: { foreground: "#d7827e" } + other_execute: { foreground: "#907aa9" } + special_user_file: { foreground: "#907aa9" } + special_other: { foreground: "#d7827e" } + attribute: { foreground: "#797593" } size: - major: {foreground: "#908caa"} - minor: {foreground: "#9ccfd8"} - number_byte: {foreground: "#908caa"} - number_kilo: {foreground: "#524f67"} - number_mega: {foreground: "#31748f"} - number_giga: {foreground: "#c4a7e7"} - number_huge: {foreground: "#c4a7e7"} - unit_byte: {foreground: "#908caa"} - unit_kilo: {foreground: "#31748f"} - unit_mega: {foreground: "#c4a7e7"} - unit_giga: {foreground: "#c4a7e7"} - unit_huge: {foreground: "#9ccfd8"} + major: { foreground: "#797593" } + minor: { foreground: "#56949f" } + number_byte: { foreground: "#797593" } + number_kilo: { foreground: "#cecacd" } + number_mega: { foreground: "#286983" } + number_giga: { foreground: "#907aa9" } + number_huge: { foreground: "#907aa9" } + unit_byte: { foreground: "#797593" } + unit_kilo: { foreground: "#286983" } + unit_mega: { foreground: "#907aa9" } + unit_giga: { foreground: "#907aa9" } + unit_huge: { foreground: "#56949f" } users: - user_you: {foreground: "#f6c177"} - user_root: {foreground: "#eb6f92"} - user_other: {foreground: "#c4a7e7"} - group_yours: {foreground: "#524f67"} - group_other: {foreground: "#6e6a86"} - group_root: {foreground: "#eb6f92"} + user_you: { foreground: "#ea9d34" } + user_root: { foreground: "#b4637a" } + user_other: { foreground: "#907aa9" } + group_yours: { foreground: "#cecacd" } + group_other: { foreground: "#9893a5" } + group_root: { foreground: "#b4637a" } links: - normal: {foreground: "#9ccfd8"} - multi_link_file: {foreground: "#31748f"} + normal: { foreground: "#56949f" } + multi_link_file: { foreground: "#286983" } git: - new: {foreground: "#9ccfd8"} - modified: {foreground: "#f6c177"} - deleted: {foreground: "#eb6f92"} - renamed: {foreground: "#31748f"} - typechange: {foreground: "#c4a7e7"} - ignored: {foreground: "#6e6a86"} - conflicted: {foreground: "#ebbcba"} + new: { foreground: "#56949f" } + modified: { foreground: "#ea9d34" } + deleted: { foreground: "#b4637a" } + renamed: { foreground: "#286983" } + typechange: { foreground: "#907aa9" } + ignored: { foreground: "#9893a5" } + conflicted: { foreground: "#d7827e" } git_repo: - branch_main: {foreground: "#908caa"} - branch_other: {foreground: "#c4a7e7"} - git_clean: {foreground: "#9ccfd8"} - git_dirty: {foreground: "#eb6f92"} + branch_main: { foreground: "#797593" } + branch_other: { foreground: "#907aa9" } + git_clean: { foreground: "#56949f" } + git_dirty: { foreground: "#b4637a" } security_context: - colon: {foreground: "#908caa"} - user: {foreground: "#9ccfd8"} - role: {foreground: "#c4a7e7"} - typ: {foreground: "#6e6a86"} - range: {foreground: "#c4a7e7"} + colon: { foreground: "#797593" } + user: { foreground: "#56949f" } + role: { foreground: "#907aa9" } + typ: { foreground: "#9893a5" } + range: { foreground: "#907aa9" } file_type: - image: {foreground: "#f6c177"} - video: {foreground: "#eb6f92"} - music: {foreground: "#9ccfd8"} - lossless: {foreground: "#6e6a86"} - crypto: {foreground: "#403d52"} - document: {foreground: "#908caa"} - compressed: {foreground: "#c4a7e7"} - temp: {foreground: "#ebbcba"} - compiled: {foreground: "#31748f"} - build: {foreground: "#6e6a86"} - source: {foreground: "#ebbcba"} + image: { foreground: "#ea9d34" } + video: { foreground: "#b4637a" } + music: { foreground: "#56949f" } + lossless: { foreground: "#9893a5" } + crypto: { foreground: "#dfdad9" } + document: { foreground: "#797593" } + compressed: { foreground: "#907aa9" } + temp: { foreground: "#d7827e" } + compiled: { foreground: "#286983" } + build: { foreground: "#9893a5" } + source: { foreground: "#d7827e" } -punctuation: {foreground: "#524f67"} -date: {foreground: "#31748f"} -inode: {foreground: "#908caa"} -blocks: {foreground: "#6e6a86"} -header: {foreground: "#908caa"} -octal: {foreground: "#9ccfd8"} -flags: {foreground: "#c4a7e7"} +punctuation: { foreground: "#cecacd" } +date: { foreground: "#286983" } +inode: { foreground: "#797593" } +blocks: { foreground: "#9893a5" } +header: { foreground: "#797593" } +octal: { foreground: "#56949f" } +flags: { foreground: "#907aa9" } -symlink_path: {foreground: "#9ccfd8"} -control_char: {foreground: "#31748f"} -broken_symlink: {foreground: "#eb6f92"} -broken_path_overlay: {foreground: "#524f67"} +symlink_path: { foreground: "#56949f" } +control_char: { foreground: "#286983" } +broken_symlink: { foreground: "#b4637a" } +broken_path_overlay: { foreground: "#cecacd" } From 443173e29d3bdde17f0455c5fcd914a9dedae3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Gr=C3=BCndel?= Date: Sun, 5 Oct 2025 21:54:36 +0200 Subject: [PATCH 43/47] Hide electron36 and electron37 from walker menu (#2183) * Hide electron36 and electron37 from walker menu * Add migration scriptt * Simplify migration --------- Co-authored-by: David Heinemeier Hansson --- applications/hidden/electron36.desktop | 2 ++ applications/hidden/electron37.desktop | 2 ++ migrations/1759093827.sh | 3 +++ 3 files changed, 7 insertions(+) create mode 100644 applications/hidden/electron36.desktop create mode 100644 applications/hidden/electron37.desktop create mode 100644 migrations/1759093827.sh diff --git a/applications/hidden/electron36.desktop b/applications/hidden/electron36.desktop new file mode 100644 index 00000000..e1e3e173 --- /dev/null +++ b/applications/hidden/electron36.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/applications/hidden/electron37.desktop b/applications/hidden/electron37.desktop new file mode 100644 index 00000000..e1e3e173 --- /dev/null +++ b/applications/hidden/electron37.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/migrations/1759093827.sh b/migrations/1759093827.sh new file mode 100644 index 00000000..69cf8963 --- /dev/null +++ b/migrations/1759093827.sh @@ -0,0 +1,3 @@ +echo "Adding hidden entries for electron apps" + +cp $OMARCHY_PATH/applications/hidden/electron*.desktop ~/.local/share/applications/ From ea7d98e6b746712bc2e2aa6c6577550c3b6ac315 Mon Sep 17 00:00:00 2001 From: IngridMorstrad Date: Sun, 5 Oct 2025 12:56:03 -0700 Subject: [PATCH 44/47] Fix typo in comments in input.conf (#2180) * Fix comment * Fix typo in comments in input.conf --------- Co-authored-by: David Heinemeier Hansson --- config/hypr/input.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hypr/input.conf b/config/hypr/input.conf index 8a09359f..6bbee49b 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -12,7 +12,7 @@ input { # Start with numlock on by default numlock_by_default = true - # Increase sensitity for mouse/trackpack (default: 0) + # Increase sensitivity for mouse/trackpad (default: 0) # sensitivity = 0.35 touchpad { From 2316c2f365f75ab2b773569341ceb1365f8bac63 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 5 Oct 2025 21:59:39 +0200 Subject: [PATCH 45/47] Hide OpenJDK apps from app launcher --- applications/hidden/java-java-openjdk.desktop | 2 ++ applications/hidden/jconsole-java-openjdk.desktop | 2 ++ applications/hidden/jshell-java-openjdk.desktop | 2 ++ migrations/1759694076.sh | 4 ++++ 4 files changed, 10 insertions(+) create mode 100644 applications/hidden/java-java-openjdk.desktop create mode 100644 applications/hidden/jconsole-java-openjdk.desktop create mode 100644 applications/hidden/jshell-java-openjdk.desktop create mode 100644 migrations/1759694076.sh diff --git a/applications/hidden/java-java-openjdk.desktop b/applications/hidden/java-java-openjdk.desktop new file mode 100644 index 00000000..e1e3e173 --- /dev/null +++ b/applications/hidden/java-java-openjdk.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/applications/hidden/jconsole-java-openjdk.desktop b/applications/hidden/jconsole-java-openjdk.desktop new file mode 100644 index 00000000..e1e3e173 --- /dev/null +++ b/applications/hidden/jconsole-java-openjdk.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/applications/hidden/jshell-java-openjdk.desktop b/applications/hidden/jshell-java-openjdk.desktop new file mode 100644 index 00000000..e1e3e173 --- /dev/null +++ b/applications/hidden/jshell-java-openjdk.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true diff --git a/migrations/1759694076.sh b/migrations/1759694076.sh new file mode 100644 index 00000000..084d8e2b --- /dev/null +++ b/migrations/1759694076.sh @@ -0,0 +1,4 @@ +echo "Hide OpenJDK applications from app launcher" + +cp $OMARCHY_PATH/applications/hidden/*openjdk.desktop ~/.local/share/applications/ + From 5da10be63e91f2a36c8826cc224d1c5865b4e3dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Wn=C4=99trzak?= Date: Sun, 5 Oct 2025 22:02:22 +0200 Subject: [PATCH 46/47] Adjust database installation message to only one (#2192) * Fix comment * Adjust database installation message to only one Follow up to https://github.com/basecamp/omarchy/commit/e260d28f43d40de5f816a556b71ba479de74b728 --------- Co-authored-by: David Heinemeier Hansson --- bin/omarchy-install-docker-dbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-install-docker-dbs b/bin/omarchy-install-docker-dbs index f7b624ad..112af1e2 100755 --- a/bin/omarchy-install-docker-dbs +++ b/bin/omarchy-install-docker-dbs @@ -3,7 +3,7 @@ options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB") if [[ "$#" -eq 0 ]]; then - choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select databases (space to select, return to install, esc to cancel)") || main_menu + choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu else choices="$@" fi From 5aa39c926183b9371bfc738d50c00632a61c018e Mon Sep 17 00:00:00 2001 From: killeik <69602482+killeik@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:13:16 +0300 Subject: [PATCH 47/47] Simple check to prevent secure boot issues (#2145) --- install/preflight/guard.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/preflight/guard.sh b/install/preflight/guard.sh index 60a6c873..3ea3d68f 100644 --- a/install/preflight/guard.sh +++ b/install/preflight/guard.sh @@ -18,6 +18,9 @@ done # Must be x86 only to fully work [ "$(uname -m)" != "x86_64" ] && abort "x86_64 CPU" +# Must have secure boot disabled +bootctl status 2>/dev/null | grep -q 'Secure Boot: disabled' || abort "Secure Boot disabled" + # Must not have Gnome or KDE already install pacman -Qe gnome-shell &>/dev/null && abort "Fresh + Vanilla Arch" pacman -Qe plasma-desktop &>/dev/null && abort "Fresh + Vanilla Arch"