diff --git a/AGENTS.md b/AGENTS.md index c0c87cb3..689f4c50 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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/` diff --git a/applications/icons/Cliamp.png b/applications/icons/Cliamp.png new file mode 100644 index 00000000..94b3b06e Binary files /dev/null and b/applications/icons/Cliamp.png differ diff --git a/bin/omarchy-cmd-mic-mute b/bin/omarchy-audio-input-mute similarity index 79% rename from bin/omarchy-cmd-mic-mute rename to bin/omarchy-audio-input-mute index 66c73197..c0ab990c 100755 --- a/bin/omarchy-cmd-mic-mute +++ b/bin/omarchy-audio-input-mute @@ -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 diff --git a/bin/omarchy-cmd-mic-mute-thinkpad b/bin/omarchy-audio-input-mute-thinkpad similarity index 89% rename from bin/omarchy-cmd-mic-mute-thinkpad rename to bin/omarchy-audio-input-mute-thinkpad index d8a8fb63..d06c4cf6 100755 --- a/bin/omarchy-cmd-mic-mute-thinkpad +++ b/bin/omarchy-audio-input-mute-thinkpad @@ -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" diff --git a/bin/omarchy-cmd-mic-mute-xps b/bin/omarchy-audio-input-mute-xps similarity index 100% rename from bin/omarchy-cmd-mic-mute-xps rename to bin/omarchy-audio-input-mute-xps diff --git a/bin/omarchy-cmd-audio-switch b/bin/omarchy-audio-output-switch similarity index 100% rename from bin/omarchy-cmd-audio-switch rename to bin/omarchy-audio-output-switch diff --git a/bin/omarchy-brightness-display b/bin/omarchy-brightness-display index c821d289..7c421737 100755 --- a/bin/omarchy-brightness-display +++ b/bin/omarchy-brightness-display @@ -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 diff --git a/bin/omarchy-cmd-screenrecord b/bin/omarchy-capture-screenrecording similarity index 100% rename from bin/omarchy-cmd-screenrecord rename to bin/omarchy-capture-screenrecording diff --git a/bin/omarchy-cmd-screenshot b/bin/omarchy-capture-screenshot similarity index 100% rename from bin/omarchy-cmd-screenshot rename to bin/omarchy-capture-screenshot diff --git a/bin/omarchy-drive-set-password b/bin/omarchy-drive-set-password index 6dfa1dca..3fdf9b08 100755 --- a/bin/omarchy-drive-set-password +++ b/bin/omarchy-drive-set-password @@ -6,7 +6,7 @@ encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device) if [[ -n $encrypted_drives ]]; then - if (( $(wc -l << 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() { diff --git a/bin/omarchy-hyprland-monitor-internal-mirror b/bin/omarchy-hyprland-monitor-internal-mirror new file mode 100755 index 00000000..f4457b2a --- /dev/null +++ b/bin/omarchy-hyprland-monitor-internal-mirror @@ -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 diff --git a/bin/omarchy-hyprland-monitor-watch b/bin/omarchy-hyprland-monitor-watch index 1c1277d4..7d0df494 100755 --- a/bin/omarchy-hyprland-monitor-watch +++ b/bin/omarchy-hyprland-monitor-watch @@ -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 diff --git a/bin/omarchy-launch-screensaver b/bin/omarchy-launch-screensaver index 6d38c6c8..e3593ba5 100755 --- a/bin/omarchy-launch-screensaver +++ b/bin/omarchy-launch-screensaver @@ -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" diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 705e7ca6..e526bb08 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -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 ;; diff --git a/bin/omarchy-cmd-share b/bin/omarchy-menu-share similarity index 96% rename from bin/omarchy-cmd-share rename to bin/omarchy-menu-share index f5a05911..bb522686 100755 --- a/bin/omarchy-cmd-share +++ b/bin/omarchy-menu-share @@ -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 diff --git a/bin/omarchy-npx-install b/bin/omarchy-npx-install index cb3d43c6..48babc41 100755 --- a/bin/omarchy-npx-install +++ b/bin/omarchy-npx-install @@ -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 diff --git a/bin/omarchy-plymouth-reset b/bin/omarchy-plymouth-reset index 032fe73b..584c8417 100755 --- a/bin/omarchy-plymouth-reset +++ b/bin/omarchy-plymouth-reset @@ -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 diff --git a/bin/omarchy-plymouth-set b/bin/omarchy-plymouth-set index 1217f1ef..46a4a9a8 100755 --- a/bin/omarchy-plymouth-set +++ b/bin/omarchy-plymouth-set @@ -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 " >&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" diff --git a/bin/omarchy-refresh-config b/bin/omarchy-refresh-config index 80a97ba7..0e46925a 100755 --- a/bin/omarchy-refresh-config +++ b/bin/omarchy-refresh-config @@ -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 diff --git a/bin/omarchy-remove-preinstalls b/bin/omarchy-remove-preinstalls index 2d93da7b..fc5eae72 100755 --- a/bin/omarchy-remove-preinstalls +++ b/bin/omarchy-remove-preinstalls @@ -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 \ diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-screensaver similarity index 100% rename from bin/omarchy-cmd-screensaver rename to bin/omarchy-screensaver diff --git a/bin/omarchy-snapshot b/bin/omarchy-snapshot index 69d2429d..ce1bc9ca 100755 --- a/bin/omarchy-snapshot +++ b/bin/omarchy-snapshot @@ -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 ;; diff --git a/bin/omarchy-sudo-passwordless-toggle b/bin/omarchy-sudo-passwordless similarity index 91% rename from bin/omarchy-sudo-passwordless-toggle rename to bin/omarchy-sudo-passwordless index d381c478..ad157ae9 100755 --- a/bin/omarchy-sudo-passwordless-toggle +++ b/bin/omarchy-sudo-passwordless @@ -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 diff --git a/bin/omarchy-lock-screen b/bin/omarchy-system-lock similarity index 100% rename from bin/omarchy-lock-screen rename to bin/omarchy-system-lock diff --git a/bin/omarchy-theme-colors-from-alacritty b/bin/omarchy-theme-colors-from-alacritty new file mode 100755 index 00000000..8f69aeee --- /dev/null +++ b/bin/omarchy-theme-colors-from-alacritty @@ -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 " >&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" </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 diff --git a/bin/omarchy-theme-set-browser b/bin/omarchy-theme-set-browser index 3520276d..e43f0634 100755 --- a/bin/omarchy-theme-set-browser +++ b/bin/omarchy-theme-set-browser @@ -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 diff --git a/bin/omarchy-toggle-touchscreen b/bin/omarchy-toggle-touchscreen new file mode 100755 index 00000000..81414c98 --- /dev/null +++ b/bin/omarchy-toggle-touchscreen @@ -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 \ No newline at end of file diff --git a/bin/omarchy-webapp-remove b/bin/omarchy-webapp-remove index 13854b65..d4db5270 100755 --- a/bin/omarchy-webapp-remove +++ b/bin/omarchy-webapp-remove @@ -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 diff --git a/bin/omarchy-webapp-remove-all b/bin/omarchy-webapp-remove-all index 6b77f5ed..142da29d 100755 --- a/bin/omarchy-webapp-remove-all +++ b/bin/omarchy-webapp-remove-all @@ -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." diff --git a/config/brave-origin-beta-flags.conf b/config/brave-origin-beta-flags.conf new file mode 120000 index 00000000..f3609ca7 --- /dev/null +++ b/config/brave-origin-beta-flags.conf @@ -0,0 +1 @@ +brave-flags.conf \ No newline at end of file diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index 351fbe46..e7eb692d 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -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 diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf index b7d17690..7d003275 100644 --- a/config/hypr/hypridle.conf +++ b/config/hypr/hypridle.conf @@ -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 diff --git a/config/hypr/input.conf b/config/hypr/input.conf index c8b0a19c..10d122cd 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -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 diff --git a/config/obsidian/user-flags.conf b/config/obsidian/user-flags.conf new file mode 100644 index 00000000..2f9cc082 --- /dev/null +++ b/config/obsidian/user-flags.conf @@ -0,0 +1,3 @@ +# Obsidian reads this file through the Arch package wrapper. +-disable-gpu +--enable-wayland-ime diff --git a/config/omarchy/extensions/menu.sh b/config/omarchy/extensions/menu.sh index 4ededf8e..f7d0b277 100644 --- a/config/omarchy/extensions/menu.sh +++ b/config/omarchy/extensions/menu.sh @@ -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 diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index 150cfea6..cbf211c3 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -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" diff --git a/default/bash/envs b/default/bash/envs index ea8510e6..a8d01dda 100644 --- a/default/bash/envs +++ b/default/bash/envs @@ -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 diff --git a/default/elephant/omarchy_background_selector.lua b/default/elephant/omarchy_background_selector.lua index 7954266f..38bc2bf1 100644 --- a/default/elephant/omarchy_background_selector.lua +++ b/default/elephant/omarchy_background_selector.lua @@ -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 diff --git a/default/hypr/apps.conf b/default/hypr/apps.conf index 777692cd..f64c6e39 100644 --- a/default/hypr/apps.conf +++ b/default/hypr/apps.conf @@ -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 diff --git a/default/hypr/apps/jetbrains.conf b/default/hypr/apps/jetbrains.conf new file mode 100644 index 00000000..b1eea6a0 --- /dev/null +++ b/default/hypr/apps/jetbrains.conf @@ -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-.*)$ +} diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index 984b55a3..394a5f32 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -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 diff --git a/default/hypr/bindings.conf b/default/hypr/bindings.conf index 20fee804..4daf95a0 100644 --- a/default/hypr/bindings.conf +++ b/default/hypr/bindings.conf @@ -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 diff --git a/default/hypr/bindings/media.conf b/default/hypr/bindings/media.conf index c02872dc..af1496de 100644 --- a/default/hypr/bindings/media.conf +++ b/default/hypr/bindings/media.conf @@ -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 diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 628a0aec..09e2e4dd 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -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 diff --git a/default/hypr/toggles/internal-monitor-disable.conf b/default/hypr/toggles/internal-monitor-disable.conf deleted file mode 100644 index f5458f94..00000000 --- a/default/hypr/toggles/internal-monitor-disable.conf +++ /dev/null @@ -1,2 +0,0 @@ -# Disable the internal laptop monitor -monitor=eDP-1,disable diff --git a/default/limine/default.conf b/default/limine/default.conf index ff5ae56d..9beedcd4 100644 --- a/default/limine/default.conf +++ b/default/limine/default.conf @@ -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" diff --git a/default/limine/limine.conf b/default/limine/limine.conf index 9868fbc7..33eb1110 100644 --- a/default/limine/limine.conf +++ b/default/limine/limine.conf @@ -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 diff --git a/default/omarchy-skill/SKILL.md b/default/omarchy-skill/SKILL.md index 46c11e73..ba152975 100644 --- a/default/omarchy-skill/SKILL.md +++ b/default/omarchy-skill/SKILL.md @@ -108,7 +108,7 @@ cat $(which omarchy-theme-set) | `omarchy-theme-*` | Theme management | `omarchy-theme-set ` | | `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 ` | | `omarchy-setup-*` | Initial setup tasks | `omarchy-setup-fingerprint` | | `omarchy-update-*` | System updates | `omarchy-update` | @@ -308,7 +308,7 @@ omarchy-font-set # 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 ``` diff --git a/default/wayland-sessions/omarchy.desktop b/default/wayland-sessions/omarchy.desktop new file mode 100644 index 00000000..760181af --- /dev/null +++ b/default/wayland-sessions/omarchy.desktop @@ -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 diff --git a/install/config/all.sh b/install/config/all.sh index 78f249ec..2fd0f02c 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -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 diff --git a/install/config/hardware/fix-bcm43xx.sh b/install/config/hardware/fix-bcm43xx.sh index f6e0f18b..a788d6f9 100644 --- a/install/config/hardware/fix-bcm43xx.sh +++ b/install/config/hardware/fix-bcm43xx.sh @@ -2,7 +2,7 @@ # - BCM4360 (2013–2015 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" diff --git a/install/config/hardware/intel/fred.sh b/install/config/hardware/intel/fred.sh new file mode 100644 index 00000000..c25e4c79 --- /dev/null +++ b/install/config/hardware/intel/fred.sh @@ -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 </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 diff --git a/install/config/hardware/intel/ptl-kernel.sh b/install/config/hardware/intel/ptl-kernel.sh index 0e34def4..d914cf25 100644 --- a/install/config/hardware/intel/ptl-kernel.sh +++ b/install/config/hardware/intel/ptl-kernel.sh @@ -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 </dev/null -# Only show Panther Lake kernel in boot menu + cat </dev/null +# Only show Panther Lake kernel in boot menu on Dell XPS Panther Lake BOOT_ORDER="linux-ptl*, *fallback, Snapshots" EOF fi diff --git a/install/config/hardware/nvidia.sh b/install/config/hardware/nvidia.sh index 5fb37232..e5605cae 100644 --- a/install/config/hardware/nvidia.sh +++ b/install/config/hardware/nvidia.sh @@ -24,6 +24,12 @@ if [[ -n $NVIDIA ]]; then # Configure modprobe for early KMS sudo tee /etc/modprobe.d/nvidia.conf </dev/null options nvidia_drm modeset=1 +EOF + + # Ensure NVreg_UseKernelSuspendNotifiers is used for hibernation + sudo tee -a /etc/modprobe.d/nvidia.conf </dev/null +options nvidia NVreg_PreserveVideoMemoryAllocations=0 +options nvidia NVreg_UseKernelSuspendNotifiers=1 EOF # Configure mkinitcpio for early loading diff --git a/install/config/theme.sh b/install/config/theme.sh index 0dab91ad..83e2b8dd 100644 --- a/install/config/theme.sh +++ b/install/config/theme.sh @@ -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 diff --git a/install/first-run/firewall.sh b/install/first-run/firewall.sh index cc187dc2..96210c8b 100644 --- a/install/first-run/firewall.sh +++ b/install/first-run/firewall.sh @@ -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 diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh index d588f43f..06d8f93e 100644 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -1,6 +1,4 @@ if command -v limine &>/dev/null; then - sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook - sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf </dev/null HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) EOF @@ -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 / diff --git a/install/login/sddm.sh b/install/login/sddm.sh index a0366b3b..21696b48 100644 --- a/install/login/sddm.sh +++ b/install/login/sddm.sh @@ -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 <>"$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 diff --git a/migrations/1777018591.sh b/migrations/1777018591.sh new file mode 100755 index 00000000..1649b6ab --- /dev/null +++ b/migrations/1777018591.sh @@ -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 </dev/null +options nvidia NVreg_PreserveVideoMemoryAllocations=0 +options nvidia NVreg_UseKernelSuspendNotifiers=1 +EOF + sudo limine-update +fi diff --git a/migrations/1777145626.sh b/migrations/1777145626.sh new file mode 100644 index 00000000..b6518b5d --- /dev/null +++ b/migrations/1777145626.sh @@ -0,0 +1,3 @@ +echo "Install dosfstools for FAT filesystem utilities like fsck.fat and mkfs.fat" + +omarchy-pkg-add dosfstools diff --git a/migrations/1777282771.sh b/migrations/1777282771.sh new file mode 100644 index 00000000..b350376f --- /dev/null +++ b/migrations/1777282771.sh @@ -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 diff --git a/migrations/1777396666.sh b/migrations/1777396666.sh new file mode 100644 index 00000000..ea8e4326 --- /dev/null +++ b/migrations/1777396666.sh @@ -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 diff --git a/migrations/1777450869.sh b/migrations/1777450869.sh new file mode 100644 index 00000000..6b1fcc8c --- /dev/null +++ b/migrations/1777450869.sh @@ -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 diff --git a/migrations/1777464602.sh b/migrations/1777464602.sh new file mode 100644 index 00000000..8c845442 --- /dev/null +++ b/migrations/1777464602.sh @@ -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 diff --git a/migrations/1777467659.sh b/migrations/1777467659.sh new file mode 100644 index 00000000..994c30bf --- /dev/null +++ b/migrations/1777467659.sh @@ -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 diff --git a/migrations/1777511459.sh b/migrations/1777511459.sh new file mode 100644 index 00000000..b8fcb78a --- /dev/null +++ b/migrations/1777511459.sh @@ -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 diff --git a/migrations/1777542438.sh b/migrations/1777542438.sh new file mode 100644 index 00000000..3c1b75f0 --- /dev/null +++ b/migrations/1777542438.sh @@ -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 diff --git a/migrations/1777546300.sh b/migrations/1777546300.sh new file mode 100644 index 00000000..fc40e222 --- /dev/null +++ b/migrations/1777546300.sh @@ -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 diff --git a/migrations/1777570652.sh b/migrations/1777570652.sh new file mode 100644 index 00000000..ebe37936 --- /dev/null +++ b/migrations/1777570652.sh @@ -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 diff --git a/migrations/1777572869.sh b/migrations/1777572869.sh new file mode 100644 index 00000000..b8ffd217 --- /dev/null +++ b/migrations/1777572869.sh @@ -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 diff --git a/migrations/1777578316.sh b/migrations/1777578316.sh new file mode 100644 index 00000000..d9e584c2 --- /dev/null +++ b/migrations/1777578316.sh @@ -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 diff --git a/migrations/1777618046.sh b/migrations/1777618046.sh new file mode 100644 index 00000000..6c5c8f10 --- /dev/null +++ b/migrations/1777618046.sh @@ -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 diff --git a/migrations/1777620904.sh b/migrations/1777620904.sh new file mode 100644 index 00000000..767c3c1e --- /dev/null +++ b/migrations/1777620904.sh @@ -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 diff --git a/themes/catppuccin-latte/backgrounds/omarchy.png b/themes/catppuccin-latte/backgrounds/omarchy.png new file mode 100644 index 00000000..8dd666ab Binary files /dev/null and b/themes/catppuccin-latte/backgrounds/omarchy.png differ diff --git a/themes/catppuccin/backgrounds/omarchy.png b/themes/catppuccin/backgrounds/omarchy.png new file mode 100644 index 00000000..a4e90d76 Binary files /dev/null and b/themes/catppuccin/backgrounds/omarchy.png differ diff --git a/themes/ethereal/backgrounds/omarchy.png b/themes/ethereal/backgrounds/omarchy.png new file mode 100644 index 00000000..4354650f Binary files /dev/null and b/themes/ethereal/backgrounds/omarchy.png differ diff --git a/themes/everforest/backgrounds/omarchy.png b/themes/everforest/backgrounds/omarchy.png new file mode 100644 index 00000000..d759dde4 Binary files /dev/null and b/themes/everforest/backgrounds/omarchy.png differ diff --git a/themes/everforest/vscode.json b/themes/everforest/vscode.json index 02b107d0..c584417a 100644 --- a/themes/everforest/vscode.json +++ b/themes/everforest/vscode.json @@ -1,4 +1,4 @@ { "name": "Everforest Dark", - "extension": "sainnhe.everforest" + "extension": "reesew.everforest-theme" } diff --git a/themes/gruvbox/backgrounds/omarchy.png b/themes/gruvbox/backgrounds/omarchy.png new file mode 100644 index 00000000..a6feebe6 Binary files /dev/null and b/themes/gruvbox/backgrounds/omarchy.png differ diff --git a/themes/hackerman/backgrounds/omarchy.png b/themes/hackerman/backgrounds/omarchy.png new file mode 100644 index 00000000..eb91c8b0 Binary files /dev/null and b/themes/hackerman/backgrounds/omarchy.png differ diff --git a/themes/kanagawa/backgrounds/omarchy.png b/themes/kanagawa/backgrounds/omarchy.png new file mode 100644 index 00000000..c4560ce3 Binary files /dev/null and b/themes/kanagawa/backgrounds/omarchy.png differ diff --git a/themes/lumon/backgrounds/omarchy.png b/themes/lumon/backgrounds/omarchy.png new file mode 100644 index 00000000..8c194e6e Binary files /dev/null and b/themes/lumon/backgrounds/omarchy.png differ diff --git a/themes/matte-black/backgrounds/omarchy.png b/themes/matte-black/backgrounds/omarchy.png new file mode 100644 index 00000000..b34300c1 Binary files /dev/null and b/themes/matte-black/backgrounds/omarchy.png differ diff --git a/themes/miasma/backgrounds/omarchy.png b/themes/miasma/backgrounds/omarchy.png new file mode 100644 index 00000000..08d8b9a5 Binary files /dev/null and b/themes/miasma/backgrounds/omarchy.png differ diff --git a/themes/nord/backgrounds/omarchy.png b/themes/nord/backgrounds/omarchy.png new file mode 100644 index 00000000..f8b19601 Binary files /dev/null and b/themes/nord/backgrounds/omarchy.png differ diff --git a/themes/osaka-jade/backgrounds/omarchy.png b/themes/osaka-jade/backgrounds/omarchy.png new file mode 100644 index 00000000..8f691c61 Binary files /dev/null and b/themes/osaka-jade/backgrounds/omarchy.png differ diff --git a/themes/retro-82/backgrounds/omarchy.png b/themes/retro-82/backgrounds/omarchy.png new file mode 100644 index 00000000..477cad10 Binary files /dev/null and b/themes/retro-82/backgrounds/omarchy.png differ diff --git a/themes/ristretto/backgrounds/omarchy.png b/themes/ristretto/backgrounds/omarchy.png new file mode 100644 index 00000000..f1182f69 Binary files /dev/null and b/themes/ristretto/backgrounds/omarchy.png differ diff --git a/themes/rose-pine/backgrounds/omarchy.png b/themes/rose-pine/backgrounds/omarchy.png new file mode 100644 index 00000000..14f6e8a3 Binary files /dev/null and b/themes/rose-pine/backgrounds/omarchy.png differ diff --git a/themes/tokyo-night/backgrounds/4-oma-cityscape.jpg b/themes/tokyo-night/backgrounds/4-oma-cityscape.jpg new file mode 100644 index 00000000..f57916bb Binary files /dev/null and b/themes/tokyo-night/backgrounds/4-oma-cityscape.jpg differ diff --git a/themes/tokyo-night/backgrounds/5-oma.jpg b/themes/tokyo-night/backgrounds/5-oma.jpg new file mode 100644 index 00000000..3b85cd0d Binary files /dev/null and b/themes/tokyo-night/backgrounds/5-oma.jpg differ diff --git a/themes/tokyo-night/backgrounds/omarchy.png b/themes/tokyo-night/backgrounds/omarchy.png new file mode 100644 index 00000000..0f520903 Binary files /dev/null and b/themes/tokyo-night/backgrounds/omarchy.png differ diff --git a/themes/vantablack/backgrounds/omarchy.png b/themes/vantablack/backgrounds/omarchy.png new file mode 100644 index 00000000..4bf3789d Binary files /dev/null and b/themes/vantablack/backgrounds/omarchy.png differ diff --git a/themes/white/backgrounds/omarchy.png b/themes/white/backgrounds/omarchy.png new file mode 100644 index 00000000..9b5cd0c0 Binary files /dev/null and b/themes/white/backgrounds/omarchy.png differ