diff --git a/bin/omarchy-launch-walker b/bin/omarchy-launch-walker new file mode 100755 index 0000000..4de48be --- /dev/null +++ b/bin/omarchy-launch-walker @@ -0,0 +1,8 @@ +#!/bin/bash + +# Ensure elephant is running before launching walker +if ! pgrep -x elephant > /dev/null; then + setsid uwsm app -- elephant & +fi + +exec walker "$@" diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 619dfc9..4526d5d 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -29,11 +29,11 @@ menu() { local index index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1) if [[ -n "$index" ]]; then - args+=("-a" "$index") + args+=("-c" "$index") fi fi - echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}" + echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null } terminal() { diff --git a/bin/omarchy-menu-keybindings b/bin/omarchy-menu-keybindings index 093f049..4547a6d 100755 --- a/bin/omarchy-menu-keybindings +++ b/bin/omarchy-menu-keybindings @@ -156,4 +156,4 @@ dynamic_bindings | sort -u | parse_keycodes | parse_bindings | - walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" + walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height" diff --git a/bin/omarchy-refresh-elephant b/bin/omarchy-refresh-elephant new file mode 100755 index 0000000..3958a5b --- /dev/null +++ b/bin/omarchy-refresh-elephant @@ -0,0 +1,4 @@ +#!/bin/bash + +omarchy-refresh-config elephant/desktopapplications.toml +omarchy-restart-elephant diff --git a/bin/omarchy-restart-walker b/bin/omarchy-restart-walker index 7e3396a..c56be47 100755 --- a/bin/omarchy-restart-walker +++ b/bin/omarchy-restart-walker @@ -1,7 +1,6 @@ #!/bin/bash +pkill elephant +setsid uwsm app -- elephant & pkill walker -# FIXME: Just deal with the memory leak for now. -# See https://github.com/basecamp/omarchy/issues/698 -setsid uwsm-app -- walker --gapplication-service & -echo # Always end in success so we don't terminate further running +setsid uwsm app -- walker --gapplication-service & \ No newline at end of file diff --git a/config/elephant/desktopapplications.toml b/config/elephant/desktopapplications.toml new file mode 100644 index 0000000..aa6acc1 --- /dev/null +++ b/config/elephant/desktopapplications.toml @@ -0,0 +1,3 @@ +show_actions = true +only_search_title = true +history = false diff --git a/config/walker/config.toml b/config/walker/config.toml index da79b96..5554973 100644 --- a/config/walker/config.toml +++ b/config/walker/config.toml @@ -1,100 +1,141 @@ -close_when_open = true -theme = "omarchy-default" -theme_base = [] -theme_location = ["~/.local/share/omarchy/default/walker/themes/"] -hotreload_theme = true -force_keyboard_focus = true -timeout = 60 +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/" -[keys.ai] -run_last_response = ["ctrl e"] +[shell] +anchor_top = true +anchor_bottom = true +anchor_left = true +anchor_right = true -[list] -max_entries = 200 -cycle = 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" -[search] -placeholder = " Search..." +[keybinds] +close = ["Escape"] +next = ["Down"] +previous = ["Up"] +toggle_exact = ["ctrl e"] +resume_last_query = ["ctrl r"] +quick_activate = [] -[builtins.hyprland_keybinds] -path = "~/.config/hypr/hyprland.conf" -hidden = true +[providers] +default = [ + "desktopapplications", + "menus", + "websearch", +] # providers to be queried by default +empty = ["desktopapplications"] # providers to be queried when query is empty -[builtins.applications] -launch_prefix = "uwsm-app -- " -placeholder = " Search..." -prioritize_new = false -context_aware = false -show_sub_when_single = false -history = false -icon = "" -hidden = true +[[providers.prefixes]] +prefix = "/" +provider = "providerlist" -[builtins.applications.actions] -enabled = false -hide_category = true - -[builtins.bookmarks] -hidden = true - -[[builtins.bookmarks.entries]] -label = "Omarchy - Github" -url = "https://github.com/basecamp/omarchy" -keywords = ["omarchy", "github"] - -[[builtins.bookmarks.entries]] -label = "Omarchy Manual" -url = "https://manuals.omamix.org/2/the-omarchy-manual" -keywords = ["omarchy"] - -[builtins.calc] -name = "Calculator" -icon = "" -min_chars = 3 -prefix = "=" - -[builtins.windows] -switcher_only = true -hidden = true - -[builtins.clipboard] -hidden = true - -[builtins.commands] -hidden = true - -[builtins.custom_commands] -hidden = true - -[builtins.emojis] -name = "Emojis" -icon = "" -prefix = ":" - -[builtins.symbols] -after_copy = "" -hidden = true - -[builtins.finder] -use_fd = true -cmd_alt = "xdg-open $(dirname ~/%RESULT%)" -icon = "file" -name = "Finder" -preview_images = true -hidden = false +[[providers.prefixes]] prefix = "." +provider = "files" -[builtins.runner] -shell_config = "" -switcher_only = true -hidden = true +[[providers.prefixes]] +prefix = ":" +provider = "symbols" -[builtins.ssh] -hidden = true +[[providers.prefixes]] +prefix = "=" +provider = "calc" -[builtins.websearch] -switcher_only = true -hidden = true +[[providers.prefixes]] +prefix = "@" +provider = "websearch" -[builtins.translation] -hidden = true +[[providers.prefixes]] +prefix = "$" +provider = "clipboard" + +[providers.actions] +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", 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/default/hypr/autostart.conf b/default/hypr/autostart.conf index f646aac..e22c49b 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -4,7 +4,8 @@ exec-once = uwsm app -- waybar exec-once = uwsm app -- fcitx5 exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill exec-once = uwsm app -- swayosd-server -exec-once = uwsm app -- walker --gapplication-service exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+' exec-once = omarchy-cmd-first-run +exec-once = uwsm app -- elephant +exec-once = uwsm app -- walker --gapplication-service diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 19eccfd..6b20ce9 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -1,6 +1,6 @@ # Menus -bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…" -bindd = SUPER CTRL, E, Emoji picker, exec, walker -m Emojis +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 bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system diff --git a/default/walker/themes/dmenu_150.css b/default/walker/themes/dmenu_150.css deleted file mode 100644 index 14bafe7..0000000 --- a/default/walker/themes/dmenu_150.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css"); -@import url("file://~/.config/omarchy/current/theme/walker.css"); diff --git a/default/walker/themes/dmenu_150.toml b/default/walker/themes/dmenu_150.toml deleted file mode 100644 index 3c13997..0000000 --- a/default/walker/themes/dmenu_150.toml +++ /dev/null @@ -1,10 +0,0 @@ -[ui.window.box] -width = 150 - -[ui.window.box.scroll.list] -max_width = 150 -min_width = 150 -width = 150 - -[ui.window.box.search] -hide = false diff --git a/default/walker/themes/dmenu_250.css b/default/walker/themes/dmenu_250.css deleted file mode 100644 index 14bafe7..0000000 --- a/default/walker/themes/dmenu_250.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css"); -@import url("file://~/.config/omarchy/current/theme/walker.css"); diff --git a/default/walker/themes/dmenu_250.toml b/default/walker/themes/dmenu_250.toml deleted file mode 100644 index b9ffc1e..0000000 --- a/default/walker/themes/dmenu_250.toml +++ /dev/null @@ -1,11 +0,0 @@ -[ui.window.box] -width = 250 - -[ui.window.box.scroll.list] -max_width = 250 -min_width = 250 -width = 250 -max_height = 600 - -[ui.window.box.search] -hide = false diff --git a/default/walker/themes/keybindings.css b/default/walker/themes/keybindings.css deleted file mode 100644 index 14bafe7..0000000 --- a/default/walker/themes/keybindings.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css"); -@import url("file://~/.config/omarchy/current/theme/walker.css"); diff --git a/default/walker/themes/keybindings.toml b/default/walker/themes/keybindings.toml deleted file mode 100644 index c5d1b78..0000000 --- a/default/walker/themes/keybindings.toml +++ /dev/null @@ -1,48 +0,0 @@ -[ui.window.box] -width = 964 -min_width = 964 -max_width = 964 - -height = 664 -min_height = 664 -max_height = 664 - -[ui.window.box.search] -hide = false - -[ui.window.box.scroll] -v_align = "fill" -h_align = "fill" -min_width = 964 -width = 964 -max_width = 964 -min_height = 664 -height = 664 -max_height = 664 - -[ui.window.box.scroll.list] -v_align = "fill" -h_align = "fill" -min_width = 900 -width = 900 -max_width = 900 -min_height = 600 -height = 600 -max_height = 600 - -[ui.window.box.scroll.list.item] -h_align = "fill" -min_width = 900 -width = 900 -max_width = 900 - -[ui.window.box.scroll.list.item.activation_label] -hide = true - -[ui.window.box.scroll.list.placeholder] -v_align = "start" -h_align = "fill" -hide = false -min_width = 900 -width = 900 -max_width = 900 diff --git a/default/walker/themes/omarchy-default.css b/default/walker/themes/omarchy-default.css deleted file mode 100644 index 6e453b6..0000000 --- a/default/walker/themes/omarchy-default.css +++ /dev/null @@ -1,169 +0,0 @@ -/* Reset all elements */ -#window, -#box, -#search, -#password, -#input, -#prompt, -#clear, -#typeahead, -#list, -child, -scrollbar, -slider, -#item, -#text, -#label, -#sub, -#activationlabel { - all: unset; -} - -* { - font-family: monospace; - font-size: 18px; -} - -/* Window */ -#window { - background: transparent; - color: @text; -} - -/* Main box container */ -#box { - background: alpha(@base, 0.95); - padding: 20px; - border: 2px solid @border; - border-radius: 0px; -} - -/* Search container */ -#search { - background: @base; - padding: 10px; - margin-bottom: 0; -} - -/* Hide prompt icon */ -#prompt { - opacity: 0; - min-width: 0; - margin: 0; -} - -/* Hide clear button */ -#clear { - opacity: 0; - min-width: 0; -} - -/* Input field */ -#input { - background: none; - color: @text; - padding: 0; -} - -#input placeholder { - opacity: 0.5; - color: @text; -} - -/* Hide typeahead */ -#typeahead { - opacity: 0; -} - -/* List */ -#list { - background: transparent; -} - -/* List items */ -child { - padding: 0px 12px; - background: transparent; - border-radius: 0; -} - -child:selected, -child:hover { - background: transparent; -} - -/* Item layout */ -#item { - padding: 0; -} - -#item.active { - font-style: italic; -} - -/* Icon */ -#icon { - margin-right: 10px; - -gtk-icon-transform: scale(0.7); -} - -/* Text */ -#text { - color: @text; - padding: 14px 0; -} - -#label { - font-weight: normal; -} - -/* Selected state */ -child:selected #text, -child:selected #label, -child:hover #text, -child:hover #label { - color: @selected-text; -} - -/* Hide sub text */ -#sub { - opacity: 0; - font-size: 0; - min-height: 0; -} - -/* Hide activation label */ -#activationlabel { - opacity: 0; - min-width: 0; -} - -/* Scrollbar styling */ -scrollbar { - opacity: 0; -} - -/* Hide spinner */ -#spinner { - opacity: 0; -} - -/* Hide AI elements */ -#aiScroll, -#aiList, -.aiItem { - opacity: 0; - min-height: 0; -} - -/* Bar entry (switcher) */ -#bar { - opacity: 0; - min-height: 0; -} - -.barentry { - opacity: 0; -} - -@import url("file://~/.config/omarchy/current/theme/walker.css"); diff --git a/default/walker/themes/omarchy-default.toml b/default/walker/themes/omarchy-default.toml deleted file mode 100644 index 9abc5d8..0000000 --- a/default/walker/themes/omarchy-default.toml +++ /dev/null @@ -1,16 +0,0 @@ -[ui.window.box] -width = 664 -min_width = 664 -max_width = 664 -height = 396 -min_height = 396 -max_height = 396 - -# List constraints are critical - without these, the window shrinks when empty -[ui.window.box.scroll.list] -height = 300 -min_height = 300 -max_height = 300 - -[ui.window.box.scroll.list.item.icon] -pixel_size = 40 diff --git a/default/walker/themes/omarchy-default/layout.xml b/default/walker/themes/omarchy-default/layout.xml new file mode 100644 index 0000000..a79de74 --- /dev/null +++ b/default/walker/themes/omarchy-default/layout.xml @@ -0,0 +1,129 @@ + + + + + + true + Walker + + + + 644 + hidden + horizontal + center + center + + + + vertical + true + true + 10 + + + + hidden + horizontal + fill + true + true + + + + fill + true + true + + + + + + + + horizontal + 10 + true + true + + + + true + 100 + Waiting for elephant... + + + + + + No Results + 0.0 + true + + + + + + true + false + true + 600 + 300 + 0 + true + true + automatic + automatic + + + + 1 + false + + + + + + + + + + + + + + + 0 + false + + + + + + + + diff --git a/default/walker/themes/omarchy-default/style.css b/default/walker/themes/omarchy-default/style.css new file mode 100644 index 0000000..8cbe16c --- /dev/null +++ b/default/walker/themes/omarchy-default/style.css @@ -0,0 +1,122 @@ +@import "../../../../../../../.config/omarchy/current/theme/walker.css"; + +* { + all: unset; +} + +* { + font-family: monospace; + font-size: 18px; + color: @text; +} + +scrollbar { + opacity: 0; +} + +.normal-icons { + -gtk-icon-size: 16px; +} + +.large-icons { + -gtk-icon-size: 32px; +} + +.box-wrapper { + background: alpha(@base, 0.95); + padding: 20px; + border: 2px solid @border; + border-radius: 0px; +} + +.preview-box { +} + +.box { +} + +.search-container { + background: @base; + padding: 10px; +} + +.input placeholder { + opacity: 0.5; +} + +.input { +} + +.input:focus, +.input:active { + box-shadow: none; + outline: none; +} + +.content-container { +} + +.placeholder { +} + +.scroll { +} + +.list { +} + +child, +child > * { +} + +child:hover .item-box { +} + +child:selected .item-box { +} + +child:selected .item-box * { + color: @selected-text; +} + +.item-box { + padding-left: 14px; +} + +.item-text-box { + all: unset; + padding: 14px 0; +} + +.item-text { +} + +.item-subtext { + font-size: 0px; + min-height: 0px; + margin: 0px; + padding: 0px; +} + +.item-image { + margin-right: 14px; + -gtk-icon-transform: scale(0.9); +} + +.item-box.calc .item-image { + -gtk-icon-source: url("file:///home/ryan/Downloads/gitlab.svg"); +} + +.current { + font-style: italic; +} + +.keybind-hints { + background: @background; + padding: 10px; + margin-top: 10px; +} + +.preview { + background: @background; +} diff --git a/install/config/all.sh b/install/config/all.sh index eeb9810..f7a8de9 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -14,6 +14,7 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh run_logged $OMARCHY_INSTALL/config/docker.sh run_logged $OMARCHY_INSTALL/config/mimetypes.sh run_logged $OMARCHY_INSTALL/config/localdb.sh +run_logged $OMARCHY_INSTALL/config/walker-elephant.sh run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh diff --git a/install/config/browser-policies.sh b/install/config/browser-policies.sh new file mode 100644 index 0000000..cc1fc64 --- /dev/null +++ b/install/config/browser-policies.sh @@ -0,0 +1,9 @@ +# Add 1password extension to Chromium +sudo mkdir -p /etc/chromium/policies/managed/ +sudo cp $OMARCHY_PATH/default/chromium/policies/managed/onepassword.json /etc/chromium/policies/managed/onepassword.json +sudo chmod 644 /etc/chromium/policies/managed/onepassword.json + +# Add 1password extension to future Brave installs +sudo mkdir -p /etc/brave/policies/managed/ +sudo cp $OMARCHY_PATH/default/brave/policies/managed/onepassword.json /etc/brave/policies/managed/onepassword.json +sudo chmod 644 /etc/brave/policies/managed/onepassword.json diff --git a/install/config/walker-elephant.sh b/install/config/walker-elephant.sh new file mode 100644 index 0000000..e8e3330 --- /dev/null +++ b/install/config/walker-elephant.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Create pacman hook to restart walker after updates +sudo mkdir -p /etc/pacman.d/hooks +sudo tee /etc/pacman.d/hooks/walker-restart.hook > /dev/null << EOF +[Trigger] +Type = Package +Operation = Upgrade +Target = walker +Target = walker-debug +Target = elephant* + +[Action] +Description = Restarting Walker services after system update +When = PostTransaction +Exec = $OMARCHY_PATH/bin/omarchy-restart-walker +EOF diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index 62b2524..2dfb080 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -21,6 +21,19 @@ docker docker-buildx docker-compose dust +elephant +elephant-bluetooth +elephant-calc +elephant-clipboard +elephant-desktopapplications +elephant-files +elephant-menus +elephant-providerlist +elephant-runner +elephant-symbols +elephant-todo +elephant-unicode +elephant-websearch evince eza fastfetch @@ -114,7 +127,7 @@ ufw ufw-docker unzip uwsm -walker-bin +walker waybar wf-recorder whois diff --git a/migrations/1758107878.sh b/migrations/1758107878.sh new file mode 100644 index 0000000..52fe818 --- /dev/null +++ b/migrations/1758107878.sh @@ -0,0 +1,26 @@ +echo "Migrate to Walker 2.0.0" + +# Ensure we kill walker even if there's a restarting service running +kill -9 $(pgrep -x walker) + +omarchy-pkg-drop walker-bin walker-bin-debug + +omarchy-pkg-add elephant \ + elephant-calc \ + elephant-clipboard \ + elephant-bluetooth \ + elephant-desktopapplications \ + elephant-files \ + elephant-menus \ + elephant-providerlist \ + elephant-runner \ + elephant-symbols \ + elephant-unicode \ + elephant-websearch \ + elephant-todo \ + walker + +source $OMARCHY_PATH/install/config/walker-elephant.sh + +rm -rf ~/.config/walker/themes +omarchy-refresh-walker