Compare commits

..
Author SHA1 Message Date
David Heinemeier HanssonandGitHub 236a34b23c Merge pull request #5280 from basecamp/rc
Omarchy 3.5.1
2026-04-16 16:12:03 +02:00
David Heinemeier Hansson 2c4b4488c0 Merge branch 'dev' into rc 2026-04-16 16:03:49 +02:00
David Heinemeier Hansson 8f7d64ba78 Merge branch 'dev' into rc 2026-04-16 15:34:24 +02:00
David Heinemeier Hansson 9ece3318ec Merge branch 'dev' into rc 2026-04-16 15:24:11 +02:00
David Heinemeier Hansson d51a3f6b37 Merge branch 'dev' into rc 2026-04-15 18:16:27 +02:00
David Heinemeier Hansson cdb8628502 Merge branch 'dev' into rc 2026-04-15 16:21:03 +02:00
David Heinemeier Hansson b919a5541a Merge branch 'dev' into rc 2026-04-15 16:17:19 +02:00
David Heinemeier Hansson 4ee44c36a6 Merge branch 'dev' into rc 2026-04-15 15:55:55 +02:00
David Heinemeier Hansson d71ddf022a Merge branch 'dev' into rc 2026-04-15 15:02:11 +02:00
David Heinemeier Hansson cd511f77b9 Merge branch 'dev' into rc 2026-04-15 14:36:44 +02:00
David Heinemeier Hansson e6b105d0b2 Merge branch 'dev' into rc 2026-04-15 13:52:05 +02:00
David Heinemeier Hansson 2554fe8555 Merge branch 'dev' into rc 2026-04-15 12:34:23 +02:00
David Heinemeier Hansson feda8b7231 Merge branch 'dev' into rc 2026-04-15 12:11:18 +02:00
David Heinemeier Hansson 46eb5568d9 Merge branch 'dev' into rc 2026-04-15 11:56:00 +02:00
David Heinemeier Hansson 33c92f554b Merge branch 'dev' into rc 2026-04-15 11:49:29 +02:00
David Heinemeier Hansson 997011e985 Merge branch 'dev' into rc 2026-04-13 16:00:11 -07:00
David Heinemeier Hansson 0e126b7916 Merge branch 'dev' into rc 2026-04-13 15:59:23 -07:00
David Heinemeier Hansson f81b3c842d Merge branch 'dev' into rc 2026-04-11 20:48:42 -04:00
David Heinemeier Hansson ecbd912b09 Merge branch 'dev' into rc 2026-04-11 18:02:01 -04:00
David Heinemeier HanssonandGitHub 76d09b29b7 Merge pull request #5192 from basecamp/rc
Omarchy 3.5.0
2026-04-03 19:16:29 +02:00
David Heinemeier Hansson f18dfdd101 Merge branch 'dev' into rc 2026-04-03 11:36:14 +02:00
David Heinemeier Hansson e4757abb80 Merge branch 'dev' into rc 2026-04-03 10:57:18 +02:00
David Heinemeier Hansson fc1cb1a751 Merge branch 'dev' into rc 2026-04-02 18:06:32 +02:00
David Heinemeier Hansson 50d3579d66 Don't use the names here since they break the all-themes setup in omarchy-nvim 2026-04-02 18:04:55 +02:00
David Heinemeier Hansson b72a831bf5 Merge branch 'dev' into rc 2026-04-02 17:39:10 +02:00
David Heinemeier Hansson e2b6b5ed5a Merge branch 'dev' into rc 2026-04-02 17:23:41 +02:00
David Heinemeier Hansson e5bcec53d1 Merge branch 'dev' into rc 2026-04-02 16:07:23 +02:00
David Heinemeier Hansson 1b07638732 Merge branch 'dev' into rc 2026-04-02 16:06:29 +02:00
David Heinemeier Hansson 4a3355e767 Merge branch 'dev' into rc 2026-04-01 18:16:31 +02:00
David Heinemeier Hansson 3b8ab81781 Merge branch 'dev' into rc 2026-03-08 18:29:04 +01:00
David Heinemeier Hansson da0bb37a19 Merge branch 'dev' into rc 2026-03-08 17:54:04 +01:00
158 changed files with 323 additions and 1151 deletions
-2
View File
@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true
+8 -4
View File
@@ -2,11 +2,15 @@
# Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
focused_monitor=$(omarchy-hyprland-monitor-focused)
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(echo "$sinks" | jq '. | length')
if (( sinks_count == 0 )); then
omarchy-swayosd-client --custom-message "No audio devices found"
swayosd-client \
--monitor "$focused_monitor" \
--custom-message "No audio devices found"
exit 1
fi
@@ -53,10 +57,10 @@ fi
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
if [[ $next_sink_name != $current_sink_name ]]; then
next_sink_wpid=$(echo "$next_sink" | jq -r '.properties."object.id"')
wpctl set-default "$next_sink_wpid"
pactl set-default-sink "$next_sink_name"
fi
omarchy-swayosd-client \
swayosd-client \
--monitor "$focused_monitor" \
--custom-message "$next_sink_description" \
--custom-icon "$next_sink_volume_icon"
-1
View File
@@ -10,7 +10,6 @@ if [[ -f $FIRST_RUN_MODE ]]; then
rm -f "$FIRST_RUN_MODE"
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
bash "$OMARCHY_PATH/install/first-run/recover-internal-monitor.sh"
bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh"
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
+2 -4
View File
@@ -1,11 +1,9 @@
#!/bin/bash
# Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
# Toggle microphone mute. Dell XPS systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-cmd-mic-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-cmd-mic-mute-thinkpad
else
omarchy-swayosd-client --input-volume mute-toggle
swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" --input-volume mute-toggle
fi
-23
View File
@@ -1,23 +0,0 @@
#!/bin/bash
# Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling
# and syncs the platform::micmute LED via brightnessctl.
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | grep -q 'yes'; then
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
led_value=1
else
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
led_value=0
fi
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+2 -1
View File
@@ -38,6 +38,7 @@ if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
done
fi
omarchy-swayosd-client \
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+9 -21
View File
@@ -134,7 +134,7 @@ stop_screenrecording() {
pkill -9 -f "^gpu-screen-recorder"
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
else
finalize_recording
trim_first_frame
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
local preview="${filename%.mp4}-preview.png"
@@ -159,29 +159,17 @@ screenrecording_active() {
pgrep -f "^gpu-screen-recorder" >/dev/null
}
finalize_recording() {
trim_first_frame() {
local latest
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
[[ -f $latest ]] || return
# Re-encode only when the first GOP contains discardable warmup packets — stream copy can't
# trim those (it rewinds to the keyframe). Clean recordings stay on the fast stream-copy path.
local video_codec=(-c:v copy)
if ffprobe -v error -select_streams v:0 -read_intervals %+0.2 -show_entries packet=flags -of csv=p=0 "$latest" 2>/dev/null | grep -q D; then
video_codec=(-c:v libx264 -preset veryfast -crf 20)
fi
# Trim the first frame, and normalize audio to -14 LUFS if present, in a single pass
local args=(-y -ss 0.1 -i "$latest" "${video_codec[@]}")
if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then
args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11)
fi
local processed="${latest%.mp4}-processed.mp4"
if ffmpeg "${args[@]}" "$processed" -loglevel quiet 2>/dev/null; then
mv "$processed" "$latest"
else
rm -f "$processed"
if [[ -n $latest && -f $latest ]]; then
local trimmed="${latest%.mp4}-trimmed.mp4"
if ffmpeg -y -ss 0.1 -i "$latest" -c copy "$trimmed" -loglevel quiet 2>/dev/null; then
mv "$trimmed" "$latest"
else
rm -f "$trimmed"
fi
fi
}
+3 -7
View File
@@ -63,13 +63,6 @@ get_rectangles() {
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Keep hyprpicker alive until after grim captures so the screenshot sees the
# frozen overlay rather than live content shifting during teardown.
cleanup_freeze() {
[[ -n $PID ]] && kill $PID 2>/dev/null
}
trap cleanup_freeze EXIT
# Select based on mode
case "$MODE" in
region)
@@ -77,12 +70,14 @@ region)
PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 2>/dev/null
;;
fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo")
@@ -93,6 +88,7 @@ smart | *)
PID=$!
sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null
# If the selection area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots
+19 -32
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Add or remove an EFI boot entry for the Omarchy UKI, allowing the system to boot directly
# Add an EFI boot entry for the Omarchy UKI, allowing the system to boot directly
# without a bootloader like Limine. Requires UEFI firmware and a built UKI.
if [[ ! -d /sys/firmware/efi ]]; then
@@ -23,36 +23,23 @@ if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then
exit 1
fi
existing_entry=$(efibootmgr | grep -E "^Boot[0-9A-Fa-f]+\*? Omarchy([[:space:]]|$)" | head -1)
uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
if [[ -n $existing_entry ]]; then
boot_num=$(echo "$existing_entry" | sed -n 's/^Boot\([0-9A-Fa-f]\+\).*/\1/p')
if gum confirm "Disable direct boot (remove Omarchy EFI entry)?"; then
echo "Removing EFI boot entry $boot_num"
sudo efibootmgr --bootnum "$boot_num" --delete-bootnum >/dev/null
fi
exit 0
else
uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
if [[ -z $uki_file ]]; then
echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2
exit 1
fi
boot_source=$(findmnt -n -o SOURCE /boot)
disk=$(echo "$boot_source" | sed 's/p\?[0-9]*$//')
part=$(echo "$boot_source" | grep -o 'p\?[0-9]*$' | sed 's/^p//')
if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?"; then
echo "Creating EFI boot entry for $uki_file"
sudo efibootmgr --create \
--disk "$disk" \
--part "$part" \
--label "Omarchy" \
--loader "\\EFI\\Linux\\$uki_file"
fi
if [[ -z $uki_file ]]; then
echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2
exit 1
fi
boot_source=$(findmnt -n -o SOURCE /boot)
disk=$(echo "$boot_source" | sed 's/p\?[0-9]*$//')
part=$(echo "$boot_source" | grep -o 'p\?[0-9]*$' | sed 's/^p//')
if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?"; then
echo "Creating EFI boot entry for $uki_file"
sudo efibootmgr --create \
--disk "$disk" \
--part "$part" \
--label "Omarchy" \
--loader "\\EFI\\Linux\\$uki_file"
fi
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# Detect ASUS ExpertBook B9406 series laptops on Intel Panther Lake.
omarchy-hw-match "B9406" && omarchy-hw-intel-ptl
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
# Returns true when an external monitor is physically connected.
# Uses kernel DRM state so the result is independent of Hyprland's startup timing.
for status in /sys/class/drm/card*-*/status; do
[[ "$status" == *-eDP-*/status ]] && continue
[[ "$(<"$status")" == "connected" ]] && exit 0
done
exit 1
-9
View File
@@ -1,9 +0,0 @@
#!/bin/bash
# supergfxctl is authoritative: in Integrated mode the dGPU is unbound and
# hidden from lspci, so the controller count would undercount on those systems.
if command -v supergfxctl &>/dev/null; then
supergfxctl -s 2>/dev/null | grep -qw Hybrid
else
(($(lspci | grep -cE 'VGA|3D|Display') >= 2))
fi
+3 -4
View File
@@ -1,7 +1,6 @@
#!/bin/bash
# Match against the computer's DMI product name or product family (case-insensitive).
# Usage: omarchy-hw-match "XPS" or omarchy-hw-match "ThinkPad"
# Match against the computer's DMI product name (case-insensitive).
# Usage: omarchy-hw-match "XPS"
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null ||
grep -qi "$1" /sys/class/dmi/id/product_family 2>/dev/null
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null
-11
View File
@@ -1,11 +0,0 @@
#!/bin/bash
# Clear the internal-monitor-disable toggle if no external display is connected.
# Runs before the graphical session so Hyprland doesn't block on having no output
# to render to when the user rebooted with the external unplugged.
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf"
if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then
rm -f "$TOGGLE"
fi
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
device=$(hyprctl devices -j | jq -r '[.mice[] | .name | select(test("touchpad|trackpad"; "i"))] | first // empty')
[[ -n $device ]] && echo "$device"
-37
View File
@@ -1,37 +0,0 @@
#!/bin/bash
TOGGLE="internal-monitor-disable"
enable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Laptop display enabled" "$TOGGLE"
fi
}
disable() {
if omarchy-hw-external-monitors; then
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
omarchy-hyprland-toggle --enabled-notification "󰍹 Laptop display disabled" "$TOGGLE"
fi
else
notify-send -u low "󰍹 Can't disable the only active display"
exit 1
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then enable; else disable; fi ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
exit 1
;;
esac
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
# Toggle the internal laptop display on/off.
# Useful when connected to an external monitor and you want to close the lid
# or just use the external display only.
INTERNAL=$(hyprctl monitors all -j | jq -r '.[] | select(.name | startswith("eDP")) | .name')
if [[ -z $INTERNAL ]]; then
notify-send -u low "󰍹 No internal display found"
exit 1
fi
DISABLED=$(hyprctl monitors all -j | jq -r --arg m "$INTERNAL" '.[] | select(.name == $m) | .disabled')
if [[ $DISABLED == "true" ]]; then
hyprctl keyword monitor "$INTERNAL,preferred,auto,auto"
hyprctl dispatch movecursor 0 0
notify-send -u low "󰍹 Internal display on"
else
ACTIVE_COUNT=$(hyprctl monitors -j | jq 'length')
if [[ $ACTIVE_COUNT -le 1 ]]; then
notify-send -u low "󰍹 Can't disable the only active display"
exit 1
fi
hyprctl keyword monitor "$INTERNAL,disable"
notify-send -u low "󰍹 Internal display off"
fi
+8 -21
View File
@@ -8,28 +8,15 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
SCALES=(1 1.25 1.6 2 3)
# Cycle through scales: 1 → 1.6 → 2 → 3 → 1
CURRENT_INT=$(awk -v s="$CURRENT_SCALE" 'BEGIN { printf "%.0f", s * 10 }')
# Find the index of the scale closest to the current one (Hyprland may
# snap fractional scales to nearby values, so we can't match exactly)
CURRENT_IDX=$(awk -v s="$CURRENT_SCALE" -v list="${SCALES[*]}" 'BEGIN {
n = split(list, arr, " ")
best = 0; best_diff = 1e9
for (i = 1; i <= n; i++) {
d = s - arr[i]; if (d < 0) d = -d
if (d < best_diff) { best_diff = d; best = i - 1 }
}
print best
}')
if [[ "$1" == "--reverse" ]]; then
NEW_IDX=$(( (CURRENT_IDX - 1 + ${#SCALES[@]}) % ${#SCALES[@]} ))
else
NEW_IDX=$(( (CURRENT_IDX + 1) % ${#SCALES[@]} ))
fi
NEW_SCALE=${SCALES[$NEW_IDX]}
case "$CURRENT_INT" in
10) NEW_SCALE=1.6 ;;
16) NEW_SCALE=2 ;;
20) NEW_SCALE=3 ;;
*) NEW_SCALE=1 ;;
esac
hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE"
notify-send -u low "󰍹 Display scaling set to ${NEW_SCALE}x"
-14
View File
@@ -1,14 +0,0 @@
#!/bin/bash
# Listen on Hyprland's event socket and recover the internal display whenever
# a monitor is removed.
SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
socat -U - "UNIX-CONNECT:$SOCKET" | while read -r event; do
case "$event" in
monitorremoved\>\>*|monitorremovedv2\>\>*)
omarchy-hyprland-monitor-internal recover
;;
esac
done
-31
View File
@@ -1,31 +0,0 @@
#!/bin/bash
# Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
ENABLED_NOTIFICATION=""
DISABLED_NOTIFICATION=""
while [[ $# -gt 1 ]]; do
case $1 in
--enabled-notification) ENABLED_NOTIFICATION="$2"; shift 2 ;;
--disabled-notification) DISABLED_NOTIFICATION="$2"; shift 2 ;;
*) break ;;
esac
done
FLAG_NAME="$1"
FLAG="$HOME/.local/state/omarchy/toggles/hypr/$FLAG_NAME.conf"
FLAG_SOURCE="$OMARCHY_PATH/default/hypr/toggles/$FLAG_NAME.conf"
if [[ -f $FLAG ]]; then
rm $FLAG
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
elif [[ -f $FLAG_SOURCE ]]; then
cp $FLAG_SOURCE $FLAG
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
else
echo "Flag not found: $FLAG_NAME"
exit 1
fi
hyprctl reload
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# Check if a Hyprland toggle is currently disabled (missing).
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# Check if a Hyprland toggle is currently enabled.
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+12 -2
View File
@@ -1,5 +1,15 @@
#!/bin/bash
# Toggles the window gaps globally between no gaps and the default.
# Toggles the window gaps globally between no gaps and the default 10/5/2.
omarchy-hyprland-toggle window-no-gaps
gaps=$(hyprctl getoption general:gaps_out -j | jq -r '.custom' | awk '{print $1}')
if [[ $gaps == "0" ]]; then
hyprctl keyword general:gaps_out 10
hyprctl keyword general:gaps_in 5
hyprctl keyword general:border_size 2
else
hyprctl keyword general:gaps_out 0
hyprctl keyword general:gaps_in 0
hyprctl keyword general:border_size 0
fi
@@ -1,8 +1,13 @@
#!/bin/bash
# Toggle single-window square aspect ratio.
# Check current single_window_aspect_ratio setting
CURRENT_VALUE=$(hyprctl getoption "layout:single_window_aspect_ratio" 2>/dev/null | head -1)
omarchy-hyprland-toggle \
--enabled-notification " Enable single-window square aspect ratio" \
--disabled-notification " Disable single-window square aspect ratio" \
single-window-aspect-ratio
# Parse vec2 output: "vec2: [1, 1]" or "vec2: [0, 0]"
if [[ $CURRENT_VALUE == *"[1, 1]"* ]]; then
hyprctl keyword layout:single_window_aspect_ratio "0 0"
notify-send -u low " Disable single-window square aspect ratio"
else
hyprctl keyword layout:single_window_aspect_ratio "1 1"
notify-send -u low " Enable single-window square aspect"
fi
+1 -3
View File
@@ -2,11 +2,9 @@
# Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console.
echo -e "\nInstalling Tailscale..."
omarchy-pkg-add tailscale
curl -fsSL https://tailscale.com/install.sh | sh
echo -e "\nStarting Tailscale..."
sudo systemctl enable --now tailscaled.service
sudo tailscale up --accept-routes
omarchy-webapp-install "Tailscale" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
+1 -1
View File
@@ -11,7 +11,7 @@ fi
pgrep -f org.omarchy.screensaver && exit 0
# Allow screensaver to be turned off but also force started
if omarchy-toggle-enabled screensaver-off && [[ $1 != "force" ]]; then
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
exit 1
fi
+10 -26
View File
@@ -168,9 +168,8 @@ show_share_menu() {
}
show_toggle_menu() {
local options="󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n Direct Boot"
case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n󰛧 Laptop Display") in
case $(menu "Toggle" "$options") in
*Screensaver*) omarchy-toggle-screensaver ;;
*Nightlight*) omarchy-toggle-nightlight ;;
*Idle*) omarchy-toggle-idle ;;
@@ -179,34 +178,21 @@ show_toggle_menu() {
*Ratio*) omarchy-hyprland-window-single-square-aspect-toggle ;;
*Gaps*) omarchy-hyprland-window-gaps-toggle ;;
*Scaling*) omarchy-hyprland-monitor-scaling-cycle ;;
*"Direct Boot"*) present_terminal omarchy-config-direct-boot ;;
*Laptop*) omarchy-hyprland-monitor-internal-toggle ;;
*) back_to show_trigger_menu ;;
esac
}
show_hardware_menu() {
local options="󰛧 Laptop Display"
if omarchy-hw-hybrid-gpu; then
options="$options\n Hybrid GPU"
fi
if omarchy-hw-touchpad; then
options="$options\n󰟸 Touchpad"
fi
case $(menu "Toggle" "$options") in
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
*Touchpad*) omarchy-toggle-touchpad ;;
case $(menu "Toggle" " Hybrid GPU") in
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
*) back_to show_trigger_menu ;;
*) show_trigger_menu ;;
esac
}
show_style_menu() {
case $(menu "Style" "󰸌 Theme\n󰟵 Unlock\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in
case $(menu "Style" "󰸌 Theme\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in
*Theme*) show_theme_menu ;;
*Unlock*) omarchy-launch-walker -m menus:omarchyunlocks --width 800 --minheight 400 ;;
*Font*) show_font_menu ;;
*Background*) show_background_menu ;;
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
@@ -291,7 +277,7 @@ show_setup_config_menu() {
show_setup_system_menu() {
local options=""
if omarchy-toggle-enabled suspend-off; then
if [[ -f ~/.local/state/omarchy/toggles/suspend-off ]]; then
options="$options󰒲 Enable Suspend"
else
options="$options󰒲 Disable Suspend"
@@ -364,8 +350,8 @@ show_install_terminal_menu() {
show_install_ai_menu() {
ollama_pkg=$(
(omarchy-cmd-present nvidia-smi && echo ollama-cuda) ||
(omarchy-cmd-present rocminfo && echo ollama-rocm) ||
(command -v nvidia-smi &>/dev/null && echo ollama-cuda) ||
(command -v rocminfo &>/dev/null && echo ollama-rocm) ||
echo ollama
)
@@ -543,10 +529,9 @@ show_update_channel_menu() {
esac
}
show_update_process_menu() {
case $(menu "Restart" " Hypridle\n Hyprsunset\n󰎟 Mako\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hypridle*) omarchy-restart-hypridle ;;
*Hyprsunset*) omarchy-restart-hyprsunset ;;
*Mako*) omarchy-restart-mako ;;
*Swayosd*) omarchy-restart-swayosd ;;
*Walker*) omarchy-restart-walker ;;
*Waybar*) omarchy-restart-waybar ;;
@@ -593,7 +578,7 @@ show_about() {
show_system_menu() {
local options="󱄄 Screensaver\n Lock"
! omarchy-toggle-enabled suspend-off && options="$options\n󰒲 Suspend"
[[ ! -f ~/.local/state/omarchy/toggles/suspend-off ]] && options="$options\n󰒲 Suspend"
omarchy-hibernation-available && options="$options\n󰤁 Hibernate"
options="$options\n󰍃 Logout\n󰜉 Restart\n󰐥 Shutdown"
@@ -619,7 +604,6 @@ go_to_menu() {
*learn*) show_learn_menu ;;
*trigger*) show_trigger_menu ;;
*toggle*) show_toggle_menu ;;
*hardware*) show_hardware_menu ;;
*share*) show_share_menu ;;
*background*) show_background_menu ;;
*capture*) show_capture_menu ;;
+1 -1
View File
@@ -202,7 +202,7 @@ prioritize_entries() {
if (match(line, /Move window to workspace/)) prio = 28
if (match(line, /Move window silently to workspace/)) prio = 29
if (match(line, /Swap window/)) prio = 30
if (match(line, /Focus/)) prio = 31
if (match(line, /Move window focus/)) prio = 31
if (match(line, /Move window$/)) prio = 32
if (match(line, /Resize window/)) prio = 33
if (match(line, /Expand window/)) prio = 34
+1 -1
View File
@@ -10,7 +10,7 @@ mkdir -p "$STATE_DIR"
mkdir -p "$STATE_DIR/skipped"
# Run any pending migrations
for file in $OMARCHY_PATH/migrations/*.sh; do
for file in ~/.local/share/omarchy/migrations/*.sh; do
filename=$(basename "$file")
if [[ ! -f $STATE_DIR/$filename && ! -f $STATE_DIR/skipped/$filename ]]; then
+1 -28
View File
@@ -18,34 +18,7 @@ mkdir -p "$HOME/.local/bin"
cat > "$HOME/.local/bin/$command" <<EOF
#!/bin/bash
package="$package"
command="$command"
if ! node_root="\$(mise where node@latest 2>/dev/null)"; then
mise use -g node@latest >/dev/null
node_root="\$(mise where node@latest)"
fi
node_bin="\$node_root/bin/node"
npx_bin="\$node_root/bin/npx"
# Resolve the package bin inside npx, then run it with node@latest without leaking node@latest into PATH.
# Some wrappers are aliases, e.g. playwright-cli wraps the playwright bin.
package_bin_path=\$("\$node_bin" "\$npx_bin" --yes --package "\$package" -- which "\$package" 2>/dev/null)
if [[ -n \$package_bin_path ]]; then
exec "\$node_bin" "\$package_bin_path" "\$@"
fi
# Scoped packages like @openai/codex expose an unscoped bin like codex.
package_bin_path=\$("\$node_bin" "\$npx_bin" --yes --package "\$package" -- which "\$command" 2>/dev/null)
if [[ -n \$package_bin_path ]]; then
exec "\$node_bin" "\$package_bin_path" "\$@"
fi
echo "Could not resolve npm bin for \$package / \$command" >&2
exit 127
exec mise exec node@latest -- npx --yes $package "\$@"
EOF
chmod +x "$HOME/.local/bin/$command"
-72
View File
@@ -1,72 +0,0 @@
#!/bin/bash
# Render a Plymouth login-screen preview PNG by compositing the staged omarchy
# theme assets (recolored with the given text color) onto the background.
if [[ $# -ne 4 ]]; then
echo "Usage: omarchy-plymouth-preview <background-hex> <text-hex> <path-to-logo.png> <output-path>" >&2
exit 1
fi
bg_hex="${1#\#}"
text_hex="${2#\#}"
logo_path="$3"
output_path="$4"
if ! [[ $bg_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
echo "Invalid background color: $1 (expected #RRGGBB)" >&2
exit 1
fi
if ! [[ $text_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
echo "Invalid text color: $2 (expected #RRGGBB)" >&2
exit 1
fi
if [[ ! -f $logo_path ]]; then
echo "Logo file not found: $logo_path" >&2
exit 1
fi
staging_dir=$(mktemp -d)
trap 'rm -rf "$staging_dir"' EXIT
find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$staging_dir/" {} +
cp "$logo_path" "$staging_dir/logo.png"
for asset in bullet.png entry.png lock.png; do
magick "$staging_dir/$asset" -channel RGB +level-colors "#$text_hex","#$text_hex" "$staging_dir/$asset"
done
canvas_w=1920
canvas_h=1080
logo_w=$(magick identify -format '%w' "$staging_dir/logo.png")
logo_h=$(magick identify -format '%h' "$staging_dir/logo.png")
entry_w=$(magick identify -format '%w' "$staging_dir/entry.png")
entry_h=$(magick identify -format '%h' "$staging_dir/entry.png")
lock_h=$(awk "BEGIN{print int($entry_h * 0.8)}")
lock_w=$(awk "BEGIN{print int(84 * $lock_h / 96)}")
logo_x=$(( (canvas_w - logo_w) / 2 ))
logo_y=$(( (canvas_h - logo_h) / 2 ))
entry_x=$(( (canvas_w - entry_w) / 2 ))
entry_y=$(( logo_y + logo_h + 40 ))
lock_x=$(( entry_x - lock_w - 15 ))
lock_y=$(( entry_y + entry_h/2 - lock_h/2 ))
bullet_y=$(( entry_y + entry_h/2 - 4 ))
bullet_args=()
for i in 0 1 2 3; do
bx=$(( entry_x + 20 + i * 12 ))
bullet_args+=( '(' "$staging_dir/bullet.png" -resize 7x7 ')' -geometry +${bx}+${bullet_y} -composite )
done
magick -size ${canvas_w}x${canvas_h} "xc:#$bg_hex" \
"$staging_dir/logo.png" -geometry +${logo_x}+${logo_y} -composite \
"$staging_dir/entry.png" -geometry +${entry_x}+${entry_y} -composite \
\( "$staging_dir/lock.png" -resize ${lock_w}x${lock_h} \) -geometry +${lock_x}+${lock_y} -composite \
"${bullet_args[@]}" \
"$output_path"
imv -f "$output_path"
-15
View File
@@ -1,15 +0,0 @@
#!/bin/bash
# Restore the Plymouth boot theme to the omarchy default — copies the shipped
# assets into /usr/share without recoloring, then rebuilds the initramfs.
theme_dir="/usr/share/plymouth/themes/omarchy"
sudo find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$theme_dir/" {} +
sudo plymouth-set-default-theme omarchy
if omarchy-cmd-present limine-mkinitcpio; then
sudo limine-mkinitcpio
else
sudo mkinitcpio -P
fi
-58
View File
@@ -1,58 +0,0 @@
#!/bin/bash
# Configure the Plymouth boot theme with a custom background color, text color, and logo.
# Stages the change in a temp dir, then commits the staged files to /usr/share and
# rebuilds the initramfs.
if [[ $# -ne 3 ]]; then
echo "Usage: omarchy-plymouth-set <background-hex> <text-hex> <path-to-logo.png>" >&2
exit 1
fi
bg_hex="${1#\#}"
text_hex="${2#\#}"
logo_path="$3"
if ! [[ $bg_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
echo "Invalid background color: $1 (expected #RRGGBB)" >&2
exit 1
fi
if ! [[ $text_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
echo "Invalid text color: $2 (expected #RRGGBB)" >&2
exit 1
fi
if [[ ! -f $logo_path ]]; then
echo "Logo file not found: $logo_path" >&2
exit 1
fi
bg_r=$(awk -v n=$((16#${bg_hex:0:2})) 'BEGIN{printf "%.3f", n/255}')
bg_g=$(awk -v n=$((16#${bg_hex:2:2})) 'BEGIN{printf "%.3f", n/255}')
bg_b=$(awk -v n=$((16#${bg_hex:4:2})) 'BEGIN{printf "%.3f", n/255}')
theme_dir="/usr/share/plymouth/themes/omarchy"
staging_dir=$(mktemp -d)
trap 'rm -rf "$staging_dir"' EXIT
find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$staging_dir/" {} +
cp "$logo_path" "$staging_dir/logo.png"
sed -i \
-e "s/^Window.SetBackgroundTopColor.*/Window.SetBackgroundTopColor($bg_r, $bg_g, $bg_b);/" \
-e "s/^Window.SetBackgroundBottomColor.*/Window.SetBackgroundBottomColor($bg_r, $bg_g, $bg_b);/" \
"$staging_dir/omarchy.script"
for asset in bullet.png entry.png lock.png progress_bar.png; do
magick "$staging_dir/$asset" -channel RGB +level-colors "#$text_hex","#$text_hex" "$staging_dir/$asset"
done
sudo cp -a "$staging_dir/." "$theme_dir/"
sudo plymouth-set-default-theme omarchy
if omarchy-cmd-present limine-mkinitcpio; then
sudo limine-mkinitcpio
else
sudo mkinitcpio -P
fi
-22
View File
@@ -1,22 +0,0 @@
#!/bin/bash
# Resolve a theme by name and apply its unlock.png + colors.toml as the
# Plymouth boot screen via omarchy-plymouth-set.
if [[ $# -ne 1 ]]; then
echo "Usage: omarchy-plymouth-set-by-theme <theme-name>" >&2
exit 1
fi
theme=$1
if [[ -d ~/.config/omarchy/themes/$theme ]]; then
theme_dir=~/.config/omarchy/themes/$theme
else
theme_dir="$OMARCHY_PATH/themes/$theme"
fi
bg=$(awk -F'"' '/^background/{print $2}' "$theme_dir/colors.toml")
text=$(awk -F'"' '/^foreground/{print $2}' "$theme_dir/colors.toml")
exec omarchy-plymouth-set "$bg" "$text" "$theme_dir/unlock.png"
-2
View File
@@ -7,5 +7,3 @@ omarchy-refresh-config hypr/bindings.conf
omarchy-refresh-config hypr/input.conf
omarchy-refresh-config hypr/looknfeel.conf
omarchy-refresh-config hypr/hyprland.conf
omarchy-refresh-config hypr/monitors.conf
bash "$OMARCHY_PATH/install/config/detect-keyboard-layout.sh"
-23
View File
@@ -100,29 +100,6 @@ else
# Install required packages
print_info "Installing required packages..."
# ASUS ExpertBook B9406CAA ships a FocalTech FT9349 ESS reader (USB
# 2808:a97a). Mainline libfprint at 1.94.x lacks the focaltech_moc
# driver (and its 0xa97a id_table entry); OPR ships libfprint-git
# which carries both. Once upstream catches up, this branch is a
# no-op and `libfprint-git` provides=libfprint anyway. Detect via
# /sys to avoid depending on usbutils being installed first.
for v in /sys/bus/usb/devices/*/idVendor; do
[[ "$(cat "$v" 2>/dev/null)" == "2808" ]] || continue
[[ "$(cat "${v%idVendor}idProduct" 2>/dev/null)" == "a97a" ]] || continue
print_info "FocalTech FT9349 detected (B9406CAA) — using libfprint-git from OPR..."
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
# -Rns) is required because fprintd requires libfprint; the dep is
# re-satisfied immediately by libfprint-git's provides=libfprint.
if omarchy-pkg-present libfprint; then
sudo pacman -Rdd --noconfirm libfprint
fi
omarchy-pkg-add libfprint-git
break
done
omarchy-pkg-add fprintd usbutils
if ! check_fingerprint_hardware; then
+9 -25
View File
@@ -1,19 +1,12 @@
#!/bin/bash
# Toggle passwordless sudo for the current user.
# Usage: omarchy-sudo-passwordless-toggle [MINUTES]
# First run: enables passwordless sudo for 15 minutes (after confirmation).
# Second run: disables it early.
NOPASSWD_FILE="/etc/sudoers.d/99-omarchy-nopasswd-${USER}"
TIMER_NAME="omarchy-nopasswd-expire-${USER}"
MINUTES=${1:-15}
if [[ $1 && ! $1 =~ ^[0-9]+$ ]]; then
echo "Usage: omarchy-sudo-passwordless-toggle [MINUTES]" >&2
exit 1
fi
# Safety: if the file exists but the timer doesn't (e.g. after reboot), clean up
if sudo test -f "$NOPASSWD_FILE" && ! systemctl is-active "${TIMER_NAME}.timer" &>/dev/null; then
sudo rm "$NOPASSWD_FILE"
@@ -21,37 +14,28 @@ fi
# Check for the file directly — sudo -n can stay cached or be granted by other rules
if sudo test -f "$NOPASSWD_FILE"; then
if [[ $1 ]]; then
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
rm "$NOPASSWD_FILE"
echo "Passwordless sudo timer updated. It will now automatically disable in ${MINUTES} minutes."
else
sudo rm "$NOPASSWD_FILE"
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
echo "Passwordless sudo has been DISABLED. Sudo will require a password again."
fi
sudo rm "$NOPASSWD_FILE"
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
echo "Passwordless sudo has been DISABLED. Sudo will require a password again."
else
echo ""
echo "⚠️WARNING: This will allow ANY process running as your user to"
echo "execute ANY command as root WITHOUT a password for ${MINUTES} minutes."
echo "⚠️ WARNING: This will allow ANY process running as your user to"
echo "execute ANY command as root WITHOUT a password for 15 minutes."
echo ""
echo "This is useful for AI agents that need to run sudo commands,"
echo "but it significantly weakens the security of your system."
echo "Anyone or anything with access to your user account gets full root."
echo ""
echo "Passwordless sudo will automatically disable after ${MINUTES} minutes."
echo "Passwordless sudo will automatically disable after 15 minutes."
echo "Run this command again to disable it early."
echo ""
if gum confirm "Enable passwordless sudo for ${MINUTES} minutes? This is a significant security risk!"; then
if gum confirm "Enable passwordless sudo for 15 minutes? This is a significant security risk!"; then
echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee "$NOPASSWD_FILE" > /dev/null
sudo chmod 440 "$NOPASSWD_FILE"
sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
sudo systemd-run --on-active=15m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
rm "$NOPASSWD_FILE"
echo ""
echo "Passwordless sudo has been ENABLED. It will automatically disable in ${MINUTES} minutes."
echo "Passwordless sudo has been ENABLED. It will automatically disable in 15 minutes."
echo "Note: if you restart before then, run omarchy-sudo-passwordless-toggle again to disable it."
else
echo "Aborted. No changes made."
+3 -2
View File
@@ -8,7 +8,8 @@ percent="$1"
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
omarchy-swayosd-client \
--custom-icon display-brightness-symbolic \
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon display-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# Wrapper for swayosd-client that targets the currently focused monitor.
exec swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" "$@"
+3 -2
View File
@@ -8,7 +8,8 @@ percent="$1"
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
omarchy-swayosd-client \
--custom-icon keyboard-brightness-symbolic \
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon keyboard-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
+1 -1
View File
@@ -15,7 +15,7 @@ if [[ -z $REPO_URL ]]; then
fi
THEMES_DIR="$HOME/.config/omarchy/themes"
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//' | tr '[:upper:]' '[:lower:]')
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Remove existing theme if present
+2 -2
View File
@@ -14,11 +14,11 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
if omarchy-cmd-present chromium; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null
chromium --refresh-platform-policy --no-startup-window &>/dev/null
fi
if omarchy-cmd-present brave; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
pgrep -x brave >/dev/null && brave --refresh-platform-policy --no-startup-window &>/dev/null
brave --refresh-platform-policy --no-startup-window &>/dev/null
fi
fi
+6 -5
View File
@@ -7,8 +7,9 @@ VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
set_theme() {
local editor_cmd="$1"
local settings_path="$2"
local skip_flag="$3"
omarchy-cmd-present "$editor_cmd" || return 0
omarchy-cmd-present "$editor_cmd" && [[ ! -f $skip_flag ]] || return 0
if [[ -f $VS_CODE_THEME ]]; then
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
@@ -33,7 +34,7 @@ set_theme() {
fi
}
! omarchy-toggle-enabled skip-vscode-theme-changes && set_theme "code" "$HOME/.config/Code/User/settings.json"
! omarchy-toggle-enabled skip-vscode-insiders-theme-changes && set_theme "code-insiders" "$HOME/.config/Code - Insiders/User/settings.json"
! omarchy-toggle-enabled skip-codium-theme-changes && set_theme "codium" "$HOME/.config/VSCodium/User/settings.json"
! omarchy-toggle-enabled skip-cursor-theme-changes && set_theme "cursor" "$HOME/.config/Cursor/User/settings.json"
set_theme "code" "$HOME/.config/Code/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes"
set_theme "code-insiders" "$HOME/.config/Code - Insiders/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-vscode-insiders-theme-changes"
set_theme "codium" "$HOME/.config/VSCodium/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-codium-theme-changes"
set_theme "cursor" "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes"
-26
View File
@@ -1,26 +0,0 @@
#!/bin/bash
# Toggle Omarchy features between enabled and disabled
ENABLED_NOTIFICATION=""
DISABLED_NOTIFICATION=""
while [[ $# -gt 1 ]]; do
case $1 in
--enabled-notification) ENABLED_NOTIFICATION="$2"; shift 2 ;;
--disabled-notification) DISABLED_NOTIFICATION="$2"; shift 2 ;;
*) break ;;
esac
done
FLAG_NAME="$1"
FLAG="$HOME/.local/state/omarchy/toggles/$FLAG_NAME"
if [[ -f $FLAG ]]; then
rm $FLAG
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
else
mkdir -p "$(dirname $FLAG)"
touch $FLAG
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
fi
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
# Check if a toggle is enabled (flag file exists)
[[ -f "$HOME/.local/state/omarchy/toggles/$1" ]]
+10 -4
View File
@@ -1,6 +1,12 @@
#!/bin/bash
omarchy-toggle \
--enabled-notification "󱄄 Screensaver disabled" \
--disabled-notification "󱄄 Screensaver enabled" \
screensaver-off
STATE_FILE=~/.local/state/omarchy/toggles/screensaver-off
if [[ -f $STATE_FILE ]]; then
rm -f $STATE_FILE
notify-send -u low "󱄄 Screensaver enabled"
else
mkdir -p "$(dirname $STATE_FILE)"
touch $STATE_FILE
notify-send -u low "󱄄 Screensaver disabled"
fi
+10 -4
View File
@@ -1,6 +1,12 @@
#!/bin/bash
omarchy-toggle \
--enabled-notification "󰒲 Suspend removed from system menu" \
--disabled-notification "󰒲 Suspend now available in system menu" \
suspend-off
STATE_FILE=~/.local/state/omarchy/toggles/suspend-off
if [[ -f $STATE_FILE ]]; then
rm -f $STATE_FILE
notify-send -u low "󰒲 Suspend now available in system menu"
else
mkdir -p "$(dirname $STATE_FILE)"
touch $STATE_FILE
notify-send -u low "󰒲 Suspend removed from system menu"
fi
-29
View File
@@ -1,29 +0,0 @@
#!/bin/bash
STATE_CONF="$HOME/.local/state/omarchy/toggles/hypr/touchpad-disabled.conf"
device="$(omarchy-hw-touchpad)"
if [[ -z $device ]]; then
echo "No touchpad device found" >&2
exit 1
fi
enable() {
hyprctl keyword "device[$device]:enabled" true >/dev/null
rm -f "$STATE_CONF"
omarchy-swayosd-client --custom-icon input-touchpad-symbolic --custom-message "Touchpad enabled"
}
disable() {
hyprctl keyword "device[$device]:enabled" false >/dev/null
mkdir -p "$(dirname "$STATE_CONF")"
printf 'device {\n name = %s\n enabled = false\n}\n' "$device" > "$STATE_CONF"
omarchy-swayosd-client --custom-icon touchpad-disabled-symbolic --custom-message "Touchpad disabled"
}
case "${1:-toggle}" in
on) enable ;;
off) disable ;;
toggle) if [[ -f $STATE_CONF ]]; then enable; else disable; fi ;;
esac
-2
View File
@@ -1,7 +1,5 @@
#!/bin/bash
omarchy-toggle waybar-off
if pgrep -x waybar >/dev/null; then
pkill -x waybar
else
+1 -15
View File
@@ -2,21 +2,7 @@
echo
running_kernel=$(uname -r)
kernel_updated=false
for kernel in /usr/lib/modules/*/vmlinuz; do
if [[ -f $kernel ]] && pacman -Qo "$kernel" &>/dev/null; then
installed_kernel=$(basename "$(dirname "$kernel")")
if [[ $installed_kernel != $running_kernel ]]; then
kernel_updated=true
break
fi
fi
done
if [[ $kernel_updated == "true" ]]; then
if [[ ! -d /usr/lib/modules/$(uname -r) ]]; then
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-system-reboot
elif [[ -f $HOME/.local/state/omarchy/reboot-required ]]; then
gum confirm "Updates require reboot. Ready?" && omarchy-system-reboot
-3
View File
@@ -1,8 +1,5 @@
#!/bin/bash
# Clean up the voxtype --follow child when Waybar reloads
trap 'kill 0' EXIT
if omarchy-cmd-present voxtype; then
voxtype status --follow --extended --format json | while read -r line; do
echo "$line" | jq -c '. + {alt: .class}'
+1 -1
View File
@@ -8,7 +8,7 @@
--light-header-color: #dbdbdb; /* H1-H3 */
--select-text-bg-color: #186a9a;
--accent-color: #4f525a;
--background-color: #000000;
--background-color: #101010;
--font-color: #bbbcbc;
--header-color: #bebebe; /* H4-H6 */
--border-color: #232629;
+1 -4
View File
@@ -1,4 +1,4 @@
# Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
# Use defaults Omarchy defaults (but don't edit these directly!)
source = ~/.local/share/omarchy/default/hypr/autostart.conf
@@ -19,8 +19,5 @@ source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf
# Toggle config flags dynamically
source = ~/.local/state/omarchy/toggles/hypr/*.conf
# Add any other personal Hyprland configuration below
# windowrule = workspace 5, match:class qemu
+2 -2
View File
@@ -1,5 +1,5 @@
# Control your input devices
# See https://wiki.hypr.land/Configuring/Basics/Variables/#input
# See https://wiki.hypr.land/Configuring/Variables/#input
input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
# kb_layout = us,dk,eu
@@ -45,7 +45,7 @@ windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
# Enable touchpad gestures for changing workspaces
# See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/
# See https://wiki.hyprland.org/Configuring/Gestures/
# gesture = 3, horizontal, workspace
# Enable touchpad gestures for moving focus (helpful on scrolling layout)
+4 -4
View File
@@ -1,6 +1,6 @@
# Change the default Omarchy look'n'feel
# https://wiki.hypr.land/Configuring/Basics/Variables/#general
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
# No gaps between windows or borders
# gaps_in = 0
@@ -11,7 +11,7 @@ general {
# layout = scrolling
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#decoration
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
# Use round window corners
# rounding = 8
@@ -21,13 +21,13 @@ decoration {
# dim_strength = 0.15
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#animations
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
# Disable all animations
# enabled = no
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#layout
# https://wiki.hypr.land/Configuring/Variables/#layout
layout {
# Avoid overly wide single-window layouts on wide screens
# single_window_aspect_ratio = 1 1
+2 -5
View File
@@ -1,10 +1,10 @@
# See https://wiki.hypr.land/Configuring/Basics/Monitors/
# See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,2
monitor=,preferred,auto,auto
monitor=,preferred,auto,auto,vrr,1
# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
@@ -21,6 +21,3 @@ monitor=,preferred,auto,auto
# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 2
# monitor = eDP-1, 2880x1920@120, auto, 2
# Disable the second ghost monitor on an Apple 6K XDR over Thunderbolt
# monitor=DP-2,disable
@@ -1,11 +0,0 @@
[Unit]
Description=Recover the internal monitor toggle when no external display is connected
Before=graphical-session-pre.target
ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf
[Service]
Type=oneshot
ExecStart=%h/.local/share/omarchy/bin/omarchy-hw-recover-internal-monitor
[Install]
WantedBy=graphical-session-pre.target
-1
View File
@@ -93,7 +93,6 @@
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"on-click": "omarchy-menu power",
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
"states": {
"warning": 20,
"critical": 10
+1 -4
View File
@@ -44,13 +44,10 @@ alias ....='cd ../../..'
# Tools
alias c='opencode'
alias cx='printf "\033[2J\033[3J\033[H" && claude --permission-mode bypassPermissions'
alias cx='printf "\033[2J\033[3J\033[H" && claude --allow-dangerously-skip-permissions'
alias d='docker'
alias r='rails'
alias t='tmux attach || tmux new -s Work'
alias ic='tdl c'
alias ix='tdl cx'
alias icx='tdl c cx'
n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; }
# Git
+1 -5
View File
@@ -11,11 +11,7 @@ if command -v zoxide &> /dev/null; then
fi
if command -v try &> /dev/null; then
try() {
unset -f try
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
try "$@"
}
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
fi
if command -v fzf &> /dev/null; then
+13 -13
View File
@@ -28,15 +28,6 @@ local function first_image_in_dir(dir)
return nil
end
-- Find preview.png, preview.jpg, or first backgrounds/ image in a theme dir
local function find_preview_path(dir)
local png = dir .. "/preview.png"
local jpg = dir .. "/preview.jpg"
if file_exists(png) then return png end
if file_exists(jpg) then return jpg end
return first_image_in_dir(dir .. "/backgrounds")
end
-- The main function elephant will call
function GetEntries()
local entries = {}
@@ -60,10 +51,19 @@ function GetEntries()
if theme_name and not seen_themes[theme_name] then
seen_themes[theme_name] = true
-- Check the theme dir, then fall back to the default theme dir
-- (for partial user customizations that don't ship a preview)
local preview_path = find_preview_path(theme_path)
or find_preview_path(default_theme_dir .. "/" .. theme_name)
-- Check for preview images directly (no subprocess)
local preview_path = nil
local preview_png = theme_path .. "/preview.png"
local preview_jpg = theme_path .. "/preview.jpg"
if file_exists(preview_png) then
preview_path = preview_png
elseif file_exists(preview_jpg) then
preview_path = preview_jpg
else
-- Fallback: get first image from backgrounds (one ls call)
preview_path = first_image_in_dir(theme_path .. "/backgrounds")
end
if preview_path and preview_path ~= "" then
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
-92
View File
@@ -1,92 +0,0 @@
--
-- Dynamic Omarchy Unlocks Menu for Elephant/Walker
--
-- A "Default" entry restores the omarchy-shipped Plymouth via
-- omarchy-plymouth-reset. After that, every theme that has a preview-unlock.png
-- appears as a customised unlock; picking one runs omarchy-plymouth-set-by-theme
-- <theme>. Both run in a floating terminal so sudo can prompt.
--
Name = "omarchyunlocks"
NamePretty = "Omarchy Unlocks"
HideFromProviderlist = true
FixedOrder = true
local function file_exists(path)
local f = io.open(path, "r")
if f then
f:close()
return true
end
return false
end
local function shell_escape(s)
return "'" .. s:gsub("'", "'\\''") .. "'"
end
function GetEntries()
local entries = {}
local home = os.getenv("HOME")
local user_themes_dir = home .. "/.config/omarchy/themes"
local omarchy_path = os.getenv("OMARCHY_PATH") or ""
local default_themes_dir = omarchy_path .. "/themes"
local default_preview = omarchy_path .. "/default/plymouth/preview-unlock.png"
local seen_themes = {}
local function process_themes_from_dir(themes_dir)
local handle = io.popen("find -L '" .. themes_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null")
if not handle then
return
end
for theme_path in handle:lines() do
local theme_name = theme_path:match(".*/(.+)$")
if theme_name and not seen_themes[theme_name] then
seen_themes[theme_name] = true
local preview_path = theme_path .. "/preview-unlock.png"
if file_exists(preview_path) then
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
return first:upper() .. rest:lower()
end)
display_name = display_name .. " "
table.insert(entries, {
Text = display_name,
Preview = preview_path,
PreviewType = "file",
Actions = {
activate = "omarchy-launch-floating-terminal-with-presentation "
.. shell_escape("omarchy-plymouth-set-by-theme " .. shell_escape(theme_name)),
},
})
end
end
end
handle:close()
end
process_themes_from_dir(user_themes_dir)
process_themes_from_dir(default_themes_dir)
-- Default entry last — restores the shipped Plymouth.
local default_entry = {
Text = "Default ",
Actions = {
activate = "omarchy-launch-floating-terminal-with-presentation "
.. shell_escape("omarchy-plymouth-reset"),
},
}
if file_exists(default_preview) then
default_entry.Preview = default_preview
default_entry.PreviewType = "file"
end
table.insert(entries, default_entry)
return entries
end
-1
View File
@@ -12,7 +12,6 @@ source = ~/.local/share/omarchy/default/hypr/apps/geforce.conf
source = ~/.local/share/omarchy/default/hypr/apps/moonlight.conf
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/telegram.conf
source = ~/.local/share/omarchy/default/hypr/apps/typora.conf
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf
-3
View File
@@ -14,6 +14,3 @@ windowrule = tile on, match:tag chromium-based-browser
# Only a subtle opacity change, but not for video sites
windowrule = opacity 1.0 0.97, match:tag chromium-based-browser
windowrule = opacity 1.0 0.97, match:tag firefox-based-browser
# Hide the screen-sharing notification bar (the "Hide" button on it is broken on Wayland)
windowrule = workspace special silent, match:title .*is sharing.*
-2
View File
@@ -1,2 +0,0 @@
# Float Typora print dialog
windowrule = match:class ^Typora$, match:title ^Print$, float on, center on
+1 -2
View File
@@ -1,13 +1,12 @@
exec-once = uwsm-app -- hypridle
exec-once = uwsm-app -- mako
exec-once = ! omarchy-toggle-enabled waybar-off && uwsm-app -- waybar
exec-once = uwsm-app -- waybar
exec-once = uwsm-app -- fcitx5 --disable notificationitem
exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill
exec-once = uwsm-app -- swayosd-server
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = omarchy-cmd-first-run
exec-once = omarchy-powerprofiles-init
exec-once = uwsm-app -- omarchy-hyprland-monitor-watch
# Slow app launch fix -- set systemd vars
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
+12 -12
View File
@@ -1,28 +1,28 @@
# Only display the OSD on the currently focused monitor
$osdclient = swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)"
# Laptop multimedia keys for volume and LCD brightness (with OSD)
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, omarchy-swayosd-client --output-volume raise
bindeld = ,XF86AudioLowerVolume, Volume down, exec, omarchy-swayosd-client --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, omarchy-swayosd-client --output-volume mute-toggle
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, omarchy-cmd-mic-mute
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%-
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, omarchy-brightness-keyboard down
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, omarchy-brightness-keyboard cycle
bindld = ,XF86TouchpadToggle, Toggle touchpad, exec, omarchy-toggle-touchpad
bindld = ,XF86TouchpadOn, Enable touchpad, exec, omarchy-toggle-touchpad on
bindld = ,XF86TouchpadOff, Disable touchpad, exec, omarchy-toggle-touchpad off
# Precise 1% multimedia adjustments with Alt modifier
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, omarchy-swayosd-client --output-volume +1
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, omarchy-swayosd-client --output-volume -1
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, omarchy-brightness-display +1%
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, omarchy-brightness-display 1%-
# Requires playerctl
bindld = , XF86AudioNext, Next track, exec, omarchy-swayosd-client --playerctl next
bindld = , XF86AudioPause, Pause, exec, omarchy-swayosd-client --playerctl play-pause
bindld = , XF86AudioPlay, Play, exec, omarchy-swayosd-client --playerctl play-pause
bindld = , XF86AudioPrev, Previous track, exec, omarchy-swayosd-client --playerctl previous
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
# Switch audio output with Super + Mute
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-cmd-audio-switch
+8 -13
View File
@@ -13,10 +13,10 @@ bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-hyprland-window-po
bindd = SUPER, L, Toggle workspace layout, exec, omarchy-hyprland-workspace-layout-toggle
# Move focus with SUPER + arrow keys
bindd = SUPER, LEFT, Focus on left window, movefocus, l
bindd = SUPER, RIGHT, Focus on right window, movefocus, r
bindd = SUPER, UP, Focus on above window, movefocus, u
bindd = SUPER, DOWN, Focus on below window, movefocus, d
bindd = SUPER, LEFT, Move window focus left, movefocus, l
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
bindd = SUPER, UP, Move window focus up, movefocus, u
bindd = SUPER, DOWN, Move window focus down, movefocus, d
# Switch workspaces with SUPER + [1-9; 0]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
@@ -76,15 +76,11 @@ 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, Focus on next window, cyclenext
bindd = ALT SHIFT, TAB, Focus on previous window, cyclenext, prev
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
# Cycle through monitors
bindd = CTRL ALT, TAB, Focus on next monitor, focusmonitor, +1
bindd = CTRL ALT SHIFT, TAB, Focus on previous monitor, focusmonitor, -1
# Resize active window
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
@@ -128,6 +124,5 @@ bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
# Cycle monitor scaling with SUPER + /
bindd = SUPER, code:61, Cycle monitor scaling, exec, omarchy-hyprland-monitor-scaling-cycle
bindd = SUPER ALT, code:61, Cycle monitor scaling backwards, exec, omarchy-hyprland-monitor-scaling-cycle --reverse
# Cycle monitor scaling
bindd = SUPER, Slash, Cycle monitor scaling, exec, omarchy-hyprland-monitor-scaling-cycle
+1 -4
View File
@@ -3,7 +3,6 @@ bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
bindd = SUPER CTRL, C, Capture menu, exec, omarchy-menu capture
bindd = SUPER CTRL, O, Toggle menu, exec, omarchy-menu toggle
bindd = SUPER CTRL, H, Hardware menu, exec, omarchy-menu hardware
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
bindd = SUPER SHIFT, code:201, Omarchy menu, exec, omarchy-menu
bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system
@@ -29,9 +28,7 @@ bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
# Toggles
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal toggle
bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal off
bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal on
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal-toggle
# Control Apple Display brightness
bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000
+1 -1
View File
@@ -1,4 +1,4 @@
# https://wiki.hypr.land/Configuring/Basics/Variables/#input
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us
kb_variant =
+15 -15
View File
@@ -1,30 +1,30 @@
# Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# Variables
$activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
$inactiveBorderColor = rgba(595959aa)
# https://wiki.hypr.land/Configuring/Basics/Variables/#general
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 10
border_size = 2
# https://wiki.hypr.land/Configuring/Basics/Variables/#variable-types for info about colors
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = $activeBorderColor
col.inactive_border = $inactiveBorderColor
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#decoration
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 0
@@ -35,7 +35,7 @@ decoration {
color = rgba(1a1a1aee)
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#blur
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = true
size = 2
@@ -46,7 +46,7 @@ decoration {
}
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#group
# https://wiki.hypr.land/Configuring/Variables/#group
group {
col.border_active = $activeBorderColor
col.border_inactive = $inactiveBorderColor
@@ -77,11 +77,11 @@ group {
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#animations
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = yes, please :)
# Default animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/ for more
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
@@ -91,7 +91,7 @@ animations {
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 3.79, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
@@ -103,22 +103,22 @@ animations {
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 0, 0, ease
animation = specialWorkspace, 1, 3, easeOutQuint, slidevert
animation = specialWorkspace, 1, 4, easeOutQuint, slidevert
}
# See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
force_split = 2 # Always split on the right
}
# See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#misc
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
@@ -128,7 +128,7 @@ misc {
on_focus_under_fullscreen = 1
}
# https://wiki.hypr.land/Configuring/Basics/Variables/#cursor
# https://wiki.hypr.land/Configuring/Variables/#cursor
cursor {
hide_on_key_press = true
warp_on_change_workspace = 1
-2
View File
@@ -1,2 +0,0 @@
# This directory is intended for permanent config toggle flags.
# Do not remove this file (as the directory always needs at least one file).
@@ -1,2 +0,0 @@
# Disable the internal laptop monitor
monitor=eDP-1,disable
@@ -1,5 +0,0 @@
# Avoid overly wide single-window layouts on wide screens
layout {
single_window_aspect_ratio = 1 1
}
-6
View File
@@ -1,6 +0,0 @@
# Remove all window gaps and borders
general {
gaps_out = 0
gaps_in = 0
border_size = 0
}
+1 -1
View File
@@ -1,4 +1,4 @@
# See https://wiki.hypr.land/Configuring/Basics/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# Hyprland 0.53+ syntax
windowrule = suppress_event maximize, match:class .*
Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

-8
View File
@@ -1,8 +0,0 @@
# Omarchy snapshots root only for pre-update recovery — kept to 5, no timeline
SUBVOLUME="/"
FSTYPE="btrfs"
NUMBER_LIMIT="5"
NUMBER_LIMIT_IMPORTANT="5"
TIMELINE_CREATE="no"
+16
View File
@@ -0,0 +1,16 @@
#!/bin/bash
# Temporarily switch to performance power profile on resume
# to avoid sluggishness while the system catches up, then
# restore the previous profile after 10 seconds.
if [[ $1 == "pre" ]]; then
mkdir -p /run/omarchy
powerprofilesctl get > /run/omarchy/power-profile-before-sleep
fi
if [[ $1 == "post" ]]; then
previous=$(cat /run/omarchy/power-profile-before-sleep 2>/dev/null || echo "balanced")
powerprofilesctl set performance
systemd-run --on-active=10 --timer-property=AccuracySec=1 powerprofilesctl set "$previous"
fi
-3
View File
@@ -25,9 +25,6 @@ sample_rate = 16000
# Maximum recording duration in seconds (safety limit)
max_duration_secs = 60
# Pause MPRIS media players during recording
pause_media = true
# [audio.feedback]
# Enable audio feedback sounds (beeps when recording starts/stops)
# enabled = true
@@ -78,10 +78,6 @@ child:selected .item-box * {
color: @selected-text;
}
child:selected {
background: alpha(@text, 0.07);
}
.item-box {
padding-left: 14px;
}
@@ -118,4 +114,3 @@ child:selected {
.preview {
}
+2 -5
View File
@@ -14,7 +14,6 @@ run_logged $OMARCHY_INSTALL/config/mise-work.sh
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/user-dirs.sh
run_logged $OMARCHY_INSTALL/config/nautilus-python.sh
run_logged $OMARCHY_INSTALL/config/localdb.sh
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
@@ -23,7 +22,6 @@ run_logged $OMARCHY_INSTALL/config/unmount-fuse.sh
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
run_logged $OMARCHY_INSTALL/config/input-group.sh
run_logged $OMARCHY_INSTALL/config/omarchy-ai-skill.sh
run_logged $OMARCHY_INSTALL/config/omarchy-toggles.sh
run_logged $OMARCHY_INSTALL/config/kernel-modules-hook.sh
run_logged $OMARCHY_INSTALL/config/powerprofilesctl-rules.sh
run_logged $OMARCHY_INSTALL/config/wifi-powersave-rules.sh
@@ -45,14 +43,13 @@ run_logged $OMARCHY_INSTALL/config/hardware/intel/thermald.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/ipu7-camera.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/ptl-kernel.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/fix-wifi7-eht.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/resume-boost.sh
run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-haptic-touchpad.sh
run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-ptl-display.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-asus-ptl-b9406-display.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-asus-ptl-b9406-touchpad.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-audio-mixer.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-mic.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-z13-touchpad.sh
run_logged $OMARCHY_INSTALL/config/hardware/framework/fix-f13-amd-audio-input.sh
run_logged $OMARCHY_INSTALL/config/hardware/framework/qmk-hid.sh
@@ -1,21 +0,0 @@
# Display fixes for ASUS ExpertBook B9406 (Panther Lake / Xe3 iGPU).
#
# Panel Replay is Xe3-new, default-on in the xe driver, and has a broken
# exit/wake path on this eDP panel: the panel latches the last-presented
# frame in self-refresh and never wakes for subsequent atomic commits, so
# the screen only updates on a full modeset (e.g. a VT switch). The older
# xe.enable_psr=0 knob does not cover Panel Replay.
#
# The panel's EDID on eDP-1 reads as empty, so xe takes backlight type from
# VBT (which says PWM) but the panel actually wants DPCD AUX backlight.
# Without xe.enable_dpcd_backlight=1, intel_backlight sysfs writes succeed
# but produce no visible change; brightness is effectively binary.
if omarchy-hw-asus-expertbook-b9406; then
sudo mkdir -p /etc/limine-entry-tool.d
cat <<EOF | sudo tee /etc/limine-entry-tool.d/asus-expertbook-b9406-display.conf >/dev/null
# ASUS ExpertBook B9406 (Panther Lake / Xe3) display workarounds
KERNEL_CMDLINE[default]+=" xe.enable_panel_replay=0"
KERNEL_CMDLINE[default]+=" xe.enable_dpcd_backlight=1"
EOF
fi
@@ -1,23 +0,0 @@
# Touchpad quirks for ASUS ExpertBook B9406 (Pixart 093A:4F05 on i2c-hid).
#
# The kernel produces perfect Precision Touchpad reports but libinput's
# jump-detection heuristic discards every motion event as "kernel bug:
# Touch jump detected and discarded" because the pad reports pressure
# values of 0-1, confusing the contact stability check. Button events
# still pass, so clicks register but motion does not.
#
# Mask the pressure axes with a quirks override, same pattern as the
# Asus UX302LA entry in libinput's shipped 50-system-asus.quirks.
if omarchy-hw-asus-expertbook-b9406; then
sudo mkdir -p /etc/libinput
sudo tee /etc/libinput/asus-expertbook-b9406.quirks >/dev/null <<EOF
[ASUS ExpertBook B9406 Touchpad]
MatchBus=i2c
MatchUdevType=touchpad
MatchVendor=0x093A
MatchProduct=0x4F05
MatchDMIModalias=dmi:*svnASUS*:pn*B9406*
AttrEventCode=-ABS_MT_PRESSURE;-ABS_PRESSURE;
EOF
fi
@@ -1,18 +0,0 @@
# Fix disable-while-typing on ASUS ROG Flow Z13 detachable keyboard.
#
# The Z13's detachable keyboard touchpad is detected as external by udev,
# which prevents libinput's disable-while-typing (dwt) from pairing it
# with the keyboard. This causes ghost touchpad taps from keyboard
# flex/vibration while typing quickly, jumping the cursor to random positions.
#
# Upstream libinput (50-system-asus.quirks) marks the keyboard as internal
# (AttrKeyboardIntegration=internal), but touchpad integration is controlled
# via udev, not libinput quirks. This udev rule marks the touchpad as internal
# so dwt can properly pair it with the keyboard.
if omarchy-hw-asus-rog && omarchy-hw-match "GZ302"; then
sudo tee /etc/udev/rules.d/99-omarchy-asus-z13-touchpad.rules > /dev/null <<'EOF'
ACTION=="add|change", KERNEL=="event*", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="1a30", ENV{ID_INPUT_TOUCHPAD}=="1", ENV{ID_INPUT_TOUCHPAD_INTEGRATION}="internal"
EOF
sudo udevadm control --reload-rules
fi
@@ -0,0 +1,20 @@
# Fix display issues on Dell XPS Panther Lake (Xe3) systems.
# Xe PSR causes freezes and display glitches on both OLED and IPS panels.
# LG OLED panels also need Panel Replay disabled.
if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl; then
echo "Detected Dell XPS on Panther Lake, applying display power-saving fixes..."
if omarchy-hw-dell-xps-oled; then
CMDLINE='KERNEL_CMDLINE[default]+=" xe.enable_psr=0 xe.enable_panel_replay=0"'
COMMENT='Disable Xe PSR and Panel Replay on Dell XPS Panther Lake OLED systems'
else
CMDLINE='KERNEL_CMDLINE[default]+=" xe.enable_psr=0"'
COMMENT='Disable Xe PSR on Dell XPS Panther Lake systems'
fi
sudo mkdir -p /etc/limine-entry-tool.d
cat <<EOF | sudo tee /etc/limine-entry-tool.d/dell-xps-ptl-display.conf >/dev/null
# $COMMENT
$CMDLINE
EOF
fi
+1 -3
View File
@@ -5,9 +5,7 @@ if omarchy-hw-intel-ptl; then
echo "Detected Intel Panther Lake, installing PTL kernel..."
omarchy-pkg-add linux-ptl linux-ptl-headers
for pkg in linux linux-headers; do
sudo pacman -Rdd --noconfirm "$pkg" 2>/dev/null || true
done
sudo pacman -Rdd --noconfirm linux linux-headers 2>/dev/null || true
sudo mkdir -p /etc/limine-entry-tool.d
cat <<EOF | sudo tee /etc/limine-entry-tool.d/intel-panther-lake.conf >/dev/null
@@ -0,0 +1,8 @@
# Boost CPU performance for 10 seconds after resume on Intel systems.
# The powersave governor with balance_power EPP is slow to ramp frequency
# after long suspends, causing noticeable sluggishness on wake.
if omarchy-hw-intel; then
sudo mkdir -p /usr/lib/systemd/system-sleep
sudo install -m 0755 -o root -g root "$OMARCHY_PATH/default/systemd/system-sleep/resume-boost" /usr/lib/systemd/system-sleep/
fi
@@ -1,9 +1,9 @@
# This installs hardware video acceleration for Intel GPUs
if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then
# HD Graphics / Iris / Xe / Arc use intel-media-driver + VPL
# HD Graphics / Iris / Xe / Arc use intel-media-driver
if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc) ]]; then
omarchy-pkg-add intel-media-driver libvpl vpl-gpu-rt
omarchy-pkg-add intel-media-driver
elif [[ ${INTEL_GPU,,} =~ "gma" ]]; then
# Older generations from 2008 to ~2014-2017 use libva-intel-driver
omarchy-pkg-add libva-intel-driver
-3
View File
@@ -1,3 +0,0 @@
# Toggles are used to turn certain features on/off in a persistent way
mkdir -p ~/.local/state/omarchy/toggles/hypr
cp $OMARCHY_PATH/default/hypr/toggles/flags.conf ~/.local/state/omarchy/toggles/hypr/
+1 -1
View File
@@ -24,4 +24,4 @@ sudo mkdir -p /etc/brave/policies/managed
sudo chmod a+rw /etc/brave/policies/managed
# Default Chromium to follow system appearance ("device") instead of dark
echo '{"browser":{"theme":{"color_scheme":0,"color_scheme2":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null
echo '{"browser":{"theme":{"color_scheme":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null
-12
View File
@@ -1,12 +0,0 @@
mkdir -p ~/Downloads ~/Pictures ~/Videos ~/.config/gtk-3.0
xdg-user-dirs-update --set TEMPLATES "$HOME"
xdg-user-dirs-update --set PUBLICSHARE "$HOME"
xdg-user-dirs-update --set DESKTOP "$HOME"
rmdir ~/Templates ~/Public ~/Desktop 2>/dev/null || true
touch ~/.config/gtk-3.0/bookmarks
for dir in Downloads Pictures Videos; do
printf 'file://%s/%s %s\n' "$HOME" "$dir" "$dir" >>~/.config/gtk-3.0/bookmarks
done
-1
View File
@@ -28,4 +28,3 @@ EOF
mkdir -p ~/.config/elephant/menus
ln -snf $OMARCHY_PATH/default/elephant/omarchy_themes.lua ~/.config/elephant/menus/omarchy_themes.lua
ln -snf $OMARCHY_PATH/default/elephant/omarchy_background_selector.lua ~/.config/elephant/menus/omarchy_background_selector.lua
ln -snf $OMARCHY_PATH/default/elephant/omarchy_unlocks.lua ~/.config/elephant/menus/omarchy_unlocks.lua
@@ -1 +0,0 @@
systemctl --user enable omarchy-recover-internal-monitor.service
+19 -7
View File
@@ -50,14 +50,26 @@ EOF
# We overwrite the whole thing knowing the limine-update will add the entries for us
sudo cp $OMARCHY_PATH/default/limine/limine.conf /boot/limine.conf
# Only snapshot root — /home is user data; rolling it back loses user work
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
sudo snapper -c root create-config /
fi
sudo cp $OMARCHY_PATH/default/snapper/root /etc/snapper/configs/root
# Match Snapper configs if not installing from the ISO
if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
sudo snapper -c root create-config /
fi
# Disable btrfs quotas — full qgroup accounting is a major performance drag
sudo btrfs quota disable / 2>/dev/null || true
if ! sudo snapper list-configs 2>/dev/null | grep -q "home"; then
sudo snapper -c home create-config /home
fi
fi
# Enable quota to allow space-aware algorithms to work
sudo btrfs quota enable /
# Tweak default Snapper configs
sudo sed -i 's/^TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^SPACE_LIMIT="0.5"/SPACE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^FREE_LIMIT="0.2"/FREE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
chrootable_systemctl_enable limine-snapper-sync.service
fi
-1
View File
@@ -112,7 +112,6 @@ sddm
signal-desktop
slurp
spotify
socat
starship
sushi
swaybg
-4
View File
@@ -55,10 +55,6 @@ tuxedo-drivers-nocompatcheck-dkms
yt6801-dkms
zram-generator
# Intel encoding processing
libvpl
vpl-gpu-rt
# Vulkan drivers (auto-detected by hardware)
vulkan-intel
vulkan-radeon
-16
View File
@@ -1,16 +0,0 @@
echo "Enable GPU in voxtype if Vulkan is available"
if omarchy-cmd-present voxtype; then
if omarchy-hw-vulkan; then
echo "Vulkan is available, enabling GPU in voxtype"
sudo voxtype setup gpu --enable || true
fi
# see https://github.com/peteonrails/voxtype/commit/ce6e9919cbe54cb8808dcb3cdd3bcb3260d7b900
# earlier versions of voxtype hard-coded the non-GPU backend in the systemd service file,
# so we need to re-run setup to update it to use /usr/bin/voxtype (the symlink)
voxtype setup systemd
systemctl --user restart voxtype
omarchy-restart-waybar
fi
+8
View File
@@ -0,0 +1,8 @@
echo "Ensure xe.enable_psr=0 is set in CMDLINE for XPS Panther Lake systems"
if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl && [[ -f /etc/default/limine ]]; then
if ! grep -Fq 'xe.enable_psr=0' /etc/default/limine; then
echo 'KERNEL_CMDLINE[default]+=" xe.enable_psr=0"' | sudo tee -a /etc/default/limine >/dev/null
sudo limine-mkinitcpio
fi
fi

Some files were not shown because too many files have changed in this diff Show More