From b867188de6c03e231284dd306ef3156ed8d8975d Mon Sep 17 00:00:00 2001 From: Allen Houchins Date: Fri, 7 Aug 2026 21:20:07 -0500 Subject: [PATCH] Add Nexus Shell as a macOS Fleet-maintained app Nexus Shell is not in homebrew/cask (vendor distributes via their own viewer12/tap), so it uses the custom-tap pattern: cask DSL in custom-tap/Casks, generated api JSON, and an input manifest with cask_path. Identity verified against the real v1.6.9 DMG: CFBundleIdentifier sameral.Nexus-Shell, CFBundleShortVersionString 1.6.9 (matches cask version), sha256 matches vendor manifest. Icon generated from the app bundle. --- .../homebrew/custom-tap/Casks/nexus-shell.rb | 39 ++++++++ .../homebrew/custom-tap/api/nexus-shell.json | 88 ++++++++++++++++++ .../inputs/homebrew/nexus-shell.json | 9 ++ ee/maintained-apps/outputs/apps.json | 7 ++ .../outputs/nexus-shell/darwin.json | 23 +++++ .../components/icons/NexusShell.tsx | 14 +++ .../SoftwarePage/components/icons/index.ts | 2 + .../images/app-icon-nexus-shell-60x60@2x.png | Bin 0 -> 16821 bytes 8 files changed, 182 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/custom-tap/Casks/nexus-shell.rb create mode 100644 ee/maintained-apps/inputs/homebrew/custom-tap/api/nexus-shell.json create mode 100644 ee/maintained-apps/inputs/homebrew/nexus-shell.json create mode 100644 ee/maintained-apps/outputs/nexus-shell/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/NexusShell.tsx create mode 100644 website/assets/images/app-icon-nexus-shell-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/custom-tap/Casks/nexus-shell.rb b/ee/maintained-apps/inputs/homebrew/custom-tap/Casks/nexus-shell.rb new file mode 100644 index 00000000000..b4a28b79ce0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/custom-tap/Casks/nexus-shell.rb @@ -0,0 +1,39 @@ +cask "nexus-shell" do + version "1.6.9" + sha256 "088938eb901760a3123be7c8df18a41d480f234358a3a56f248de88bcc83a61d" + + url "https://releases.nexusshell.app/Nexus-Shell-v#{version}.dmg" + name "Nexus Shell" + desc "SwiftUI SSH client with terminal, SFTP, Docker and key management" + homepage "https://nexusshell.app/" + + livecheck do + url "https://nexusshell.app/releases/latest.json" + strategy :json do |json| + json["version"] + end + end + + auto_updates true + depends_on arch: :arm64 + depends_on macos: :sonoma + + app "Nexus Shell.app" + + uninstall quit: "sameral.Nexus-Shell" + + # Only the Developer ID build's paths. The `.appstore` / NexusShell-AppStore + # variants belong to the separate Mac App Store distribution and must not be + # removed here — a user may have both installed. + zap trash: [ + "~/Library/Application Scripts/sameral.Nexus-Shell", + "~/Library/Application Support/Nexus Shell", + "~/Library/Caches/sameral.Nexus-Shell", + "~/Library/Containers/sameral.Nexus-Shell", + "~/Library/HTTPStorages/sameral.Nexus-Shell", + "~/Library/HTTPStorages/sameral.Nexus-Shell.binarycookies", + "~/Library/Preferences/sameral.Nexus-Shell.plist", + "~/Library/Saved Application State/sameral.Nexus-Shell.savedState", + "~/Library/WebKit/sameral.Nexus-Shell", + ] +end diff --git a/ee/maintained-apps/inputs/homebrew/custom-tap/api/nexus-shell.json b/ee/maintained-apps/inputs/homebrew/custom-tap/api/nexus-shell.json new file mode 100644 index 00000000000..97280bf7803 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/custom-tap/api/nexus-shell.json @@ -0,0 +1,88 @@ +{ + "token": "nexus-shell", + "old_tokens": [], + "name": [ + "Nexus Shell" + ], + "desc": "SwiftUI SSH client with terminal, SFTP, Docker and key management", + "homepage": "https://nexusshell.app/", + "url": "https://releases.nexusshell.app/Nexus-Shell-v1.6.9.dmg", + "url_specs": {}, + "version": "1.6.9", + "autobump": true, + "no_autobump_message": null, + "skip_livecheck": false, + "bundle_version": null, + "bundle_short_version": null, + "pinned": false, + "pinned_version": null, + "sha256": "088938eb901760a3123be7c8df18a41d480f234358a3a56f248de88bcc83a61d", + "artifacts": [ + { + "uninstall": [ + { + "quit": "sameral.Nexus-Shell" + } + ] + }, + { + "app": [ + "Nexus Shell.app" + ], + "target": "/Applications/Nexus Shell.app" + }, + { + "zap": [ + { + "trash": [ + "~/Library/Application Scripts/sameral.Nexus-Shell", + "~/Library/Application Support/Nexus Shell", + "~/Library/Caches/sameral.Nexus-Shell", + "~/Library/Containers/sameral.Nexus-Shell", + "~/Library/HTTPStorages/sameral.Nexus-Shell", + "~/Library/HTTPStorages/sameral.Nexus-Shell.binarycookies", + "~/Library/Preferences/sameral.Nexus-Shell.plist", + "~/Library/Saved Application State/sameral.Nexus-Shell.savedState", + "~/Library/WebKit/sameral.Nexus-Shell" + ] + } + ] + } + ], + "caveats": null, + "caveats_rosetta": null, + "depends_on": { + "arch": [ + { + "type": "arm", + "bits": 64 + } + ], + "macos": { + ">=": [ + "14" + ] + } + }, + "conflicts_with": null, + "container": null, + "rename": [], + "auto_updates": true, + "deprecated": false, + "deprecation_date": null, + "deprecation_reason": null, + "deprecation_replacement_formula": null, + "deprecation_replacement_cask": null, + "deprecate_args": null, + "disabled": false, + "disable_date": null, + "disable_reason": null, + "disable_replacement_formula": null, + "disable_replacement_cask": null, + "disable_args": null, + "languages": [], + "ruby_source_path": "Casks/nexus-shell.rb", + "ruby_source_checksum": { + "sha256": "5655b89e9a43cc24094e09d50f41f9b340b841c9a7f95637c2ae97c33b00637e" + } +} diff --git a/ee/maintained-apps/inputs/homebrew/nexus-shell.json b/ee/maintained-apps/inputs/homebrew/nexus-shell.json new file mode 100644 index 00000000000..2dc40e81a93 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/nexus-shell.json @@ -0,0 +1,9 @@ +{ + "name": "Nexus Shell", + "unique_identifier": "sameral.Nexus-Shell", + "token": "nexus-shell", + "installer_format": "dmg", + "slug": "nexus-shell/darwin", + "default_categories": ["Developer tools"], + "cask_path": "ee/maintained-apps/inputs/homebrew/custom-tap/api/nexus-shell.json" +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 2c1867ae482..0614e03de42 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -5902,6 +5902,13 @@ "unique_identifier": "Nextcloud", "description": "Nextcloud is a self-hosted file sync and sharing platform that provides secure access to your data across devices with collaboration features." }, + { + "name": "Nexus Shell", + "slug": "nexus-shell/darwin", + "platform": "darwin", + "unique_identifier": "sameral.Nexus-Shell", + "description": "Nexus Shell is a native macOS SSH client that combines a terminal, SFTP file transfers, Docker container management, SSH key management, and live server monitoring in one window." + }, { "name": "Nightfall", "slug": "nightfall/darwin", diff --git a/ee/maintained-apps/outputs/nexus-shell/darwin.json b/ee/maintained-apps/outputs/nexus-shell/darwin.json new file mode 100644 index 00000000000..8f9dca9e8ed --- /dev/null +++ b/ee/maintained-apps/outputs/nexus-shell/darwin.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "1.6.9", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'sameral.Nexus-Shell';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'sameral.Nexus-Shell' AND version_compare(bundle_short_version, '1.6.9') < 0);", + "open": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps a JOIN processes p ON substr(p.path, 1, LENGTH(a.path) + 1) = concat(a.path, '/') WHERE a.bundle_identifier = 'sameral.Nexus-Shell');" + }, + "installer_url": "https://releases.nexusshell.app/Nexus-Shell-v1.6.9.dmg", + "install_script_ref": "0ca79a16", + "uninstall_script_ref": "fac834ca", + "sha256": "088938eb901760a3123be7c8df18a41d480f234358a3a56f248de88bcc83a61d", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "0ca79a16": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'sameral.Nexus-Shell'\nif [ -d \"$APPDIR/Nexus Shell.app\" ]; then\n\tsudo mv \"$APPDIR/Nexus Shell.app\" \"$TMPDIR/Nexus Shell.app.bkp\" || exit $?\nfi\nif ! sudo cp -R \"$TMPDIR/Nexus Shell.app\" \"$APPDIR\"; then\n\t# remove the partial copy so a failed install isn't inventoried as the new\n\t# version, then restore the previous version if there was one\n\tsudo rm -rf \"$APPDIR/Nexus Shell.app\"\n\tif [ -d \"$TMPDIR/Nexus Shell.app.bkp\" ]; then\n\t\tsudo mv \"$TMPDIR/Nexus Shell.app.bkp\" \"$APPDIR/Nexus Shell.app\"\n\tfi\n\texit 1\nfi\nrelaunch_application 'sameral.Nexus-Shell'\n", + "fac834ca": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'sameral.Nexus-Shell'\nsudo rm -rf \"$APPDIR/Nexus Shell.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/sameral.Nexus-Shell'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Nexus Shell'\ntrash $LOGGED_IN_USER '~/Library/Caches/sameral.Nexus-Shell'\ntrash $LOGGED_IN_USER '~/Library/Containers/sameral.Nexus-Shell'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/sameral.Nexus-Shell'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/sameral.Nexus-Shell.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/sameral.Nexus-Shell.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/sameral.Nexus-Shell.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/sameral.Nexus-Shell'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/NexusShell.tsx b/frontend/pages/SoftwarePage/components/icons/NexusShell.tsx new file mode 100644 index 00000000000..0dfd0833b4b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/NexusShell.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const NexusShell = (props: SVGProps) => ( + + + +); +export default NexusShell; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 07f53a910fe..71b34d831ac 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -696,6 +696,7 @@ import Netron from "./Netron"; import Netspot from "./Netspot"; import Nextcloud from "./Nextcloud"; import NextcloudTalk from "./NextcloudTalk"; +import NexusShell from "./NexusShell"; import Nightfall from "./Nightfall"; import NitroPdfPro from "./NitroPdfPro"; import Nodejs from "./Nodejs"; @@ -1865,6 +1866,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { netspot: Netspot, nextcloud: Nextcloud, "nextcloud talk desktop": NextcloudTalk, + "nexus shell": NexusShell, nightfall: Nightfall, "nitro pdf pro": NitroPdfPro, "node.js": Nodejs, diff --git a/website/assets/images/app-icon-nexus-shell-60x60@2x.png b/website/assets/images/app-icon-nexus-shell-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bde581c3d0c3093db80cdc13fe0253c47e7c5846 GIT binary patch literal 16821 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�lzxW&RvTcxw#L_32#yPj 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 literal 0 HcmV?d00001