diff --git a/default/omarchy/omarchy-menu.jsonc b/default/omarchy/omarchy-menu.jsonc index 06de9c60..d00c7173 100644 --- a/default/omarchy/omarchy-menu.jsonc +++ b/default/omarchy/omarchy-menu.jsonc @@ -10,6 +10,7 @@ // aliases alternate `omarchy menu summon ` routes; also searchable // iconFont font family used for the icon glyph, when it differs from the menu font // keywords extra search terms beyond id/label/aliases + // title header text shown when the submenu is open; defaults to label // when shell condition; hide row when it fails // checked shell condition; append ✓ when it succeeds @@ -234,15 +235,15 @@ "remove.package": {"icon":"󰣇","label":"Package","keywords":"uninstall","action":"xdg-terminal-exec --app-id=org.omarchy.terminal omarchy-pkg-remove"}, "remove.webapp": {"icon":"","label":"Web App","keywords":"uninstall","when":"grep -qE '^Exec=.*(omarchy-launch-webapp|omarchy-webapp-handler)' $HOME/.local/share/applications/*.desktop","action":"omarchy-webapp-remove"}, "remove.tui": {"icon":"","label":"TUI","keywords":"uninstall terminal app","when":"grep -qE '^Exec=.*(\\$TERMINAL|xdg-terminal-exec).*-e' $HOME/.local/share/applications/*.desktop","action":"omarchy-tui-remove"}, - "remove.development": {"icon":"󰵮","label":"Development","keywords":"uninstall languages"}, + "remove.development": {"icon":"󰵮","label":"Development","title":"Remove","keywords":"uninstall languages"}, "remove.theme": {"icon":"󰸌","label":"Theme","keywords":"uninstall","action":"omarchy-theme-remove"}, - "remove.browser": {"icon":"","label":"Browser","keywords":"uninstall"}, + "remove.browser": {"icon":"","label":"Browser","title":"Remove","keywords":"uninstall"}, "remove.dictation": {"icon":"","label":"Dictation","keywords":"uninstall voice","when":"omarchy-pkg-present voxtype-bin","action":"omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-remove"}, - "remove.gaming": {"icon":"","label":"Gaming","keywords":"uninstall steam retroarch minecraft"}, - "remove.service": {"icon":"","label":"Services","keywords":"uninstall dropbox tailscale vpn"}, + "remove.gaming": {"icon":"","label":"Gaming","title":"Remove","keywords":"uninstall steam retroarch minecraft"}, + "remove.service": {"icon":"","label":"Services","title":"Remove","keywords":"uninstall dropbox tailscale vpn"}, "remove.windows": {"icon":"󰍲","label":"Windows","keywords":"uninstall vm","when":"[[ -f $HOME/.local/share/applications/windows-vm.desktop ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-windows-vm remove'"}, "remove.preinstalls": {"icon":"󰏓","label":"Preinstalls","when":"[[ ! -f $HOME/.local/state/omarchy/preinstalls-removed ]]","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-preinstalls"}, - "remove.security": {"icon":"","label":"Security","keywords":"fingerprint fido2 ssh sshd"}, + "remove.security": {"icon":"","label":"Security","title":"Remove","keywords":"fingerprint fido2 ssh sshd"}, "remove.security.fingerprint": {"icon":"󰈷","label":"Fingerprint","when":"omarchy-pkg-present fprintd","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-security-fingerprint"}, "remove.security.fido2": {"icon":"","label":"Fido2","when":"omarchy-pkg-present pam-u2f","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-security-fido2"}, "remove.security.sshd": {"icon":"󰣀","label":"SSHD","keywords":"ssh server remote","when":"systemctl is-enabled --quiet sshd","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-security-sshd"}, @@ -264,11 +265,11 @@ "remove.gaming.lutris": {"icon":"","label":"Lutris","when":"omarchy-pkg-present lutris","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-gaming-lutris"}, "remove.gaming.heroic": {"icon":"󱓟","label":"Heroic (Epic Games)","when":"omarchy-pkg-present heroic-games-launcher-bin","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-gaming-heroic"}, "remove.development.rails": {"icon":"󰫏","label":"Ruby on Rails","when":"[[ -d $HOME/.local/share/mise/installs/ruby ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env ruby'"}, - "remove.development.javascript": {"icon":"","label":"JavaScript","keywords":"node bun deno"}, + "remove.development.javascript": {"icon":"","label":"JavaScript","title":"Remove","keywords":"node bun deno"}, "remove.development.go": {"icon":"","label":"Go","keywords":"golang","when":"[[ -d $HOME/.local/share/mise/installs/go ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env go'"}, - "remove.development.php": {"icon":"","label":"PHP","keywords":"laravel symfony"}, + "remove.development.php": {"icon":"","label":"PHP","title":"Remove","keywords":"laravel symfony"}, "remove.development.python": {"icon":"","label":"Python","when":"[[ -d $HOME/.local/share/mise/installs/python ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env python'"}, - "remove.development.elixir": {"icon":"","label":"Elixir","keywords":"phoenix"}, + "remove.development.elixir": {"icon":"","label":"Elixir","title":"Remove","keywords":"phoenix"}, "remove.development.zig": {"icon":"","label":"Zig","when":"[[ -d $HOME/.local/share/mise/installs/zig ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env zig'"}, "remove.development.rust": {"icon":"","label":"Rust","when":"[[ -d $HOME/.rustup ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env rust'"}, "remove.development.java": {"icon":"","label":"Java","when":"[[ -d $HOME/.local/share/mise/installs/java ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-remove-dev-env java'"}, diff --git a/shell/plugins/menu/Menu.qml b/shell/plugins/menu/Menu.qml index 603aa4d5..818b42c7 100644 --- a/shell/plugins/menu/Menu.qml +++ b/shell/plugins/menu/Menu.qml @@ -274,6 +274,7 @@ Item { kind: "action", icon: (value === current) ? "✓" : (spec.icon || ""), label: label, + title: "", target: "", keywords: spec.keywordsFor(value), description: "", @@ -885,7 +886,7 @@ Item { anchors.left: parent.left anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - text: root.filterText || (root.dmenuActive ? (root.dmenuPrompt + "…") : ((root.item(root.activeMenu) ? root.item(root.activeMenu).label : "Go") + "…")) + text: root.filterText || (root.dmenuActive ? (root.dmenuPrompt + "…") : ((root.item(root.activeMenu) ? (root.item(root.activeMenu).title || root.item(root.activeMenu).label) : "Go") + "…")) color: root.foreground opacity: root.filterText ? 1 : 0.58 font.family: root.fontFamily diff --git a/shell/plugins/menu/MenuModel.js b/shell/plugins/menu/MenuModel.js index 251ee4bc..c26326a5 100644 --- a/shell/plugins/menu/MenuModel.js +++ b/shell/plugins/menu/MenuModel.js @@ -40,6 +40,7 @@ function normalizeItem(id, raw) { icon: value.icon || "", iconFont: value.iconFont || "", label: value.label || id, + title: value.title || "", target: value.target || "", keywords: normalizeKeywords(id, aliases, value.keywords), description: value.description || "", @@ -96,7 +97,7 @@ function mergeMenuSources(defaultItems, userItems) { } if (!nextItems.root) { - nextItems.root = { id: "root", parent: "", kind: "menu", icon: "", iconFont: "", label: "Go", target: "", keywords: "", description: "", aliases: [], when: "", checked: "", action: "", provider: "" } + nextItems.root = { id: "root", parent: "", kind: "menu", icon: "", iconFont: "", label: "Go", title: "", target: "", keywords: "", description: "", aliases: [], when: "", checked: "", action: "", provider: "" } nextOrder.unshift("root") } for (var k3 = 0; k3 < nextOrder.length; k3++) nextItems[nextOrder[k3]].order = k3 diff --git a/test/shell.d/menu-test.sh b/test/shell.d/menu-test.sh index f7434ccb..02c1d3af 100644 --- a/test/shell.d/menu-test.sh +++ b/test/shell.d/menu-test.sh @@ -36,6 +36,7 @@ assertDeepEqual( icon: '', iconFont: '', label: 'Themes', + title: '', target: '', keywords: 'appearance colors', description: '',