diff --git a/applications/nvim.desktop b/applications/nvim.desktop deleted file mode 100644 index 23fab41f..00000000 --- a/applications/nvim.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Name=Neovim -GenericName=Text Editor -Comment=Edit text files -Exec=omarchy-launch-editor %F -Terminal=false -Type=Application -Keywords=Text;editor; -Icon=nvim -Categories=Utility;TextEditor; -StartupNotify=false -MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; diff --git a/bin/omarchy-hyprland-workspace-toggle-gaps b/bin/omarchy-hyprland-workspace-toggle-gaps index 4304758a..f7882305 100755 --- a/bin/omarchy-hyprland-workspace-toggle-gaps +++ b/bin/omarchy-hyprland-workspace-toggle-gaps @@ -4,7 +4,7 @@ workspace_id=$(hyprctl activeworkspace -j | jq -r .id) gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0") if [[ $gaps == "0" ]]; then - hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, border:true" + hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2" else \ - hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, border:false" + hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0" fi diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 6b989ca9..10337685 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -287,10 +287,10 @@ show_install_ai_menu() { echo ollama ) - case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini [AUR]\n󱚤 OpenAI Codex [AUR]\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in + case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini [AUR]\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in *Claude*) install "Claude Code" "claude-code" ;; *Cursor*) aur_install "Cursor CLI" "cursor-cli" ;; - *OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;; + *OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;; *Gemini*) aur_install "Gemini" "gemini-cli" ;; *Studio*) install "LM Studio" "lmstudio" ;; *Ollama*) install "Ollama" $ollama_pkg ;; @@ -395,7 +395,7 @@ show_update_menu() { *Hardware*) show_update_hardware_menu ;; *Firmware*) present_terminal omarchy-update-firmware ;; *Timezone*) present_terminal omarchy-tz-select ;; - *Time*) present_terminal omarchy-reset-time ;; + *Time*) present_terminal omarchy-update-time ;; *Password*) show_update_password_menu ;; *) show_main_menu ;; esac diff --git a/bin/omarchy-menu-keybindings b/bin/omarchy-menu-keybindings index 4547a6dc..39a9e0b6 100755 --- a/bin/omarchy-menu-keybindings +++ b/bin/omarchy-menu-keybindings @@ -49,6 +49,17 @@ parse_keycodes() { code="${BASH_REMATCH[1]}" symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE") echo "${line/code:${code}/$symbol}" + elif [[ "$line" =~ mouse:([0-9]+) ]]; then + code="${BASH_REMATCH[1]}" + + case "$code" in + 272) symbol="LEFT MOUSE BUTTON" ;; + 273) symbol="RIGHT MOUSE BUTTON" ;; + 274) symbol="MIDDLE MOUSE BUTTON" ;; + *) symbol="mouse:${code}" ;; + esac + + echo "${line/mouse:${code}/$symbol}" else echo "$line" fi @@ -101,6 +112,11 @@ dynamic_bindings() { -e 's/^77,/SUPER SHIFT CTRL ALT,/' } +# Hardcoded bindings, like the copy-url extension and such +static_bindings() { + echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url" +} + # Parse and format keybindings # # `awk` does the heavy lifting: @@ -147,13 +163,67 @@ parse_bindings() { }' } +prioritize_entries() { + awk ' + { + line = $0 + prio = 50 + if (match(line, /Terminal/)) prio = 0 + if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1 + if (match(line, /File manager/)) prio = 2 + if (match(line, /Launch apps/)) prio = 3 + if (match(line, /Omarchy menu/)) prio = 4 + if (match(line, /System menu/)) prio = 5 + if (match(line, /Theme menu/)) prio = 6 + if (match(line, /Full screen/)) prio = 7 + if (match(line, /Close window/)) prio = 8 + if (match(line, /Toggle window floating/)) prio = 9 + if (match(line, /Toggle window split/)) prio = 10 + if (match(line, /Universal/)) prio = 11 + if (match(line, /Clipboard/)) prio = 12 + if (match(line, /Emoji picker/)) prio = 13 + if (match(line, /Color picker/)) prio = 14 + if (match(line, /Screenshot/)) prio = 15 + if (match(line, /Screenrecording/)) prio = 16 + if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17 + if (match(line, /Move window to workspace/)) prio = 18 + if (match(line, /Swap window/)) prio = 19 + if (match(line, /Move window focus/)) prio = 20 + if (match(line, /Move window$/)) prio = 21 + if (match(line, /Resize window/)) prio = 22 + if (match(line, /Expand window/)) prio = 23 + if (match(line, /Shrink window/)) prio = 24 + if (match(line, /scratchpad/)) prio = 25 + if (match(line, /notification/)) prio = 26 + if (match(line, /Toggle window transparency/)) prio = 27 + if (match(line, /Toggle workspace gaps/)) prio = 28 + if (match(line, /Toggle nightlight/)) prio = 29 + if (match(line, /group/)) prio = 94 + if (match(line, /Scroll active workspace/)) prio = 95 + if (match(line, /Cycle to/)) prio = 96 + if (match(line, /Reveal active/)) prio = 97 + if (match(line, /Apple Display/)) prio = 98 + if (match(line, /XF86/)) prio = 99 + + # print "priorityline" + printf "%d\t%s\n", prio, line + }' | + sort -k1,1n -k2,2 | + cut -f2- +} + monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') menu_height=$((monitor_height * 40 / 100)) build_keymap_cache -dynamic_bindings | +{ + dynamic_bindings + static_bindings +} | sort -u | parse_keycodes | parse_bindings | + prioritize_entries | walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height" + diff --git a/bin/omarchy-restart-walker b/bin/omarchy-restart-walker index 4abcb88e..1b5f4ea1 100755 --- a/bin/omarchy-restart-walker +++ b/bin/omarchy-restart-walker @@ -17,5 +17,6 @@ if [[ $EUID -eq 0 ]]; then " else setsid uwsm-app -- elephant & + wait 2 setsid uwsm-app -- walker --gapplication-service & fi diff --git a/bin/omarchy-theme-set-obsidian b/bin/omarchy-theme-set-obsidian index 5bb1b7b8..4ff70d4c 100755 --- a/bin/omarchy-theme-set-obsidian +++ b/bin/omarchy-theme-set-obsidian @@ -87,6 +87,35 @@ calculate_brightness() { echo $(((r * 299 + g * 587 + b * 114) / 1000)) } +# Calculate approximate contrast ratio between two colors +# Returns ratio scaled by 100 (e.g., 450 = 4.5:1 ratio) +# (this is due to bash not supporting decimal math) +calculate_contrast_ratio() { + local hex1="$1" hex2="$2" + local br1=$(calculate_brightness "$hex1") # 0-255 range + local br2=$(calculate_brightness "$hex2") # 0-255 range + + # Ensure br1 is the lighter color (higher brightness) + if [ $br1 -lt $br2 ]; then + local temp=$br1 + br1=$br2 + br2=$temp + fi + + # Approximate contrast ratio scaled by 100 + # Add offset to avoid division by zero and approximate WCAG +0.05 behavior + echo $(((br1 + 13) * 100 / (br2 + 13))) +} + +# Check if two colors meet minimum contrast threshold +# Usage: meets_contrast_threshold +# Both ratio and threshold should be scaled by 100 (e.g., 300 = 3:1) +meets_contrast_threshold() { + local ratio="$1" # Ratio scaled by 100 (from calculate_contrast_ratio) + local threshold="$2" # Threshold scaled by 100 (300=3:1, 450=4.5:1, 700=7:1) + [ $ratio -ge $threshold ] +} + # Calculate color distance (euclidean in RGB space) color_distance() { local hex1="$1" @@ -229,38 +258,30 @@ extract_theme_data() { fi done - # Sort by distance and get the closest color for code background - local -a closest_to_bg - readarray -t closest_to_bg < <(printf '%s\n' "${bg_distances[@]}" | sort -n | head -1 | cut -d: -f2) - # All background variations use the same as primary background local bg_primary_alt="$bg_color" local bg_secondary="$bg_color" local bg_secondary_alt="$bg_color" - # Code block background uses the closest different color - local code_bg="${closest_to_bg[0]}" - - # If no different color available, create a subtle variant for code blocks - if [ -z "$code_bg" ]; then - read -r r g b <<<"$(hex_to_rgb "$bg_color")" - if [ $bg_brightness -gt 127 ]; then - r=$((r - 10)) - g=$((g - 10)) - b=$((b - 10)) - else - r=$((r + 15)) - g=$((g + 15)) - b=$((b + 15)) - fi - [ $r -lt 0 ] && r=0 - [ $r -gt 255 ] && r=255 - [ $g -lt 0 ] && g=0 - [ $g -gt 255 ] && g=255 - [ $b -lt 0 ] && b=0 - [ $b -gt 255 ] && b=255 - code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b") + # Generate code background color that will contrast with foreground text + read -r r g b <<<"$(hex_to_rgb "$bg_color")" + if [ $bg_brightness -gt 127 ]; then + r=$((r - 10)) + g=$((g - 10)) + b=$((b - 10)) + else + r=$((r + 15)) + g=$((g + 15)) + b=$((b + 15)) fi + [ $r -lt 0 ] && r=0 + [ $r -gt 255 ] && r=255 + [ $g -lt 0 ] && g=0 + [ $g -gt 255 ] && g=255 + [ $b -lt 0 ] && b=0 + [ $b -gt 255 ] && b=255 + code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b") + # Find closest color to foreground for code block text local code_fg="" @@ -345,6 +366,22 @@ extract_theme_data() { border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b") fi + # Set text colors for muted/faint based on contrast + local text_muted_color="$border_color" + local text_faint_color="$border_color" + + # Validate border color contrast against background + + # Represents a 3:1 WCAG contrast ratio + local ideal_contrast_ratio=300 + + local border_contrast=$(calculate_contrast_ratio "$border_color" "$bg_color") + if ! meets_contrast_threshold "$border_contrast" "$ideal_contrast_ratio"; then + # Override text colors for readability, keep border color for visibility + text_muted_color="$fg_color" + text_faint_color="$fg_color" + fi + # Get unique colors array (without bg/fg) sorted by frequency local -a unique_colors readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency) @@ -409,8 +446,8 @@ extract_theme_data() { --text-mark: ${color_slots[7]}; --interactive-accent: ${color_slots[8]}; --blockquote-border: ${color_slots[9]}; - --text-muted: $border_color; /* Use border color for muted text */ - --text-faint: $border_color; /* Use border color for faint text */ + --text-muted: $text_muted_color; /* Use text-specific color for muted text */ + --text-faint: $text_faint_color; /* Use text-specific color for faint text */ /* Additional mappings */ --text-accent: var(--interactive-accent); diff --git a/bin/omarchy-update b/bin/omarchy-update index 0152af0c..32f825b1 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -4,6 +4,17 @@ set -e trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR +gum style --border normal --border-foreground 6 --padding "1 2" --margin "1 0" \ + "Ready to update Omarchy?" \ + "" \ + "• You cannot stop the update once you start!" \ + "• Make sure you're not on battery power or have sufficient charge" + +if ! gum confirm --default=false "Continue with update?"; then + echo "Update cancelled" + exit 0 +fi + omarchy-snapshot create || [ $? -eq 127 ] omarchy-update-git omarchy-update-perform diff --git a/bin/omarchy-update-keyring b/bin/omarchy-update-keyring new file mode 100755 index 00000000..5e6d2849 --- /dev/null +++ b/bin/omarchy-update-keyring @@ -0,0 +1,12 @@ +#!/bin/bash + +# Ensure we have the omarchy-keyring and it's populated +if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then + sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org + sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571 + + sudo pacman -Sy + omarchy-pkg-add omarchy-keyring + + sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 +fi diff --git a/bin/omarchy-update-perform b/bin/omarchy-update-perform index 9e68a67b..f2b7ddc0 100755 --- a/bin/omarchy-update-perform +++ b/bin/omarchy-update-perform @@ -2,6 +2,8 @@ set -e +omarchy-update-time +omarchy-update-keyring omarchy-update-available-reset omarchy-update-system-pkgs omarchy-migrate diff --git a/bin/omarchy-reset-time b/bin/omarchy-update-time similarity index 100% rename from bin/omarchy-reset-time rename to bin/omarchy-update-time diff --git a/bin/omarchy-webapp-remove b/bin/omarchy-webapp-remove index ca4daefc..a6f4ea46 100755 --- a/bin/omarchy-webapp-remove +++ b/bin/omarchy-webapp-remove @@ -30,7 +30,7 @@ else fi if [[ ${#APP_NAMES[@]} -eq 0 ]]; then - echo "You must provide web app names." + echo "You must select at least one web app to remove." exit 1 fi diff --git a/config/fcitx5/conf/clipboard.conf b/config/fcitx5/conf/clipboard.conf new file mode 100644 index 00000000..8aef5a8f --- /dev/null +++ b/config/fcitx5/conf/clipboard.conf @@ -0,0 +1,2 @@ +TriggerKey= +PastePrimaryKey= diff --git a/config/ghostty/config b/config/ghostty/config index f714edb3..49d2edca 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -17,11 +17,11 @@ gtk-toolbar-style = flat # Cursor styling cursor-style = "block" cursor-style-blink = false -shell-integration-features = no-cursor + +# Cursor styling + SSH session terminfo +# (all shell integration options must be passed together) +shell-integration-features = no-cursor,ssh-env # Keyboard bindings keybind = shift+insert=paste_from_clipboard keybind = control+insert=copy_to_clipboard - -# SSH session terminfo -shell-integration-features = ssh-env diff --git a/config/git/config b/config/git/config new file mode 100644 index 00000000..0f8e9797 --- /dev/null +++ b/config/git/config @@ -0,0 +1,28 @@ +# See https://git-scm.com/docs/git-config + +[alias] + co = checkout + br = branch + ci = commit + st = status +[init] + defaultBranch = master +[pull] + rebase = true # Rebase (instead of merge) on pull +[push] + autoSetupRemote = true # Automatically set upstream branch on push +[diff] + algorithm = histogram # Clearer diffs on moved/edited lines + colorMoved = plain # Highlight moved blocks in diffs + mnemonicPrefix = true # More intuitive refs in diff output +[commit] + verbose = true # Include diff comment in commit message template +[column] + ui = auto # Output in columns when possible +[branch] + sort = -committerdate # Sort branches by most recent commit first +[tag] + sort = -version:refname # Sort version numbers as you would expect +[rerere] + enabled = true # Record and reuse conflict resolutions + autoupdate = true # Apply stored conflict resolutions automatically diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index d63a8ce8..1f60098a 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -12,7 +12,7 @@ bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop bindd = SUPER SHIFT, D, Docker, exec, $terminal -e 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, W, Typora, exec, uwsm-app -- typora +bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password # If your web app url contains #, type it as ## to prevent hyprland treating it as a comment diff --git a/config/hypr/looknfeel.conf b/config/hypr/looknfeel.conf index 39022b89..62e26344 100644 --- a/config/hypr/looknfeel.conf +++ b/config/hypr/looknfeel.conf @@ -2,9 +2,10 @@ # https://wiki.hyprland.org/Configuring/Variables/#general general { - # No gaps between windows + # No gaps between windows or borders # gaps_in = 0 # gaps_out = 0 + # border_size = 0 # Use master layout instead of dwindle # layout = master diff --git a/config/imv/config b/config/imv/config new file mode 100644 index 00000000..f54c29af --- /dev/null +++ b/config/imv/config @@ -0,0 +1,2 @@ +[binds] + = exec lp $imv_current_file diff --git a/config/uwsm/env b/config/uwsm/env index 065fcdac..b988bc29 100644 --- a/config/uwsm/env +++ b/config/uwsm/env @@ -2,7 +2,7 @@ # Ensure Omarchy bins are in the path export OMARCHY_PATH=$HOME/.local/share/omarchy -export PATH=$OMARCHY_PATH/bin/:$PATH +export PATH=$OMARCHY_PATH/bin:$PATH # Set default terminal and editor source ~/.config/uwsm/default diff --git a/config/walker/config.toml b/config/walker/config.toml index 85a86a12..240c95e0 100644 --- a/config/walker/config.toml +++ b/config/walker/config.toml @@ -1,28 +1,12 @@ force_keyboard_focus = true # forces keyboard forcus to stay in Walker -close_when_open = true # close walker when invoking while already opened selection_wrap = true # wrap list if at bottom or top -click_to_close = true # closes walker if clicking outside of the main content area -global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config -exact_search_prefix = "'" # disable fuzzy searching theme = "omarchy-default" # theme to use -disable_mouse = false # disable mouse (on input and list only) additional_theme_location = "~/.local/share/omarchy/default/walker/themes/" -[shell] -anchor_top = true -anchor_bottom = true -anchor_left = true -anchor_right = true - [placeholders] "default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other" [keybinds] -close = ["Escape"] -next = ["Down"] -previous = ["Up"] -toggle_exact = ["ctrl e"] -resume_last_query = ["ctrl r"] quick_activate = [] [providers] @@ -31,11 +15,6 @@ default = [ "menus", "websearch", ] # providers to be queried by default -empty = ["desktopapplications"] # providers to be queried when query is empty -max_results = 50 # global max results - -[providers.sets] # define your own defaults/empty sets of providers -[providers.max_results_provider] # define max results per provider in here [[providers.prefixes]] prefix = "/" @@ -60,86 +39,3 @@ provider = "websearch" [[providers.prefixes]] prefix = "$" provider = "clipboard" - -[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies -dmenu = [{ action = "select", default = true, bind = "Return" }] - -providerlist = [ - { action = "activate", default = true, bind = "Return", after = "ClearReload" }, -] - -bluetooth = [ - { action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" }, - { action = "trust", bind = "ctrl t", after = "AsyncReload" }, - { action = "untrust", bind = "ctrl t", after = "AsyncReload" }, - { action = "pair", bind = "Return", after = "AsyncReload" }, - { action = "remove", bind = "ctrl d", after = "AsyncReload" }, - { action = "connect", bind = "Return", after = "AsyncReload" }, - { action = "disconnect", bind = "Return", after = "AsyncReload" }, -] - -archlinuxpkgs = [ - { action = "install", bind = "Return", default = true }, - { action = "remove", bind = "Return" }, -] - -calc = [ - { action = "copy", default = true, bind = "Return" }, - { action = "delete", bind = "ctrl d", after = "AsyncReload" }, - { action = "save", bind = "ctrl s", after = "AsyncClearReload" }, -] - -websearch = [ - { action = "search", default = true, bind = "Return" }, - { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" }, -] - -desktopapplications = [ - { action = "start", default = true, bind = "Return" }, - { action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" }, - { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" }, - { action = "pin", bind = "ctrl p", after = "AsyncReload" }, - { action = "unpin", bind = "ctrl p", after = "AsyncReload" }, - { action = "pinup", bind = "ctrl n", after = "AsyncReload" }, - { action = "pindown", bind = "ctrl m", after = "AsyncReload" }, -] - -files = [ - { action = "open", default = true, bind = "Return" }, - { action = "opendir", label = "open dir", bind = "ctrl Return" }, - { action = "copypath", label = "copy path", bind = "ctrl shift c" }, - { action = "copyfile", label = "copy file", bind = "ctrl c" }, -] - -todo = [ - { action = "save", default = true, bind = "Return", after = "ClearReload" }, - { action = "delete", bind = "ctrl d", after = "ClearReload" }, - { action = "active", bind = "Return", after = "ClearReload" }, - { action = "inactive", bind = "Return", after = "ClearReload" }, - { action = "done", bind = "ctrl f", after = "ClearReload" }, - { action = "clear", bind = "ctrl x", after = "ClearReload", global = true }, -] - -runner = [ - { action = "run", default = true, bind = "Return" }, - { action = "runterminal", label = "run in terminal", bind = "shift Return" }, - { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" }, -] - -symbols = [ - { action = "run_cmd", label = "select", default = true, bind = "Return" }, - { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" }, -] - -unicode = [ - { action = "run_cmd", label = "select", default = true, bind = "Return" }, - { action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" }, -] - -clipboard = [ - { action = "copy", default = true, bind = "Return" }, - { action = "remove", bind = "ctrl d", after = "ClearReload" }, - { action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "ClearReload" }, - { action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "ClearReload" }, - { action = "edit", bind = "ctrl o" }, -] diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index 54f74d63..ed064953 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -50,7 +50,7 @@ "on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update", "tooltip-format": "Omarchy update available", "signal": 7, - "interval": 3600 + "interval": 21600 }, "cpu": { diff --git a/default/bash/aliases b/default/bash/aliases index 53254cbb..eabd0c62 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -1,19 +1,26 @@ # File system -alias ls='eza -lh --group-directories-first --icons=auto' -alias lsa='ls -a' -alias lt='eza --tree --level=2 --long --icons --git' -alias lta='lt -a' +if command -v eza &> /dev/null; then + alias ls='eza -lh --group-directories-first --icons=auto' + alias lsa='ls -a' + alias lt='eza --tree --level=2 --long --icons --git' + alias lta='lt -a' +fi + alias ff="fzf --preview 'bat --style=numbers --color=always {}'" -alias cd="zd" -zd() { - if [ $# -eq 0 ]; then - builtin cd ~ && return - elif [ -d "$1" ]; then - builtin cd "$1" - else - z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found" - fi -} + +if command -v zoxide &> /dev/null; then + alias cd="zd" + zd() { + if [ $# -eq 0 ]; then + builtin cd ~ && return + elif [ -d "$1" ]; then + builtin cd "$1" + else + z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found" + fi + } +fi + open() { xdg-open "$@" >/dev/null 2>&1 & } diff --git a/default/hypr/apps/jetbrains.conf b/default/hypr/apps/jetbrains.conf index 661b0a4c..f9273df1 100644 --- a/default/hypr/apps/jetbrains.conf +++ b/default/hypr/apps/jetbrains.conf @@ -1,6 +1,9 @@ -# Fixing popup size issue -windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$,floating:1 +# JetBrains windows default size +windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$ -# Fix tab dragging (always have a single space character as their title) +# Fix tab dragging (tab titles are just one space) windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^\\s$ -windowrule = nofocus, class:^(.*jetbrains.*)$, title:^\\s$ + +# Allow dialogs (like "Send usage statistics") to be focusable and clickable +windowrule = unset,nofocus,class:^(.*jetbrains.*)$,title:^$ +windowrule = unset,noinitialfocus,class:^(.*jetbrains.*)$,title:^$ diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index fbddc65c..bca80dda 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -4,7 +4,7 @@ windowrule = center, tag:floating-window windowrule = size 800 600, tag:floating-window windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float) -windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files) +windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*) windowrule = float, class:org.gnome.Calculator # Fullscreen screensaver diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index 43cd3000..8588ac6f 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -8,3 +8,7 @@ exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = omarchy-cmd-first-run exec-once = uwsm-app -- elephant exec-once = uwsm-app -- walker --gapplication-service + +# Slow app launch fix -- set systemd vars +exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1) +exec-once = dbus-update-activation-environment --systemd --all diff --git a/default/hypr/bindings/clipboard.conf b/default/hypr/bindings/clipboard.conf index 2a79989a..ffaede7a 100644 --- a/default/hypr/bindings/clipboard.conf +++ b/default/hypr/bindings/clipboard.conf @@ -1,5 +1,5 @@ # Copy / Paste -bindd = SUPER, C, Copy, sendshortcut, CTRL, Insert, -bindd = SUPER, V, Paste, sendshortcut, SHIFT, Insert, -bindd = SUPER, X, Cut, sendshortcut, CTRL, X, -bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard +bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert, +bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert, +bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X, +bindd = SUPER CTRL, V, Clipboard manager, exec, omarchy-launch-walker -m clipboard diff --git a/default/hypr/bindings/tiling-v2.conf b/default/hypr/bindings/tiling-v2.conf index 2e5e15ba..805b4b46 100644 --- a/default/hypr/bindings/tiling-v2.conf +++ b/default/hypr/bindings/tiling-v2.conf @@ -1,22 +1,22 @@ # Close windows -bindd = SUPER, W, Close active window, killactive, -bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all +bindd = SUPER, W, Close window, killactive, +bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all # Control tiling -bindd = SUPER, J, Toggle split, togglesplit, # dwindle +bindd = SUPER, J, Toggle window split, togglesplit, # dwindle bindd = SUPER, P, Pseudo window, pseudo, # dwindle -bindd = SUPER, T, Toggle floating, togglefloating, -bindd = SUPER, F, Force full screen, fullscreen, 0 +bindd = SUPER, T, Toggle window floating/tiling, togglefloating, +bindd = SUPER, F, Full screen, fullscreen, 0 bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2 bindd = SUPER ALT, F, Full width, fullscreen, 1 # Move focus with SUPER + arrow keys -bindd = SUPER, LEFT, Move focus left, movefocus, l -bindd = SUPER, RIGHT, Move focus right, movefocus, r -bindd = SUPER, UP, Move focus up, movefocus, u -bindd = SUPER, DOWN, Move focus down, movefocus, d +bindd = SUPER, LEFT, Move window focus left, movefocus, l +bindd = SUPER, RIGHT, Move window focus right, movefocus, r +bindd = SUPER, UP, Move window focus up, movefocus, u +bindd = SUPER, DOWN, Move window focus down, movefocus, d -# Switch workspaces with SUPER + [0-9] +# Switch workspaces with SUPER + [1-9] bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 bindd = SUPER, code:11, Switch to workspace 2, workspace, 2 bindd = SUPER, code:12, Switch to workspace 3, workspace, 3 @@ -26,9 +26,8 @@ bindd = SUPER, code:15, Switch to workspace 6, workspace, 6 bindd = SUPER, code:16, Switch to workspace 7, workspace, 7 bindd = SUPER, code:17, Switch to workspace 8, workspace, 8 bindd = SUPER, code:18, Switch to workspace 9, workspace, 9 -bindd = SUPER, code:19, Switch to workspace 10, workspace, 10 -# Move active window to a workspace with SUPER + SHIFT + [0-9] +# Move active window to a workspace with SUPER + SHIFT + [1-9] bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1 bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2 bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3 @@ -38,7 +37,10 @@ bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6 bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7 bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8 bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9 -bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10 + +# Control scratchpad +bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad +bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad # TAB between workspaces bindd = SUPER, TAB, Next workspace, workspace, e+1 diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index 2007b3b0..b1dc65cc 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -2,13 +2,13 @@ # Do not make changes here, but bring them to tiling-v2.conf instead. # Close windows -bindd = SUPER, W, Close active window, killactive, -bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all +bindd = SUPER, W, Close window, killactive, +bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all # Control tiling -bindd = SUPER, J, Toggle split, togglesplit, # dwindle +bindd = SUPER, J, Toggle window split, togglesplit, # dwindle bindd = SUPER, P, Pseudo window, pseudo, # dwindle -bindd = SUPER SHIFT, V, Toggle floating, togglefloating, +bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating, bindd = SHIFT, F11, Force full screen, fullscreen, 0 bindd = ALT, F11, Full width, fullscreen, 1 diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index b7b533e4..0d414bd0 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -2,7 +2,7 @@ bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu -bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system +bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings bindd = , XF86Calculator, Calculator, exec, gnome-calculator @@ -10,7 +10,7 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator # Aesthetics bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next -bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme +bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-workspace-toggle-gaps @@ -31,10 +31,10 @@ bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-b bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000 # Captures -bindd = , PRINT, Screenshot with Editing, exec, omarchy-cmd-screenshot -bindd = SHIFT, PRINT, Screenshot to Clipboard, exec, omarchy-cmd-screenshot smart clipboard +bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot +bindd = SHIFT, PRINT, Screenshot to clipboard, exec, omarchy-cmd-screenshot smart clipboard bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord -bindd = SUPER, PRINT, Color picking, exec, pkill hyprpicker || hyprpicker -a +bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a # File sharing bindd = SUPER CTRL, S, Share, exec, omarchy-menu share diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 823a1121..791e6ebd 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -120,9 +120,17 @@ misc { disable_splash_rendering = true focus_on_activate = true anr_missed_pings = 3 + new_window_takes_over_fullscreen = 1 } # https://wiki.hypr.land/Configuring/Variables/#cursor cursor { hide_on_key_press = true } + +# Style Gum confirm to match terminal theme +env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan +env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black +env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green +env = GUM_CONFIRM_UNSELECTED_FOREGROUND,0 # Black +env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey diff --git a/install/config/all.sh b/install/config/all.sh index 2304d8e9..5c19829c 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -30,3 +30,4 @@ run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-surface-keyboard.sh diff --git a/install/config/git.sh b/install/config/git.sh index 39f77ed8..22ad70f6 100644 --- a/install/config/git.sh +++ b/install/config/git.sh @@ -1,15 +1,3 @@ -# Ensure git settings live under ~/.config -mkdir -p ~/.config/git -touch ~/.config/git/config - -# Set common git aliases -git config --global alias.co checkout -git config --global alias.br branch -git config --global alias.ci commit -git config --global alias.st status -git config --global pull.rebase true -git config --global init.defaultBranch master - # Set identification from install inputs if [[ -n "${OMARCHY_USER_NAME//[[:space:]]/}" ]]; then git config --global user.name "$OMARCHY_USER_NAME" diff --git a/install/config/hardware/fix-surface-keyboard.sh b/install/config/hardware/fix-surface-keyboard.sh new file mode 100644 index 00000000..d68fe5ae --- /dev/null +++ b/install/config/hardware/fix-surface-keyboard.sh @@ -0,0 +1,23 @@ +# Detect Surface devices which require additional modules for the keyboard to work. +# Module list derived from Chris McLeod's manual install instructions +# https://chrismcleod.dev/blog/installing-arch-linux-with-secure-boot-on-a-microsoft-surface-laptop-studio/ +product_name="$(cat /sys/class/dmi/id/product_name 2>/dev/null)" +if [[ "$product_name" =~ Surface ]]; then + echo "Detected Surface Device" + + # Modules already exist in the rootfs for the default kernel. + if [[ "$product_name" != "Surface Laptop 3" ]]; then + echo "Untested Surface Device: $product_name, additional modules may be required for your device." + fi + + echo "Attempting to autodetect required pinctrl module" + pinctrl_module=$(lsmod | grep pinctrl_ | cut -f 1 -d" ") + if [[ -z "$pinctrl_module" ]]; then + echo "Failed to autodetect pinctrl module." + else + echo "Detected pinctrl module: $pinctrl_module" + fi + + echo "MODULES=(${pinctrl_module} surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw)" | sudo tee /etc/mkinitcpio.conf.d/surface_device_modules.conf >/dev/null + +fi diff --git a/install/first-run/firewall.sh b/install/first-run/firewall.sh index a38f5a56..cc187dc2 100644 --- a/install/first-run/firewall.sh +++ b/install/first-run/firewall.sh @@ -6,9 +6,6 @@ sudo ufw default allow outgoing sudo ufw allow 53317/udp sudo ufw allow 53317/tcp -# Allow SSH in -sudo ufw allow 22/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' diff --git a/install/packaging/nvim.sh b/install/packaging/nvim.sh index e7680c51..e045d19e 100644 --- a/install/packaging/nvim.sh +++ b/install/packaging/nvim.sh @@ -1 +1,2 @@ +# Includes lazyvim and the themes omarchy-nvim-setup diff --git a/install/post-install/finished.sh b/install/post-install/finished.sh index b0b41615..5b524af0 100644 --- a/install/post-install/finished.sh +++ b/install/post-install/finished.sh @@ -22,8 +22,6 @@ fi if sudo test -f /etc/sudoers.d/99-omarchy-installer; then sudo rm -f /etc/sudoers.d/99-omarchy-installer &>/dev/null - echo - echo_in_style "Remember to remove USB installer!" fi # Exit gracefully if user chooses not to reboot diff --git a/install/preflight/pacman.sh b/install/preflight/pacman.sh index 1d9a2f2f..b4e03ef7 100644 --- a/install/preflight/pacman.sh +++ b/install/preflight/pacman.sh @@ -6,6 +6,13 @@ if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then sudo cp -f ~/.local/share/omarchy/default/pacman/pacman.conf /etc/pacman.conf sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist + sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org + sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571 + + sudo pacman -Sy + sudo pacman -S --noconfirm --needed omarchy-keyring + + # Refresh all repos sudo pacman -Syu --noconfirm fi diff --git a/migrations/1759782459.sh b/migrations/1759782459.sh deleted file mode 100644 index 015fd8e0..00000000 --- a/migrations/1759782459.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Fix opening in nvim from files manager" - -cp -f $OMARCHY_PATH/applications/nvim.desktop ~/.local/share/applications/nvim.desktop diff --git a/migrations/1761569743.sh b/migrations/1761569743.sh new file mode 100644 index 00000000..f45e7bfd --- /dev/null +++ b/migrations/1761569743.sh @@ -0,0 +1,9 @@ +echo "Add default Ctrl+P binding for imv; backup existing config if present" + +if [ -f ~/.config/imv/config ]; then + cp ~/.config/imv/config ~/.config/imv/config.bak.$(date +%s) +else + mkdir -p ~/.config/imv +fi + +cp ~/.local/share/omarchy/config/imv/config ~/.config/imv/config diff --git a/migrations/1761583837.sh b/migrations/1761583837.sh new file mode 100644 index 00000000..0e32981d --- /dev/null +++ b/migrations/1761583837.sh @@ -0,0 +1,7 @@ +echo "Ensure nvim started from app launcher always starts nvim not $EDITOR" + +if [ -f /usr/share/applications/nvim.desktop ]; then + rm ~/.local/share/applications/nvim.desktop + ln -s /usr/share/applications/nvim.desktop ~/.local/share/applications/nvim.desktop + update-desktop-database ~/.local/share/applications +fi diff --git a/migrations/1761585764.sh b/migrations/1761585764.sh new file mode 100644 index 00000000..bafbfe27 --- /dev/null +++ b/migrations/1761585764.sh @@ -0,0 +1,3 @@ +echo "Disable Nvim news alerts box" + +cp /usr/share/omarchy-nvim/config/lua/plugins/disable-news-alert.lua ~/.config/nvim/lua/plugins/disable-news-alert.lua diff --git a/migrations/1761638377.sh b/migrations/1761638377.sh new file mode 100644 index 00000000..05a1fb16 --- /dev/null +++ b/migrations/1761638377.sh @@ -0,0 +1,6 @@ +echo "Turn off fcitx5 clipboard that is interferring with other applications" + +mkdir -p ~/.config/fcitx5/conf +cp $OMARCHY_PATH/config/fcitx5/conf/clipboard.conf ~/.config/fcitx5/conf/ + +omarchy-restart-xcompose diff --git a/version b/version index ff365e06..0aec50e6 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.1.3 +3.1.4