diff --git a/bin/omarchy-install-ai-claude b/bin/omarchy-install-ai-claude new file mode 100755 index 00000000..85a7e593 --- /dev/null +++ b/bin/omarchy-install-ai-claude @@ -0,0 +1,15 @@ +#!/bin/bash + +# omarchy:summary=Install the Claude desktop app +# omarchy:requires-sudo=true + +set -euo pipefail + +echo "Installing Claude..." +omarchy-pkg-add claude-desktop + +echo "Opening Claude..." +setsid uwsm-app -- /usr/bin/claude-desktop >/dev/null 2>&1 & + +echo "" +echo "Claude has been installed." diff --git a/bin/omarchy-remove-ai-claude b/bin/omarchy-remove-ai-claude new file mode 100755 index 00000000..9c66c5d0 --- /dev/null +++ b/bin/omarchy-remove-ai-claude @@ -0,0 +1,19 @@ +#!/bin/bash + +# omarchy:summary=Remove the Claude desktop app along with its configuration and caches. +# omarchy:requires-sudo=true + +# -u so an unset HOME is an error rather than a set of rm -rf paths rooted at /. +set -euo pipefail + +omarchy-pkg-drop claude-desktop + +# Not ~/.claude, ~/.claude.json, or ~/.cache/claude-cli-nodejs: those belong +# to the Claude Code CLI, which ships in a different package that survives +# this one. The desktop app keeps its state in its own Electron directories. +rm -rf \ + "$HOME/.config/Claude" \ + "$HOME/.cache/Claude" + +echo "" +echo "Claude has been removed." diff --git a/default/fonts/omarchy/README.md b/default/fonts/omarchy/README.md index b731549d..df93aa55 100644 --- a/default/fonts/omarchy/README.md +++ b/default/fonts/omarchy/README.md @@ -16,6 +16,7 @@ The private-use glyphs in `omarchy.ttf` are: - `U+E90B` — Perplexity, from - `U+E90C` — OpenClaw, traced from the lobster mascot the openclaw package ships as `dist/control-ui/favicon.svg`, since upstream publishes no monochrome SVG - `U+E90D` — Cursor, from +- `U+E90E` — Claude, from The agent marks are monochrome so the menu can render them using the active theme's foreground and selection colors. diff --git a/default/fonts/omarchy/omarchy.ttf b/default/fonts/omarchy/omarchy.ttf index 632c91bb..3c70d803 100644 Binary files a/default/fonts/omarchy/omarchy.ttf and b/default/fonts/omarchy/omarchy.ttf differ diff --git a/default/omarchy/omarchy-menu.jsonc b/default/omarchy/omarchy-menu.jsonc index 745ec311..7583d8d8 100644 --- a/default/omarchy/omarchy-menu.jsonc +++ b/default/omarchy/omarchy-menu.jsonc @@ -241,6 +241,7 @@ "install.terminal.ghostty": {"icon":"","label":"Ghostty","disabled":"omarchy-pkg-present ghostty","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-install-terminal ghostty'"}, "install.terminal.kitty": {"icon":"","label":"Kitty","disabled":"omarchy-pkg-present kitty","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-install-terminal kitty'"}, "install.ai.chatgpt": {"icon":"","iconFont":"omarchy","label":"ChatGPT Desktop","disabled":"omarchy-pkg-present openai-codex-desktop","action":"omarchy-launch-floating-terminal-with-presentation omarchy-install-ai-chatgpt"}, + "install.ai.claude": {"icon":"","iconFont":"omarchy","label":"Claude Desktop","disabled":"omarchy-pkg-present claude-desktop","action":"omarchy-launch-floating-terminal-with-presentation omarchy-install-ai-claude"}, "install.ai.dictation": {"icon":"","label":"Dictation","disabled":"omarchy-pkg-present voxtype-bin","action":"omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-install"}, "install.ai.grok-bot": {"icon":"","iconFont":"omarchy","label":"Grok Bot","disabled":"omarchy-pkg-present grok-bot","action":"omarchy-install-and-launch 'Grok Bot' grok-bot grok-bot"}, "install.ai.hermes": {"icon":"","iconFont":"omarchy","label":"Hermes Desktop","disabled":"omarchy-pkg-present hermes-desktop","action":"omarchy-launch-floating-terminal-with-presentation omarchy-install-ai-hermes"}, @@ -309,6 +310,7 @@ "remove.service.dropbox": {"icon":"","label":"Dropbox","when":"omarchy-pkg-present dropbox","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-service-dropbox"}, "remove.service.tailscale": {"icon":"","label":"Tailscale","when":"omarchy-pkg-present tailscale","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-service-tailscale"}, "remove.ai.chatgpt": {"icon":"","iconFont":"omarchy","label":"ChatGPT Desktop","when":"omarchy-pkg-present openai-codex-desktop","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-ai-chatgpt"}, + "remove.ai.claude": {"icon":"","iconFont":"omarchy","label":"Claude Desktop","when":"omarchy-pkg-present claude-desktop","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-ai-claude"}, "remove.ai.dictation": {"icon":"","label":"Dictation","when":"omarchy-pkg-present voxtype-bin","action":"omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-remove"}, "remove.ai.grok-bot": {"icon":"","iconFont":"omarchy","label":"Grok Bot","when":"omarchy-pkg-present grok-bot","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-ai-grok-bot"}, "remove.ai.lm-studio": {"icon":"","iconFont":"omarchy","label":"LM Studio","when":"omarchy-pkg-present lmstudio-bin","action":"omarchy-launch-floating-terminal-with-presentation omarchy-remove-ai-lm-studio"}, diff --git a/manual/17-ai.md b/manual/17-ai.md index 8911b974..8c3d48b0 100644 --- a/manual/17-ai.md +++ b/manual/17-ai.md @@ -48,7 +48,7 @@ Crashes can also be silenced one program at a time, which is what the diagnosis ### Desktop apps -The _Install > AI_ menu also carries a few graphical AI apps: the ChatGPT desktop app, Grok Bot for chatting with xAI's models, Hermes Desktop, OpenClaw, and the Perplexity desktop app. +The _Install > AI_ menu also carries a few graphical AI apps: the ChatGPT desktop app, the Claude desktop app (Anthropic's Linux beta, with Chat, Cowork, and Claude Code tabs), Grok Bot for chatting with xAI's models, Hermes Desktop, OpenClaw, and the Perplexity desktop app. Hermes Desktop is the one to know about, because there is only ever one Hermes on a machine. The app only runs against a runtime built from its own commit, so it installs one of its own under `~/.hermes` on first launch, which takes a few minutes and shows its own progress. From then on that is the Hermes the terminal `hermes` command and the default agent use too, whichever order you installed them in. Installing it also hands Hermes the Omarchy theme as a skin named `omarchy`, which every Hermes surface follows as you switch themes; pick another under Hermes' Appearance settings or with `/skin` if you'd rather it didn't, and Omarchy leaves that choice alone. Removing the app under _Remove > AI_ takes that runtime with it, and keeps your chats, memories, and the skills Hermes wrote for itself unless you tell it otherwise: it asks, defaulting to no, whether that data and your connection settings should go too. diff --git a/test/shell.d/menu-test.sh b/test/shell.d/menu-test.sh index b227bb10..a424379b 100644 --- a/test/shell.d/menu-test.sh +++ b/test/shell.d/menu-test.sh @@ -641,5 +641,5 @@ assert( JS font_charset=$(fc-query --format='%{charset}' "$ROOT/default/fonts/omarchy/omarchy.ttf") -[[ $font_charset == *"e900-e90d"* ]] || fail "Omarchy icon font includes every custom menu glyph" +[[ $font_charset == *"e900-e90e"* ]] || fail "Omarchy icon font includes every custom menu glyph" pass "Omarchy icon font includes the official agent marks" diff --git a/test/shell.d/remove-ai-test.sh b/test/shell.d/remove-ai-test.sh index 9d518318..7c8ae043 100644 --- a/test/shell.d/remove-ai-test.sh +++ b/test/shell.d/remove-ai-test.sh @@ -55,6 +55,24 @@ pass "ChatGPT removal keeps the Codex CLI's runtime cache" [[ -d $HOME/.codex ]] || fail "ChatGPT removal keeps the Codex CLI's config" pass "ChatGPT removal keeps the Codex CLI's config" +# The Claude Code CLI ships in its own package and keeps its state in +# ~/.claude, ~/.claude.json, and ~/.cache/claude-cli-nodejs, so removing the +# desktop app must not take it. +fresh_home +mkdir -p "$HOME/.config/Claude" "$HOME/.cache/Claude" "$HOME/.cache/claude-cli-nodejs" "$HOME/.claude" +touch "$HOME/.claude.json" +"$ROOT/bin/omarchy-remove-ai-claude" >/dev/null + +for gone in .config/Claude .cache/Claude; do + [[ ! -e $HOME/$gone ]] || fail "Claude removal deletes the desktop app's config and caches" "$gone" +done +pass "Claude removal deletes the desktop app's config and caches" + +for kept in .claude .claude.json .cache/claude-cli-nodejs; do + [[ -e $HOME/$kept ]] || fail "Claude removal keeps the Claude Code CLI's state" "$kept" +done +pass "Claude removal keeps the Claude Code CLI's state" + # LM Studio's models follow a relocatable home, named only by the pointer file. fresh_home mkdir -p "$tmp_dir/relocated-models/models"