Merge remote-tracking branch 'origin/dev' into omarchy-cli

# Conflicts:
#	bin/omarchy-hyprland-monitor-watch
#	bin/omarchy-plymouth-reset
#	bin/omarchy-sudo-passwordless
This commit is contained in:
David Heinemeier Hansson
2026-05-01 17:07:09 +02:00
104 changed files with 715 additions and 97 deletions
+1
View File
@@ -12,6 +12,7 @@
All commands start with `omarchy-`. Prefixes indicate purpose:
- `cmd-` - check if commands exist, misc utility commands
- `capture-` - screenshots, screen recordings, and other capture tools
- `pkg-` - package management helpers
- `hw-` - hardware detection (return exit codes for use in conditionals)
- `refresh-` - copy default config to user's `~/.config/`
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

@@ -3,9 +3,9 @@
# omarchy:summary=Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-cmd-mic-mute-xps
omarchy-audio-input-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-cmd-mic-mute-thinkpad
omarchy-audio-input-mute-thinkpad
else
omarchy-swayosd-client --input-volume mute-toggle
fi
@@ -16,7 +16,6 @@ fi
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+25
View File
@@ -14,6 +14,31 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
fi
done
# Current brightness percentage
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
# Apply non-uniform step size: 1% steps if at or below 5%, otherwise set an
# absolute target percentage to avoid raw backlight rounding causing uneven OSD steps.
if [[ $step == "+5%" ]]; then
if (( current < 5 )); then
(( target = current + 1 ))
else
(( target = current + 5 ))
fi
(( target > 100 )) && target=100
step="$target%"
elif [[ $step == "5%-" ]]; then
if (( current <= 5 )); then
(( target = current - 1 ))
else
(( target = current - 5 ))
fi
(( target < 1 )) && target=1
step="$target%"
fi
# Set the actual brightness of the display device.
brightnessctl -d "$device" set "$step" >/dev/null
+1 -1
View File
@@ -6,7 +6,7 @@
encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device)
if [[ -n $encrypted_drives ]]; then
if (( $(wc -l <<<encrypted_drives) == 1 )); then
if (( $(wc -l <<<"$encrypted_drives") == 1 )); then
drive_to_change="$encrypted_drives"
else
drive_to_change="$(omarchy-drive-select "$encrypted_drives")"
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
device=$(hyprctl devices -j | jq -r '[.touch[]?.name, .tablets[]?.name] | first // empty')
[[ -n $device ]] && echo "$device"
+11 -5
View File
@@ -4,6 +4,11 @@
# omarchy:args=<on|off|toggle|recover>
TOGGLE="internal-monitor-disable"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
MIRROR_TOGGLE="internal-monitor-mirror"
# Get internal monitor name dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
enable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
@@ -12,14 +17,15 @@ enable() {
}
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
if ! omarchy-hw-external-monitors; then
notify-send -u low "󰍹 Can't disable the only active display"
exit 1
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE" && omarchy-hyprland-toggle-disabled "$MIRROR_TOGGLE"; then
echo "monitor=$INTERNAL,disable" >"$TOGGLE_FLAG"
notify-send -u low "󰍹 Laptop display disabled"
hyprctl reload
fi
}
recover() {
+55
View File
@@ -0,0 +1,55 @@
#!/bin/bash
TOGGLE="internal-monitor-mirror"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
DISABLE_TOGGLE="internal-monitor-disable"
# Get names dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
# Get the first available external monitor
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
enable() {
if [[ -z "$EXTERNAL" ]]; then
notify-send -u low "󰍹 No external monitors found for mirror"
exit 1
fi
if [[ -z "$INTERNAL" ]]; then
notify-send -u low "󰍹 No laptop monitor found to mirror"
exit 1
fi
if omarchy-hyprland-toggle-enabled "$DISABLE_TOGGLE"; then
omarchy-hyprland-toggle "$DISABLE_TOGGLE"
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" > "$TOGGLE_FLAG"
notify-send -u low "󰍹 Mirroring enabled ($EXTERNAL)"
hyprctl reload
fi
}
disable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Extended mode restored" "$TOGGLE"
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 disable; else enable; fi ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
exit 1
;;
esac
+2 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# omarchy:summary=Watch Hyprland monitor events and recover the internal display when needed
# omarchy:summary=Watch Hyprland monitor events and recover monitor toggles when a monitor is removed
SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
@@ -8,6 +8,7 @@ socat -U - "UNIX-CONNECT:$SOCKET" | while read -r event; do
case "$event" in
monitorremoved\>\>*|monitorremovedv2\>\>*)
omarchy-hyprland-monitor-internal recover
omarchy-hyprland-monitor-internal-mirror recover
;;
esac
done
+3 -3
View File
@@ -28,21 +28,21 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl dispatch exec -- \
alacritty --class=org.omarchy.screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*ghostty*)
hyprctl dispatch exec -- \
ghostty --class=org.omarchy.screensaver \
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \
--font-size=18 \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*kitty*)
hyprctl dispatch exec -- \
kitty --class=org.omarchy.screensaver \
--override font_size=18 \
--override window_padding_width=0 \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*)
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
+19 -14
View File
@@ -2,8 +2,6 @@
# omarchy:summary=Launch the Omarchy Menu or takes a parameter to jump straight to a submenu.
export PATH="$HOME/.local/share/omarchy/bin:$PATH"
# Set to true when going directly to a submenu, so we can exit directly
BACK_TO_EXIT=false
@@ -106,7 +104,7 @@ show_trigger_menu() {
show_capture_menu() {
case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in
*Screenshot*) omarchy-cmd-screenshot ;;
*Screenshot*) omarchy-capture-screenshot ;;
*Screenrecord*) show_screenrecord_menu ;;
*Color*) pkill hyprpicker || hyprpicker -a ;;
*) back_to show_trigger_menu ;;
@@ -141,18 +139,18 @@ show_webcam_select_menu() {
}
show_screenrecord_menu() {
omarchy-cmd-screenrecord --stop-recording && exit 0
omarchy-capture-screenrecording --stop-recording && exit 0
case $(menu "Screenrecord" " With no audio\n With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
*"With no audio") omarchy-cmd-screenrecord ;;
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With no audio") omarchy-capture-screenrecording ;;
*"With desktop audio") omarchy-capture-screenrecording --with-desktop-audio ;;
*"With desktop + microphone audio") omarchy-capture-screenrecording --with-desktop-audio --with-microphone-audio ;;
*"With desktop + microphone audio + webcam")
local device=$(show_webcam_select_menu) || {
back_to show_capture_menu
return
}
omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
omarchy-capture-screenrecording --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
;;
*) back_to show_capture_menu ;;
esac
@@ -160,15 +158,15 @@ show_screenrecord_menu() {
show_share_menu() {
case $(menu "Share" " Clipboard\n File \n Folder") in
*Clipboard*) omarchy-cmd-share clipboard ;;
*File*) terminal bash -c "omarchy-cmd-share file" ;;
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
*Clipboard*) omarchy-menu-share clipboard ;;
*File*) terminal bash -c "omarchy-menu-share file" ;;
*Folder*) terminal bash -c "omarchy-menu-share folder" ;;
*) back_to show_trigger_menu ;;
esac
}
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"
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\n󰟵 Passwordless Sudo"
case $(menu "Toggle" "$options") in
*Screensaver*) omarchy-toggle-screensaver ;;
@@ -180,12 +178,13 @@ show_toggle_menu() {
*Gaps*) omarchy-hyprland-window-gaps-toggle ;;
*Scaling*) omarchy-hyprland-monitor-scaling-cycle ;;
*"Direct Boot"*) present_terminal omarchy-config-direct-boot ;;
*"Passwordless Sudo"*) present_terminal omarchy-sudo-passwordless ;;
*) back_to show_trigger_menu ;;
esac
}
show_hardware_menu() {
local options="󰛧 Laptop Display"
local options="󰛧 Laptop Display\n 󰍹 Mirror Display"
if omarchy-hw-hybrid-gpu; then
options="$options\n Hybrid GPU"
@@ -195,9 +194,15 @@ show_hardware_menu() {
options="$options\n󰟸 Touchpad"
fi
if omarchy-hw-touchscreen; then
options="$options\n󰆽 Touchscreen"
fi
case $(menu "Toggle" "$options") in
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle;;
*Touchpad*) omarchy-toggle-touchpad ;;
*Touchscreen*) omarchy-toggle-touchscreen ;;
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
*) back_to show_trigger_menu ;;
esac
@@ -599,7 +604,7 @@ show_system_menu() {
case $(menu "System" "$options") in
*Screensaver*) omarchy-launch-screensaver force ;;
*Lock*) omarchy-lock-screen ;;
*Lock*) omarchy-system-lock ;;
*Suspend*) systemctl suspend ;;
*Hibernate*) systemctl hibernate ;;
*Logout*) omarchy-system-logout ;;
@@ -7,7 +7,7 @@
# omarchy:examples=omarchy share clipboard | omarchy share file ~/Downloads/example.txt
if (($# == 0)); then
echo "Usage: omarchy-cmd-share [clipboard|file|folder]"
echo "Usage: omarchy-menu-share [clipboard|file|folder]"
exit 1
fi
+30 -10
View File
@@ -26,20 +26,40 @@ 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)
ensure_bin_runtime() {
local bin_path=\$1
local shebang
if [[ -n \$package_bin_path ]]; then
exec "\$node_bin" "\$package_bin_path" "\$@"
fi
IFS= read -r shebang < "\$bin_path"
if [[ \$shebang == "#!"*"/bun"* || \$shebang == "#!"*"/env bun"* ]]; then
if omarchy-cmd-missing bun; then
echo "Installing bun runtime for \$package..."
omarchy-pkg-add bun
hash -r
fi
fi
}
exec_package_bin() {
local package_bin_path=\$1
if [[ -n \$package_bin_path ]]; then
ensure_bin_runtime "\$package_bin_path"
PATH="\$node_root/bin:\$PATH" exec "\$package_bin_path" "\$@"
fi
}
# Resolve the package bin inside npx, then run it with node@latest available for node shebangs.
# Some wrappers are aliases, e.g. playwright-cli wraps the playwright bin.
"\$node_bin" "\$npx_bin" --yes --prefer-online --package "\$package" -- true
package_bin_path=\$("\$node_bin" "\$npx_bin" --yes --package "\$package" -- which "\$package" 2>/dev/null)
exec_package_bin "\$package_bin_path" "\$@"
# 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
exec_package_bin "\$package_bin_path" "\$@"
echo "Could not resolve npm bin for \$package / \$command" >&2
exit 127
+3 -4
View File
@@ -1,11 +1,8 @@
#!/bin/bash
# omarchy:summary=Restore the default Omarchy Plymouth boot theme
# omarchy:summary=Restore the default Omarchy Plymouth boot theme and SDDM login screen
# omarchy:requires-sudo=true
# 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/" {} +
@@ -16,3 +13,5 @@ if omarchy-cmd-present limine-mkinitcpio; then
else
sudo mkinitcpio -P
fi
omarchy-refresh-sddm
+15 -1
View File
@@ -6,7 +6,8 @@
# 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.
# rebuilds the initramfs. Also syncs the SDDM login screen (the post-logout
# screen) with the same colors and logo so boot/login stay visually unified.
if [[ $# -ne 3 ]]; then
echo "Usage: omarchy-plymouth-set <background-hex> <text-hex> <path-to-logo.png>" >&2
@@ -60,3 +61,16 @@ if omarchy-cmd-present limine-mkinitcpio; then
else
sudo mkinitcpio -P
fi
# Sync the SDDM login screen with the same colors and logo.
sddm_dir="/usr/share/sddm/themes/omarchy"
sddm_template="$HOME/.local/share/omarchy/default/sddm/omarchy/Main.qml"
sed \
-e "s/#000000/#$bg_hex/g" \
-e "s/#ffffff/#$text_hex/g" \
-e 's|source: "logo.svg"|source: "logo.png"|' \
"$sddm_template" | sudo tee "$sddm_dir/Main.qml" >/dev/null
sudo cp "$logo_path" "$sddm_dir/logo.png"
sudo rm -f "$sddm_dir/logo.svg"
+2
View File
@@ -22,6 +22,8 @@ user_config_file="${HOME}/.config/$config_file"
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
backup_config_file="$user_config_file.bak.$(date +%s)"
mkdir -p "$(dirname "$user_config_file")"
if [[ -f $user_config_file ]]; then
# Create preliminary backup
cp -f "$user_config_file" "$backup_config_file" 2>/dev/null
+1
View File
@@ -18,6 +18,7 @@ if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI w
omarchy-pkg-drop \
aether \
cliamp \
typora \
spotify \
libreoffice-fresh \
+1
View File
@@ -29,6 +29,7 @@ create)
for config in "${CONFIGS[@]}"; do
sudo snapper -c "$config" create -c number -d "$DESC"
sudo snapper -c "$config" cleanup number
done
echo
;;
@@ -9,10 +9,12 @@ TIMER_NAME="omarchy-nopasswd-expire-${USER}"
MINUTES=${1:-15}
if [[ $1 && ! $1 =~ ^[0-9]+$ ]]; then
echo "Usage: omarchy-sudo-passwordless-toggle [MINUTES]" >&2
echo "Usage: omarchy-sudo-passwordless [MINUTES]" >&2
exit 1
fi
echo "Toggle passwordless sudo..."
# 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"
@@ -32,7 +34,7 @@ if sudo test -f "$NOPASSWD_FILE"; then
fi
else
echo ""
echo "⚠️WARNING: This will allow ANY process running as your user to"
echo "⚠️ WARNING: This will allow ANY process running as your user to"
echo "execute ANY command as root WITHOUT a password for ${MINUTES} minutes."
echo ""
echo "This is useful for AI agents that need to run sudo commands,"
@@ -51,7 +53,7 @@ else
echo ""
echo "Passwordless sudo has been ENABLED. It will automatically disable in ${MINUTES} minutes."
echo "Note: if you restart before then, run omarchy-sudo-passwordless-toggle again to disable it."
echo "Note: if you restart before then, run omarchy-sudo-passwordless again to disable it."
else
echo "Aborted. No changes made."
fi
+207
View File
@@ -0,0 +1,207 @@
#!/bin/bash
set -e
THEME_SOURCE="${1:-}"
COLORS_OUTPUT="$THEME_SOURCE/colors.toml"
ALACRITTY_FILE="$THEME_SOURCE/alacritty.toml"
if [[ -z $THEME_SOURCE ]]; then
echo "Usage: omarchy-theme-colors-from-alacritty <theme-dir>" >&2
exit 1
fi
# Skip if colors.toml already exists in source theme
if [[ -f $COLORS_OUTPUT ]]; then
exit 0
fi
# Skip if no alacritty.toml to extract from
if [[ ! -f $ALACRITTY_FILE ]]; then
exit 0
fi
normalize_hex() {
local color="$1"
[[ -z $color ]] && return
color="${color#0x}"
color="${color#\#}"
if [[ $color =~ ^[0-9a-fA-F]{6}$ ]]; then
printf "#%s\n" "${color,,}"
fi
}
extract_color_in_section() {
local section="$1"
local key="$2"
local color_hex=""
color_hex=$(awk -v section="$section" -v key="$key" '
function trim(value) {
gsub(/^[ \t]+|[ \t]+$/, "", value)
return value
}
function strip_comment(value, i, ch, out, in_single, in_double, prev) {
out = ""
in_single = 0
in_double = 0
prev = ""
for (i = 1; i <= length(value); i++) {
ch = substr(value, i, 1)
if (ch == "\"" && !in_single && prev != "\\") {
in_double = !in_double
} else if (ch == "'\''" && !in_double) {
in_single = !in_single
}
if (ch == "#" && !in_single && !in_double) {
break
}
out = out ch
prev = ch
}
gsub(/[ \t]+$/, "", out)
return out
}
/^[ \t]*\[/ {
in_section = ($0 ~ "^[ \\t]*\\[" section "\\][ \\t]*$")
next
}
in_section {
line = $0
line = strip_comment(line)
split_pos = index(line, "=")
if (split_pos == 0) {
next
}
current_key = trim(substr(line, 1, split_pos - 1))
current_value = trim(substr(line, split_pos + 1))
if (current_key == key) {
gsub(/["'\''#]/, "", current_value)
sub(/^0[xX]/, "", current_value)
if (current_value ~ /^[0-9A-Fa-f]{6}$/) {
print current_value
exit
}
}
}
' "$ALACRITTY_FILE")
if [[ -n $color_hex && $color_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
normalize_hex "$color_hex"
fi
return 0
}
names=(black red green yellow blue magenta cyan white)
# Extract normal colors (color0-7)
for i in {0..7}; do
name="${names[$i]}"
val=$(extract_color_in_section "colors.normal" "$name")
if [[ -z $val ]]; then
val=$(extract_color_in_section "colors" "normal.$name")
fi
printf -v "color$i" "%s" "$val"
done
# Validate we have all normal colors (required)
for c in color0 color1 color2 color3 color4 color5 color6 color7; do
if [[ -z ${!c} ]]; then
echo "Warning: Cannot extract all normal colors from $ALACRITTY_FILE, skipping generation" >&2
exit 0
fi
done
# Extract bright colors (color8-15)
for i in {0..7}; do
normal="color$i"
bright="color$((i + 8))"
name="${names[$i]}"
val=$(extract_color_in_section "colors.bright" "$name")
if [[ -z $val ]]; then
val=$(extract_color_in_section "colors" "bright.$name")
fi
printf -v "$bright" "%s" "${val:-${!normal}}"
done
# Extract primary colors
background=$(extract_color_in_section "colors.primary" "background")
foreground=$(extract_color_in_section "colors.primary" "foreground")
if [[ -z $background ]]; then
background=$(extract_color_in_section "colors" "primary.background")
fi
if [[ -z $foreground ]]; then
foreground=$(extract_color_in_section "colors" "primary.foreground")
fi
# Extract cursor color (from [colors.cursor] section)
cursor=$(extract_color_in_section "colors.cursor" "cursor")
if [[ -z $cursor ]]; then
cursor=$(extract_color_in_section "colors" "cursor.cursor")
fi
# Extract selection colors
selection_background=$(extract_color_in_section "colors.selection" "background")
if [[ -z $selection_background ]]; then
selection_background=$(extract_color_in_section "colors" "selection.background")
fi
selection_foreground=$(extract_color_in_section "colors.selection" "text")
if [[ -z $selection_foreground ]]; then
selection_foreground=$(extract_color_in_section "colors" "selection.text")
fi
# Apply defaults
background=${background:-$color0}
foreground=${foreground:-$color7}
cursor=${cursor:-$foreground}
selection_background=${selection_background:-$foreground}
selection_foreground=${selection_foreground:-$background}
accent=$color4
mkdir -p "$THEME_SOURCE"
cat > "$COLORS_OUTPUT" <<EOF
accent = "$accent"
cursor = "$cursor"
foreground = "$foreground"
background = "$background"
selection_foreground = "$selection_foreground"
selection_background = "$selection_background"
color0 = "$color0"
color1 = "$color1"
color2 = "$color2"
color3 = "$color3"
color4 = "$color4"
color5 = "$color5"
color6 = "$color6"
color7 = "$color7"
color8 = "$color8"
color9 = "$color9"
color10 = "$color10"
color11 = "$color11"
color12 = "$color12"
color13 = "$color13"
color14 = "$color14"
color15 = "$color15"
EOF
+5
View File
@@ -29,6 +29,11 @@ mkdir -p "$NEXT_THEME_PATH"
cp -r "$OMARCHY_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
cp -r "$USER_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
# Generate colors.toml from alacritty.toml if theme is missing colors.toml
if [[ ! -f $NEXT_THEME_PATH/colors.toml && -f $NEXT_THEME_PATH/alacritty.toml ]]; then
omarchy-theme-colors-from-alacritty "$NEXT_THEME_PATH"
fi
# Generate dynamic configs
omarchy-theme-set-templates
+7 -3
View File
@@ -4,7 +4,7 @@
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then
if [[ -f $CHROMIUM_THEME ]]; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
@@ -19,8 +19,12 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null
fi
if omarchy-cmd-present brave; then
# Brave and Brave Origin Beta share /etc/brave/policies, so a single write covers both
if omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; 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
if pgrep -x brave >/dev/null; then
omarchy-cmd-present brave && brave --refresh-platform-policy --no-startup-window &>/dev/null
omarchy-cmd-present brave-origin-beta && brave-origin-beta --refresh-platform-policy --no-startup-window &>/dev/null
fi
fi
fi
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
STATE_CONF="$HOME/.local/state/omarchy/toggles/hypr/touchscreen-disabled.conf"
device="$(omarchy-hw-touchscreen)"
if [[ -z $device ]]; then
echo "No touchscreen device found" >&2
exit 1
fi
enable() {
hyprctl keyword "device[$device]:enabled" true >/dev/null
rm -f "$STATE_CONF"
omarchy-swayosd-client --custom-icon device-support-touch-symbolic --custom-message "Touchscreen 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 touch-disabled-symbolic --custom-message "Touchscreen disabled"
}
case "${1:-toggle}" in
on) enable ;;
off) disable ;;
toggle) if [[ -f $STATE_CONF ]]; then enable; else disable; fi ;;
esac
+2
View File
@@ -44,3 +44,5 @@ for APP_NAME in "${APP_NAMES[@]}"; do
rm -f "$ICON_DIR/$APP_NAME.png"
echo "Removed $APP_NAME"
done
omarchy-restart-walker
+2
View File
@@ -32,4 +32,6 @@ if command -v update-desktop-database &>/dev/null; then
update-desktop-database "$APP_DIR" &>/dev/null || true
fi
omarchy-restart-walker
echo "Web apps removed successfully."
+1
View File
@@ -0,0 +1 @@
brave-flags.conf
+3 -2
View File
@@ -7,10 +7,11 @@ bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new
bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian"
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
@@ -34,6 +35,6 @@ bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/c
# bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu
# Logitech MX Keys
# bind = SUPER SHIFT, S, exec, omarchy-cmd-screenshot # Print Screen Button
# bind = SUPER SHIFT, S, exec, omarchy-capture-screenshot # Print Screen Button
# bind = SUPER, H, exec, voxtype record toggle # Dictation Button
# bind = SUPER, PERIOD, exec, omarchy-launch-walker -m symbols # Emoji Button
+1 -1
View File
@@ -1,5 +1,5 @@
general {
lock_cmd = omarchy-lock-screen # lock screen and 1password
lock_cmd = omarchy-system-lock # lock screen and 1password
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display.
inhibit_sleep = 3 # wait until screen is locked
+2 -2
View File
@@ -19,8 +19,8 @@ input {
# Increase sensitivity for mouse/trackpad (default: 0)
# sensitivity = 0.35
# Turn off mouse acceleration (default: false)
# force_no_accel = true
# Turn off mouse acceleration (default: adaptive)
# accel_profile = flat
touchpad {
# Use natural (inverse) scrolling
+3
View File
@@ -0,0 +1,3 @@
# Obsidian reads this file through the Arch package wrapper.
-disable-gpu
--enable-wayland-ime
+1 -1
View File
@@ -7,7 +7,7 @@
#
# show_system_menu() {
# case $(menu "System" " Lock\n󰐥 Shutdown") in
# *Lock*) omarchy-lock-screen ;;
# *Lock*) omarchy-system-lock ;;
# *Shutdown*) omarchy-system-shutdown ;;
# *) back_to show_main_menu ;;
# esac
+1 -1
View File
@@ -138,7 +138,7 @@
"on-scroll-right": ""
},
"custom/screenrecording-indicator": {
"on-click": "omarchy-cmd-screenrecord",
"on-click": "omarchy-capture-screenrecording",
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
"signal": 8,
"return-type": "json"
+4
View File
@@ -2,6 +2,10 @@
export SUDO_EDITOR="$EDITOR"
export BAT_THEME=ansi
# Color man pages with bat
export MANROFFOPT="-c"
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
# Duplicated from .config/uwsm/env so SSH works too
export OMARCHY_PATH=$HOME/.local/share/omarchy
export PATH=$OMARCHY_PATH/bin:$PATH:$HOME/.local/bin
@@ -46,7 +46,7 @@ function GetEntries()
for _, wallpaper_dir in ipairs(dirs) do
local handle = io.popen(
"find " .. ShellEscape(wallpaper_dir)
"find -L " .. ShellEscape(wallpaper_dir)
.. " -maxdepth 1 -type f \\( -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' \\) 2>/dev/null | sort"
)
if handle then
+1
View File
@@ -3,6 +3,7 @@ source = ~/.local/share/omarchy/default/hypr/apps/1password.conf
source = ~/.local/share/omarchy/default/hypr/apps/bitwarden.conf
source = ~/.local/share/omarchy/default/hypr/apps/browser.conf
source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf
source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
source = ~/.local/share/omarchy/default/hypr/apps/localsend.conf
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
+6
View File
@@ -0,0 +1,6 @@
# Disable mouse focus (see https://github.com/basecamp/omarchy/pull/5183#issuecomment-4189299971)
windowrule {
name = jetbrains-focus
no_follow_mouse = on
match:class = ^(jetbrains-.*)$
}
+1 -1
View File
@@ -5,7 +5,7 @@ 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-first-run
exec-once = omarchy-powerprofiles-init
exec-once = uwsm-app -- omarchy-hyprland-monitor-watch
+1 -1
View File
@@ -8,7 +8,7 @@ bindd = SUPER, N, Neovim, exec, $terminal -e nvim
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, O, Obsidian, exec, obsidian
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
+2 -2
View File
@@ -2,7 +2,7 @@
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 = ,XF86AudioMicMute, Mute microphone, exec, omarchy-cmd-mic-mute
bindeld = ,XF86AudioMicMute, Mute microphone, exec, omarchy-audio-input-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
@@ -25,4 +25,4 @@ bindld = , XF86AudioPlay, Play, exec, omarchy-swayosd-client --playerctl play-pa
bindld = , XF86AudioPrev, Previous track, exec, omarchy-swayosd-client --playerctl previous
# Switch audio output with Super + Mute
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-cmd-audio-switch
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-audio-output-switch
+3 -2
View File
@@ -30,6 +30,7 @@ bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal toggle
bindd = SUPER CTRL ALT, Delete, Toggle laptop display mirroring, exec, omarchy-hyprland-monitor-internal-mirror toggle
bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal off
bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal on
@@ -39,7 +40,7 @@ bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-brightness-display-
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-brightness-display-apple +60000
# Captures
bindd = , PRINT, Screenshot, exec, omarchy-cmd-screenshot
bindd = , PRINT, Screenshot, exec, omarchy-capture-screenshot
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
@@ -64,4 +65,4 @@ bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprc
bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1
# Lock system
bindd = SUPER CTRL, L, Lock system, exec, omarchy-lock-screen
bindd = SUPER CTRL, L, Lock system, exec, omarchy-system-lock
@@ -1,2 +0,0 @@
# Disable the internal laptop monitor
monitor=eDP-1,disable
+1 -1
View File
@@ -3,7 +3,7 @@ TARGET_OS_NAME="Omarchy"
ESP_PATH="/boot"
KERNEL_CMDLINE[default]+="@@CMDLINE@@"
KERNEL_CMDLINE[default]+=" quiet splash"
KERNEL_CMDLINE[default]+=" quiet splash loglevel=0 systemd.show_status=false rd.udev.log_level=0 vt.global_cursor_default=0"
ENABLE_UKI=yes
CUSTOM_UKI_NAME="omarchy"
+3 -1
View File
@@ -2,7 +2,9 @@
#timeout: 3
default_entry: 2
interface_branding: Omarchy Bootloader
interface_branding_color: 2
interface_branding_colour: 9ece6a
interface_help_colour: 9ece6a
interface_help_colour_bright: 9ece6a
hash_mismatch_panic: no
term_background: 1a1b26
+2 -2
View File
@@ -108,7 +108,7 @@ cat $(which omarchy-theme-set)
| `omarchy-theme-*` | Theme management | `omarchy-theme-set <name>` |
| `omarchy-install-*` | Install optional software | `omarchy-install-docker-dbs` |
| `omarchy-launch-*` | Launch apps | `omarchy-launch-browser` |
| `omarchy-cmd-*` | System commands | `omarchy-cmd-screenshot` |
| `omarchy-capture-*` | Screenshots and recordings | `omarchy-capture-screenshot` |
| `omarchy-pkg-*` | Package management | `omarchy-pkg-install <pkg>` |
| `omarchy-setup-*` | Initial setup tasks | `omarchy-setup-fingerprint` |
| `omarchy-update-*` | System updates | `omarchy-update` |
@@ -308,7 +308,7 @@ omarchy-font-set <name> # Change font
omarchy-update # Full system update
omarchy-version # Show Omarchy version
omarchy-debug --no-sudo --print # Debug info (ALWAYS use these flags)
omarchy-lock-screen # Lock screen
omarchy-system-lock # Lock screen
omarchy-system-shutdown # Shutdown
omarchy-system-reboot # Reboot
```
+6
View File
@@ -0,0 +1,6 @@
[Desktop Entry]
Name=Omarchy (Hyprland uwsm)
Comment=Omarchy Hyprland session managed by uwsm
Exec=uwsm start -g -1 -e -D Hyprland hyprland.desktop
TryExec=uwsm
Type=Application
+1
View File
@@ -44,6 +44,7 @@ run_logged $OMARCHY_INSTALL/config/hardware/intel/lpmd.sh
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/fred.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/fix-wifi7-eht.sh
run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-haptic-touchpad.sh
+1 -1
View File
@@ -2,7 +2,7 @@
# - BCM4360 (20132015 MacBooks)
# - BCM4331 (2012, early 2013 MacBooks)
pci_info=$(lspci -nnv)
pci_info=$(lspci -nn)
if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "BCM4360 / BCM4331 detected"
+18
View File
@@ -0,0 +1,18 @@
# Enable Flexible Return and Event Delivery on Intel Panther Lake.
DROP_IN="/etc/limine-entry-tool.d/intel-panther-lake-fred.conf"
DEFAULT_LIMINE="/etc/default/limine"
if omarchy-hw-intel-ptl; then
if [[ ! -f $DROP_IN ]] || ! grep -q 'fred=on' "$DROP_IN"; then
sudo mkdir -p /etc/limine-entry-tool.d
cat <<EOF | sudo tee "$DROP_IN" >/dev/null
# Intel Panther Lake FRED support
KERNEL_CMDLINE[default]+=" fred=on"
EOF
fi
if [[ -f $DEFAULT_LIMINE ]] && ! grep -q 'fred=on' "$DEFAULT_LIMINE"; then
sudo tee -a "$DEFAULT_LIMINE" < "$DROP_IN" >/dev/null
fi
fi
+5 -5
View File
@@ -1,8 +1,8 @@
# Install Panther Lake kernel for Intel Panther Lake systems
# Install Panther Lake kernel for Dell XPS Panther Lake systems
# The linux-ptl kernel includes audio driver patches not yet in mainline.
if omarchy-hw-intel-ptl; then
echo "Detected Intel Panther Lake, installing PTL kernel..."
if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl; then
echo "Detected Dell XPS Panther Lake, installing PTL kernel..."
omarchy-pkg-add linux-ptl linux-ptl-headers
for pkg in linux linux-headers; do
@@ -10,8 +10,8 @@ if omarchy-hw-intel-ptl; then
done
sudo mkdir -p /etc/limine-entry-tool.d
cat <<EOF | sudo tee /etc/limine-entry-tool.d/intel-panther-lake.conf >/dev/null
# Only show Panther Lake kernel in boot menu
cat <<EOF | sudo tee /etc/limine-entry-tool.d/dell-xps-panther-lake.conf >/dev/null
# Only show Panther Lake kernel in boot menu on Dell XPS Panther Lake
BOOT_ORDER="linux-ptl*, *fallback, Snapshots"
EOF
fi
+6
View File
@@ -24,6 +24,12 @@ if [[ -n $NVIDIA ]]; then
# Configure modprobe for early KMS
sudo tee /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia_drm modeset=1
EOF
# Ensure NVreg_UseKernelSuspendNotifiers is used for hibernation
sudo tee -a /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia NVreg_PreserveVideoMemoryAllocations=0
options nvidia NVreg_UseKernelSuspendNotifiers=1
EOF
# Configure mkinitcpio for early loading
+8 -7
View File
@@ -5,6 +5,14 @@ sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr
# Setup user theme folder
mkdir -p ~/.config/omarchy/themes
# Add managed policy directories for Chromium and Brave for theme changes.
# Must exist before the first omarchy-theme-set, which writes color.json into them.
sudo mkdir -p /etc/chromium/policies/managed
sudo chmod a+rw /etc/chromium/policies/managed
sudo mkdir -p /etc/brave/policies/managed
sudo chmod a+rw /etc/brave/policies/managed
# Set initial theme
omarchy-theme-set "Tokyo Night"
rm -rf ~/.config/chromium/SingletonLock # otherwise archiso will own the chromium singleton
@@ -16,12 +24,5 @@ ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current
mkdir -p ~/.config/mako
ln -snf ~/.config/omarchy/current/theme/mako.ini ~/.config/mako/config
# Add managed policy directories for Chromium and Brave for theme changes
sudo mkdir -p /etc/chromium/policies/managed
sudo chmod a+rw /etc/chromium/policies/managed
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
+1
View File
@@ -8,6 +8,7 @@ sudo ufw allow 53317/tcp
# Allow Docker containers to use DNS on host
sudo ufw allow in proto udp from 172.16.0.0/12 to 172.17.0.1 port 53 comment 'allow-docker-dns'
sudo ufw allow in proto udp from 192.168.0.0/16 to 172.17.0.1 port 53 comment 'allow-docker-dns'
# Turn on the firewall
sudo ufw --force enable
+8 -3
View File
@@ -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 <<EOF >/dev/null
HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs)
EOF
@@ -29,6 +27,10 @@ EOF
CMDLINE=$(grep "^[[:space:]]*cmdline:" "$limine_config" | head -1 | sed 's/^[[:space:]]*cmdline:[[:space:]]*//')
# Write /etc/default/limine *before* installing limine-mkinitcpio-hook, whose
# post-transaction deploy hook runs limine-install and reads this file. Without
# it, ESP_PATH falls back to bootctl, which in a chroot prints a warning that
# gets captured as the path and trips a spurious "invalid ESP" error.
sudo cp $OMARCHY_PATH/default/limine/default.conf /etc/default/limine
sudo sed -i "s|@@CMDLINE@@|$CMDLINE|g" /etc/default/limine
@@ -42,7 +44,8 @@ EOF
sudo sed -i '/^ENABLE_UKI=/d; /^ENABLE_LIMINE_FALLBACK=/d' /etc/default/limine
fi
# Remove the original config file if it's not /boot/limine.conf
# Remove the original config file if it's not /boot/limine.conf, so the deploy
# hook doesn't see conflicting configs on the same ESP.
if [[ $limine_config != "/boot/limine.conf" ]] && [[ -f $limine_config ]]; then
sudo rm "$limine_config"
fi
@@ -50,6 +53,8 @@ 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
sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook
# 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 /
+6 -1
View File
@@ -2,16 +2,21 @@
omarchy-refresh-sddm
# Setup SDDM login service
sudo mkdir -p /usr/local/share/wayland-sessions
sudo cp "$OMARCHY_PATH/default/wayland-sessions/omarchy.desktop" /usr/local/share/wayland-sessions/omarchy.desktop
sudo mkdir -p /etc/sddm.conf.d
if [[ ! -f /etc/sddm.conf.d/autologin.conf ]]; then
cat <<EOF | sudo tee /etc/sddm.conf.d/autologin.conf
[Autologin]
User=$USER
Session=hyprland-uwsm
Session=omarchy
[Theme]
Current=omarchy
EOF
else
sudo sed -i 's/^Session=hyprland-uwsm$/Session=omarchy/' /etc/sddm.conf.d/autologin.conf
fi
# Prevent password-based SDDM logins from creating an encrypted login keyring
+4 -1
View File
@@ -17,6 +17,7 @@ btop
chromium
clang
claude-code
cliamp
cups
cups-browsed
cups-filters
@@ -24,8 +25,10 @@ cups-pdf
docker
docker-buildx
docker-compose
dosfstools
dotnet-runtime-9.0
dust
elephant-all
evince
exfatprogs
expac
@@ -91,7 +94,6 @@ nvim
obs-studio
obsidian
omarchy-nvim
omarchy-walker
pamixer
pinta
playerctl
@@ -131,6 +133,7 @@ ufw-docker
unzip
usage
uwsm
walker
waybar
whois
wireless-regdb
-7
View File
@@ -7,18 +7,13 @@ base
base-devel
broadcom-wl
btrfs-progs
dart
dkms
egl-wayland
git
gst-plugin-pipewire
gtk4-layer-shell
htop
intltool
iwd
jdk-openjdk
libpulse
libsass
intel-ipu7-camera
intel-lpmd
intel-media-driver
@@ -45,11 +40,9 @@ pipewire-alsa
pipewire-jack
pipewire-pulse
qt6-wayland
sassc
snapper
thermald
webp-pixbuf-loader
wget
yay-debug
tuxedo-drivers-nocompatcheck-dkms
yt6801-dkms
+1
View File
@@ -4,3 +4,4 @@ omarchy-npx-install @github/copilot copilot
omarchy-npx-install opencode-ai opencode
omarchy-npx-install playwright playwright-cli
omarchy-npx-install @mariozechner/pi-coding-agent pi
omarchy-npx-install @kitlangton/ghui ghui
+1
View File
@@ -2,3 +2,4 @@ ICON_DIR="$HOME/.local/share/applications/icons"
omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png"
omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png"
omarchy-tui-install "Cliamp" "cliamp" tile "$ICON_DIR/Cliamp.png"
+1 -1
View File
@@ -11,7 +11,7 @@ fi
echo "Copy hooks examples"
cp -r $OMARCHY_PATH/config/omarchy/* $HOME/.config/omarchy/
echo "Add packages for updated omarchy-cmd-screenshot"
echo "Add packages for updated omarchy-capture-screenshot"
omarchy-pkg-add grim slurp
echo "Add nfs support by default to Nautilus"
+29
View File
@@ -0,0 +1,29 @@
echo "Move Obsidian flags from Hyprland binding to Obsidian user flags"
OBSIDIAN_FLAGS_FILE="$HOME/.config/obsidian/user-flags.conf"
OBSIDIAN_DEFAULT_FLAGS_FILE="$OMARCHY_PATH/config/obsidian/user-flags.conf"
mkdir -p "$(dirname "$OBSIDIAN_FLAGS_FILE")"
if [[ ! -f $OBSIDIAN_FLAGS_FILE ]]; then
cp "$OBSIDIAN_DEFAULT_FLAGS_FILE" "$OBSIDIAN_FLAGS_FILE"
else
missing_flags=$(grep -vE '^(#|$)' "$OBSIDIAN_DEFAULT_FLAGS_FILE" | grep -vxFf "$OBSIDIAN_FLAGS_FILE" || true)
if [[ -n $missing_flags ]]; then
{
echo
echo "# Added by Omarchy migration 1776434586: Obsidian launch flags moved from Hyprland binding."
printf "%s\n" "$missing_flags"
} >>"$OBSIDIAN_FLAGS_FILE"
fi
fi
if [[ -f ~/.config/hypr/bindings.conf ]]; then
sed -i '/Obsidian, exec/ {
s/ -disable-gpu//g
s/ --disable-gpu//g
s/ --enable-wayland-ime//g
s/"uwsm app -- obsidian/"uwsm-app -- obsidian/g
}' ~/.config/hypr/bindings.conf
fi
+9
View File
@@ -0,0 +1,9 @@
echo "Ensure NVreg_UseKernelSuspendNotifiers is used for hibernation"
if [[ -f /etc/modprobe.d/nvidia.conf ]] && ! grep -q "NVreg_PreserveVideoMemoryAllocations" /etc/modprobe.d/nvidia.conf; then
sudo tee -a /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia NVreg_PreserveVideoMemoryAllocations=0
options nvidia NVreg_UseKernelSuspendNotifiers=1
EOF
sudo limine-update
fi
+3
View File
@@ -0,0 +1,3 @@
echo "Install dosfstools for FAT filesystem utilities like fsck.fat and mkfs.fat"
omarchy-pkg-add dosfstools
+5
View File
@@ -0,0 +1,5 @@
echo "Allow Docker DNS from Docker's 192.168 address pool"
if omarchy-cmd-present ufw && sudo ufw status | grep -q "Status: active"; then
sudo ufw allow in proto udp from 192.168.0.0/16 to 172.17.0.1 port 53 comment 'allow-docker-dns'
fi
+8
View File
@@ -0,0 +1,8 @@
echo "Use Omarchy UWSM session without graphical.target startup wait"
sudo mkdir -p /usr/local/share/wayland-sessions
sudo cp "$OMARCHY_PATH/default/wayland-sessions/omarchy.desktop" /usr/local/share/wayland-sessions/omarchy.desktop
if [[ -f /etc/sddm.conf.d/autologin.conf ]]; then
sudo sed -i 's/^Session=hyprland-uwsm$/Session=omarchy/' /etc/sddm.conf.d/autologin.conf
fi
+9
View File
@@ -0,0 +1,9 @@
echo "Hide shutdown console messages behind Plymouth"
if [[ -f /etc/default/limine ]]; then
sudo sed -i 's/ quiet splash/ quiet splash loglevel=0 systemd.show_status=false rd.udev.log_level=0 vt.global_cursor_default=0/' /etc/default/limine
if omarchy-cmd-present limine-mkinitcpio; then
sudo limine-mkinitcpio
fi
fi
+8
View File
@@ -0,0 +1,8 @@
echo "Update Waybar screen recording command"
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
if [[ -f $WAYBAR_CONFIG ]] && grep -q 'omarchy-cmd-screenrecord' "$WAYBAR_CONFIG"; then
sed -i 's/omarchy-cmd-screenrecord/omarchy-capture-screenrecording/g' "$WAYBAR_CONFIG"
omarchy-restart-waybar
fi
+6
View File
@@ -0,0 +1,6 @@
echo "Rename lock screen command in Hypridle config"
if grep -q 'omarchy-lock-screen' ~/.config/hypr/hypridle.conf; then
sed -i 's/omarchy-lock-screen/omarchy-system-lock/g' ~/.config/hypr/hypridle.conf
omarchy-restart-hypridle
fi
+36
View File
@@ -0,0 +1,36 @@
echo "Replace deprecated sainnhe.everforest VSCode extension with reesew.everforest-theme"
# Background:
# The original "sainnhe.everforest" extension is no longer maintained — its
# upstream repo (https://github.com/sainnhe/everforest-vscode) was archived
# by the author, so it receives no updates or fixes.
# "reesew.everforest-theme" is a maintained fork of that same extension,
# published from https://github.com/reese/everforest-vscode, and is the
# replacement we now ship in themes/everforest/vscode.json.
# For each VS Code variant, uninstall the old extension and re-apply theme if the
# current Omarchy theme is everforest (which will install the new extension automatically).
uninstall_old_extension() {
local editor_cmd="$1"
omarchy-cmd-present "$editor_cmd" || return 0
if "$editor_cmd" --list-extensions | grep -Fxq "sainnhe.everforest"; then
"$editor_cmd" --uninstall-extension sainnhe.everforest >/dev/null
fi
}
uninstall_old_extension "code"
uninstall_old_extension "code-insiders"
uninstall_old_extension "codium"
uninstall_old_extension "cursor"
# If the user is currently on the everforest theme, refresh it so the updated
# vscode.json (with reesew.everforest-theme) is copied into ~/.config/omarchy/current/theme,
# then omarchy-theme-set-vscode (called by the refresh) installs the new extension.
THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]] && [[ "$(cat "$THEME_NAME_PATH")" == "everforest" ]]; then
omarchy-theme-refresh
fi
+7
View File
@@ -0,0 +1,7 @@
echo "Replace coterie of individual Elephant packages with the single elephant-all package"
if omarchy-pkg-present omarchy-walker; then
omarchy-pkg-drop omarchy-walker
omarchy-pkg-add walker elephant-all
omarchy-refresh-walker
fi
+9
View File
@@ -0,0 +1,9 @@
echo "Enable FRED on Intel Panther Lake systems"
DEFAULT_LIMINE="/etc/default/limine"
if omarchy-hw-intel-ptl && [[ -f $DEFAULT_LIMINE ]] && ! grep -q 'fred=on' "$DEFAULT_LIMINE"; then
source "$OMARCHY_PATH/install/config/hardware/intel/fred.sh"
sudo limine-update
fi
+5
View File
@@ -0,0 +1,5 @@
echo "Update interface_branding_color for limine 12 (palette index -> RRGGBB)"
if [[ -f /boot/limine.conf ]]; then
sudo sed -i 's/^interface_branding_color: 2$/interface_branding_color: 9ece6a/' /boot/limine.conf
fi
+16
View File
@@ -0,0 +1,16 @@
echo "Restore stock kernel on non-XPS Panther Lake systems"
if omarchy-hw-intel-ptl && ! omarchy-hw-match "XPS"; then
omarchy-pkg-add linux linux-headers
for pkg in linux-ptl linux-ptl-headers; do
sudo pacman -Rdd --noconfirm "$pkg" 2>/dev/null || true
done
sudo rm -f /etc/limine-entry-tool.d/intel-panther-lake.conf
sudo rm -f /etc/limine-entry-tool.d/dell-xps-panther-lake.conf
if omarchy-cmd-present limine-update; then
sudo limine-update
fi
fi
+8
View File
@@ -0,0 +1,8 @@
echo "Rename screen recording command"
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
if [[ -f $WAYBAR_CONFIG ]] && grep -q 'omarchy-capture-screencording' "$WAYBAR_CONFIG"; then
sed -i 's/omarchy-capture-screencording/omarchy-capture-screenrecording/g' "$WAYBAR_CONFIG"
omarchy-restart-waybar
fi
+5
View File
@@ -0,0 +1,5 @@
echo "Symlink Brave Origin Beta flags to brave-flags.conf so both browsers share configuration"
if [[ ! -e ~/.config/brave-origin-beta-flags.conf ]]; then
ln -s brave-flags.conf ~/.config/brave-origin-beta-flags.conf
fi
+13
View File
@@ -0,0 +1,13 @@
echo "Add cliamp music TUI player (Super+Shift+Alt+M)"
if omarchy-pkg-missing cliamp; then
omarchy-pkg-add cliamp
cp ~/.local/share/omarchy/applications/icons/Cliamp.png ~/.local/share/applications/icons/Cliamp.png
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
omarchy-tui-install "Cliamp" "cliamp" tile "$HOME/.local/share/applications/icons/Cliamp.png"
if [[ -f ~/.config/hypr/bindings.conf ]] && ! grep -q "cliamp" ~/.config/hypr/bindings.conf; then
sed -i '/^bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify/a bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp' ~/.config/hypr/bindings.conf
fi
fi
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

+1 -1
View File
@@ -1,4 +1,4 @@
{
"name": "Everforest Dark",
"extension": "sainnhe.everforest"
"extension": "reesew.everforest-theme"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

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