From 1e003edfd7b644a16a3823b3c5681b9cdfd32c93 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Wed, 10 Dec 2025 11:41:18 -0600 Subject: [PATCH] Add multiple macOS FMA (#37060) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request adds support for several new macOS applications to the maintained apps catalog. It introduces metadata, installation, and uninstallation scripts for each app, and updates the main `apps.json` output to include these new entries. The changes are grouped into new app additions and corresponding installer/uninstaller script implementations. **New macOS app additions:** * Added metadata and catalog entries for the following applications: Egnyte, Elgato Control Center, Elgato Stream Deck, ExpressVPN, Fork, Front, Ghostty, GIMP, and Hyper. Each app now has a dedicated input JSON file and an entry in `apps.json` with platform, identifier, and description. [[1]](diffhunk://#diff-23ba1125ec0779e89bd0e70b112583b332e841bc14a4920419e0c116f6718aecR1-R8) [[2]](diffhunk://#diff-c0489d22fc52f53b7a44c4fb6b16c25eb8e22d53772c62bad36c3a874138cc65R1-R8) [[3]](diffhunk://#diff-96bdb6025cdcaefdb9c689401cfd102ed248ce0360a178da5e208b570967d459R1-R8) [[4]](diffhunk://#diff-a5441bc7fd33cb26cc4bc787bfec51f8a0384f7270cd7e97958c3a814e71fa7cR1-R8) [[5]](diffhunk://#diff-82a6115c15a63073e97e105400f396f3b6a6181e787dde23c5b038c1018c4b9eR1-R8) [[6]](diffhunk://#diff-ddee5c0aabd18f5cbdb8d3cab2a9f069e895401e9dd5f94db2b06af940f286f8R1-R8) [[7]](diffhunk://#diff-f11cb1fa827924b89af074a0ec08aae96f962abf08133df45a8d326f22ff467bR1-R8) [[8]](diffhunk://#diff-a481e356326319c0bd932ece074bdd533294a19a333da5dbfc0c081b4052fa1dR1-R8) [[9]](diffhunk://#diff-ffe0600fd34e997bde34d076822e13354866d9dbc6c6fd43865b4a70f0a479a0R1-R8) [[10]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R515-R549) [[11]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R578-R605) [[12]](diffhunk://#diff-4c1446cfc02c6bb0bda874481e333c65b84e184fcea52f656b49a6489f73c9c2R683-R689) **Installer and uninstaller script implementations:** * For each new app, added output JSON files containing version info, installer URLs, SHA256 hashes, and install/uninstall scripts. These scripts handle application installation and cleanup, including quitting running apps and removing associated files and directories. [[1]](diffhunk://#diff-458d8f6eb15663b336e76a6964ca22f83e940b0bef4474391d46a1698cd3dcb4R1-R21) [[2]](diffhunk://#diff-5f9bd670a42a11fb7ab0bf3575557a938a96d8652497c14e2e8f60369f735bf8R1-R21) [[3]](diffhunk://#diff-c31491a17eb8dff09d145de13e703188c032a446a8e74060505024c239db208fR1-R21) These updates expand the catalog’s coverage and ensure proper lifecycle management for each newly supported app. --- .../inputs/homebrew/egnyte.json | 8 +++ .../homebrew/elgato-control-center.json | 8 +++ .../inputs/homebrew/elgato-stream-deck.json | 8 +++ .../inputs/homebrew/expressvpn.json | 8 +++ ee/maintained-apps/inputs/homebrew/fork.json | 8 +++ ee/maintained-apps/inputs/homebrew/front.json | 8 +++ .../inputs/homebrew/ghostty.json | 8 +++ ee/maintained-apps/inputs/homebrew/gimp.json | 8 +++ ee/maintained-apps/inputs/homebrew/hyper.json | 8 +++ ee/maintained-apps/outputs/apps.json | 63 ++++++++++++++++++ ee/maintained-apps/outputs/egnyte/darwin.json | 21 ++++++ .../outputs/elgato-control-center/darwin.json | 21 ++++++ .../outputs/elgato-stream-deck/darwin.json | 21 ++++++ .../outputs/expressvpn/darwin.json | 21 ++++++ ee/maintained-apps/outputs/fork/darwin.json | 21 ++++++ ee/maintained-apps/outputs/front/darwin.json | 21 ++++++ .../outputs/ghostty/darwin.json | 21 ++++++ ee/maintained-apps/outputs/gimp/darwin.json | 21 ++++++ ee/maintained-apps/outputs/hyper/darwin.json | 21 ++++++ .../SoftwarePage/components/icons/Egnyte.tsx | 14 ++++ .../components/icons/ElgatoControlCenter.tsx | 14 ++++ .../components/icons/ElgatoStreamDeck.tsx | 14 ++++ .../components/icons/ExpressVpn.tsx | 14 ++++ .../SoftwarePage/components/icons/Fork.tsx | 14 ++++ .../SoftwarePage/components/icons/Front.tsx | 14 ++++ .../SoftwarePage/components/icons/Ghostty.tsx | 14 ++++ .../SoftwarePage/components/icons/Gimp.tsx | 14 ++++ .../SoftwarePage/components/icons/Hyper.tsx | 14 ++++ .../SoftwarePage/components/icons/index.ts | 18 +++++ .../images/app-icon-egnyte-60x60@2x.png | Bin 0 -> 6151 bytes ...pp-icon-elgato-control-center-60x60@2x.png | Bin 0 -> 14666 bytes .../app-icon-elgato-stream-deck-60x60@2x.png | Bin 0 -> 13057 bytes .../images/app-icon-expressvpn-60x60@2x.png | Bin 0 -> 3899 bytes .../assets/images/app-icon-fork-60x60@2x.png | Bin 0 -> 15833 bytes .../assets/images/app-icon-front-60x60@2x.png | Bin 0 -> 5218 bytes .../images/app-icon-ghostty-60x60@2x.png | Bin 0 -> 19841 bytes .../assets/images/app-icon-gimp-60x60@2x.png | Bin 0 -> 9065 bytes .../assets/images/app-icon-hyper-60x60@2x.png | Bin 0 -> 7028 bytes 38 files changed, 468 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/egnyte.json create mode 100644 ee/maintained-apps/inputs/homebrew/elgato-control-center.json create mode 100644 ee/maintained-apps/inputs/homebrew/elgato-stream-deck.json create mode 100644 ee/maintained-apps/inputs/homebrew/expressvpn.json create mode 100644 ee/maintained-apps/inputs/homebrew/fork.json create mode 100644 ee/maintained-apps/inputs/homebrew/front.json create mode 100644 ee/maintained-apps/inputs/homebrew/ghostty.json create mode 100644 ee/maintained-apps/inputs/homebrew/gimp.json create mode 100644 ee/maintained-apps/inputs/homebrew/hyper.json create mode 100644 ee/maintained-apps/outputs/egnyte/darwin.json create mode 100644 ee/maintained-apps/outputs/elgato-control-center/darwin.json create mode 100644 ee/maintained-apps/outputs/elgato-stream-deck/darwin.json create mode 100644 ee/maintained-apps/outputs/expressvpn/darwin.json create mode 100644 ee/maintained-apps/outputs/fork/darwin.json create mode 100644 ee/maintained-apps/outputs/front/darwin.json create mode 100644 ee/maintained-apps/outputs/ghostty/darwin.json create mode 100644 ee/maintained-apps/outputs/gimp/darwin.json create mode 100644 ee/maintained-apps/outputs/hyper/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Egnyte.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/ElgatoControlCenter.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/ElgatoStreamDeck.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/ExpressVpn.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Fork.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Front.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Ghostty.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Gimp.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Hyper.tsx create mode 100644 website/assets/images/app-icon-egnyte-60x60@2x.png create mode 100644 website/assets/images/app-icon-elgato-control-center-60x60@2x.png create mode 100644 website/assets/images/app-icon-elgato-stream-deck-60x60@2x.png create mode 100644 website/assets/images/app-icon-expressvpn-60x60@2x.png create mode 100644 website/assets/images/app-icon-fork-60x60@2x.png create mode 100644 website/assets/images/app-icon-front-60x60@2x.png create mode 100644 website/assets/images/app-icon-ghostty-60x60@2x.png create mode 100644 website/assets/images/app-icon-gimp-60x60@2x.png create mode 100644 website/assets/images/app-icon-hyper-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/egnyte.json b/ee/maintained-apps/inputs/homebrew/egnyte.json new file mode 100644 index 0000000000..8488465538 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/egnyte.json @@ -0,0 +1,8 @@ +{ + "name": "Egnyte", + "unique_identifier": "com.egnyte.DesktopApp", + "token": "egnyte", + "installer_format": "dmg", + "slug": "egnyte/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/elgato-control-center.json b/ee/maintained-apps/inputs/homebrew/elgato-control-center.json new file mode 100644 index 0000000000..85d9edabab --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/elgato-control-center.json @@ -0,0 +1,8 @@ +{ + "name": "Elgato Control Center", + "unique_identifier": "com.corsair.ControlCenter", + "token": "elgato-control-center", + "installer_format": "zip", + "slug": "elgato-control-center/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/elgato-stream-deck.json b/ee/maintained-apps/inputs/homebrew/elgato-stream-deck.json new file mode 100644 index 0000000000..6887b58c4e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/elgato-stream-deck.json @@ -0,0 +1,8 @@ +{ + "name": "Elgato Stream Deck", + "unique_identifier": "com.elgato.StreamDeck", + "token": "elgato-stream-deck", + "installer_format": "pkg", + "slug": "elgato-stream-deck/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/expressvpn.json b/ee/maintained-apps/inputs/homebrew/expressvpn.json new file mode 100644 index 0000000000..ad241ae21e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/expressvpn.json @@ -0,0 +1,8 @@ +{ + "name": "ExpressVPN", + "unique_identifier": "com.expressvpn.ExpressVPN", + "token": "expressvpn", + "installer_format": "pkg", + "slug": "expressvpn/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/fork.json b/ee/maintained-apps/inputs/homebrew/fork.json new file mode 100644 index 0000000000..6afbe96e2f --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/fork.json @@ -0,0 +1,8 @@ +{ + "name": "Fork", + "unique_identifier": "com.DanPristupov.Fork", + "token": "fork", + "installer_format": "dmg", + "slug": "fork/darwin", + "default_categories": ["Developer tools"] +} diff --git a/ee/maintained-apps/inputs/homebrew/front.json b/ee/maintained-apps/inputs/homebrew/front.json new file mode 100644 index 0000000000..6f07e71e1b --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/front.json @@ -0,0 +1,8 @@ +{ + "name": "Front", + "unique_identifier": "com.frontapp.Front", + "token": "front", + "installer_format": "zip", + "slug": "front/darwin", + "default_categories": ["Communication"] +} diff --git a/ee/maintained-apps/inputs/homebrew/ghostty.json b/ee/maintained-apps/inputs/homebrew/ghostty.json new file mode 100644 index 0000000000..d988fad098 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/ghostty.json @@ -0,0 +1,8 @@ +{ + "name": "Ghostty", + "unique_identifier": "com.mitchellh.ghostty", + "token": "ghostty", + "installer_format": "dmg", + "slug": "ghostty/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/gimp.json b/ee/maintained-apps/inputs/homebrew/gimp.json new file mode 100644 index 0000000000..500a2fea3c --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/gimp.json @@ -0,0 +1,8 @@ +{ + "name": "GIMP", + "unique_identifier": "org.gimp.gimp-3.0", + "token": "gimp", + "installer_format": "dmg", + "slug": "gimp/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/homebrew/hyper.json b/ee/maintained-apps/inputs/homebrew/hyper.json new file mode 100644 index 0000000000..9af026e664 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/hyper.json @@ -0,0 +1,8 @@ +{ + "name": "Hyper", + "unique_identifier": "co.zeit.hyper", + "token": "hyper", + "installer_format": "zip", + "slug": "hyper/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index d8ab194049..b6a72937b6 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -512,6 +512,27 @@ "unique_identifier": "epp.package.committers", "description": "Eclipse IDE is an Eclipse integrated development environment for Java." }, + { + "name": "Egnyte", + "slug": "egnyte/darwin", + "platform": "darwin", + "unique_identifier": "com.egnyte.DesktopApp", + "description": "Egnyte is a client for the Egnyte cloud storage service." + }, + { + "name": "Elgato Control Center", + "slug": "elgato-control-center/darwin", + "platform": "darwin", + "unique_identifier": "com.corsair.ControlCenter", + "description": "Elgate Control Center is an app to control your Elgato key lights." + }, + { + "name": "Elgato Stream Deck", + "slug": "elgato-stream-deck/darwin", + "platform": "darwin", + "unique_identifier": "com.elgato.StreamDeck", + "description": "Elgateo Stream Deck is an app to assign keys, and then decorate and label them, on a Stream Deck." + }, { "name": "Evernote", "slug": "evernote/darwin", @@ -519,6 +540,13 @@ "unique_identifier": "com.evernote.Evernote", "description": "Evernote is an app for note taking, organising, task lists, and archiving." }, + { + "name": "ExpressVPN", + "slug": "expressvpn/darwin", + "platform": "darwin", + "unique_identifier": "com.expressvpn.ExpressVPN", + "description": "ExpressVPN is a VPN client for secure internet access and private browsing." + }, { "name": "Figma", "slug": "figma/darwin", @@ -547,6 +575,34 @@ "unique_identifier": "Mozilla Firefox (x64 en-US)", "description": "Firefox is a powerful, open-source web browser built for speed, privacy, and customization." }, + { + "name": "Fork", + "slug": "fork/darwin", + "platform": "darwin", + "unique_identifier": "com.DanPristupov.Fork", + "description": "Fork is a git client." + }, + { + "name": "Front", + "slug": "front/darwin", + "platform": "darwin", + "unique_identifier": "com.frontapp.Front", + "description": "Front is a customer communication platform." + }, + { + "name": "Ghostty", + "slug": "ghostty/darwin", + "platform": "darwin", + "unique_identifier": "com.mitchellh.ghostty", + "description": "Ghostty is a terminal emulator that uses platform-native UI and GPU acceleration." + }, + { + "name": "GIMP", + "slug": "gimp/darwin", + "platform": "darwin", + "unique_identifier": "org.gimp.gimp-3.0", + "description": "GIMP is a free and open-source image editor." + }, { "name": "GitHub Desktop", "slug": "github-desktop/windows", @@ -624,6 +680,13 @@ "unique_identifier": "com.granola.app", "description": "Granola is an AI-powered notepad for meetings." }, + { + "name": "Hyper", + "slug": "hyper/darwin", + "platform": "darwin", + "unique_identifier": "co.zeit.hyper", + "description": "Hyper is a terminal built on web technologies." + }, { "name": "iMazing Profile Editor", "slug": "imazing-profile-editor/darwin", diff --git a/ee/maintained-apps/outputs/egnyte/darwin.json b/ee/maintained-apps/outputs/egnyte/darwin.json new file mode 100644 index 0000000000..dd1a103d71 --- /dev/null +++ b/ee/maintained-apps/outputs/egnyte/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "1.12.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.egnyte.DesktopApp';" + }, + "installer_url": "https://egnyte-cdn.egnyte.com/desktopapp/mac/en-us/1.12.1/Egnyte_1.12.1_2304.dmg", + "install_script_ref": "808a634e", + "uninstall_script_ref": "14159466", + "sha256": "a46e13d4ea42580c440369a4f738a799191e9244f100470d8feec2345a5b93e0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "14159466": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/Egnyte.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.egnyte.DesktopApp'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.egnyte.DesktopApp.FileProvider'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.egnyte.DesktopApp.FinderHelper'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.egnyte.DesktopApp.FinderHelper.FinderSync'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/FELUD555VC.group.com.egnyte.DesktopApp'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.egnyte.desktopapp.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/FileProvider/com.egnyte.DesktopApp.FileProvider'\ntrash $LOGGED_IN_USER '~/Library/Caches/SentryCrash/EgnyteLaunchHelper'\ntrash $LOGGED_IN_USER '~/Library/Caches/SentryCrash/EgnyteUpgradeChecker'\ntrash $LOGGED_IN_USER '~/Library/CloudStorage/Egnyte-*'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.egnyte.DesktopApp'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.egnyte.DesktopApp.FileProvider'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.egnyte.DesktopApp.FinderHelper'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.egnyte.DesktopApp.FinderHelper.FinderSync'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/FELUD555VC.group.com.egnyte.DesktopApp'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apple.FileProvider/com.egnyte.DesktopApp.FileProvider'\n", + "808a634e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.egnyte.DesktopApp'\nif [ -d \"$APPDIR/Egnyte.app\" ]; then\n\tsudo mv \"$APPDIR/Egnyte.app\" \"$TMPDIR/Egnyte.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Egnyte.app\" \"$APPDIR\"\n" + } +} diff --git a/ee/maintained-apps/outputs/elgato-control-center/darwin.json b/ee/maintained-apps/outputs/elgato-control-center/darwin.json new file mode 100644 index 0000000000..cc8943cee9 --- /dev/null +++ b/ee/maintained-apps/outputs/elgato-control-center/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "1.8.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.corsair.ControlCenter';" + }, + "installer_url": "https://edge.elgato.com/egc/macos/eccm/1.8.2/ElgatoControlCenter-1.8.2.20643.zip", + "install_script_ref": "e49ffe80", + "uninstall_script_ref": "f6271677", + "sha256": "c84270f56f4adacd1c47058cc5a3824b0911886f3519c21b4f54c4ebf9dce869", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "e49ffe80": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.corsair.ControlCenter'\nif [ -d \"$APPDIR/Elgato Control Center.app\" ]; then\n\tsudo mv \"$APPDIR/Elgato Control Center.app\" \"$TMPDIR/Elgato Control Center.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Elgato Control Center.app\" \"$APPDIR\"\n", + "f6271677": "#!/bin/sh\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 if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 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 'com.corsair.ControlCenter'\nsudo rm -rf \"$APPDIR/Elgato Control Center.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.corsair.ControlCenterLauncher'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.corsair.ControlCenter'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.corsair.ControlCenter'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.corsair.ControlCenter'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.corsair.ControlCenterLauncher'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.corsair.ControlCenter.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/elgato-stream-deck/darwin.json b/ee/maintained-apps/outputs/elgato-stream-deck/darwin.json new file mode 100644 index 0000000000..bb1f3c6d2c --- /dev/null +++ b/ee/maintained-apps/outputs/elgato-stream-deck/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "7.1.0.22321", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.elgato.StreamDeck';" + }, + "installer_url": "https://edge.elgato.com/egc/macos/sd/Stream_Deck_7.1.0.22321.pkg", + "install_script_ref": "2e2bb03f", + "uninstall_script_ref": "0561d07f", + "sha256": "39e5f0ee2c22097a0332d6dcce9867c3bfe4c55aa28be9bef7af33cedda59531", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "0561d07f": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\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 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\nremove_launchctl_service 'com.elgato.StreamDeck'\nquit_application 'com.elgato.StreamDeck'\nremove_pkg_files 'com.elgato.StreamDeck'\nforget_pkg 'com.elgato.StreamDeck'\nsudo rm -rf '/Applications/Elgato Stream Deck.app'\nsudo rm -rf '/Library/LaunchAgents/com.elgato.StreamDeck.plist'\nsudo rm -rf '~/Library/LaunchAgents/com.elgato.StreamDeck.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.elgato.StreamDeck'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.elgato.StreamDeck'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.elgato.StreamDeck'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.elgato.StreamDeck.plist'\n", + "2e2bb03f": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/Stream_Deck_7.1.0.22321.pkg\" -target /\n" + } +} diff --git a/ee/maintained-apps/outputs/expressvpn/darwin.json b/ee/maintained-apps/outputs/expressvpn/darwin.json new file mode 100644 index 0000000000..bbf052be4f --- /dev/null +++ b/ee/maintained-apps/outputs/expressvpn/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "11.71.0.90727", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.expressvpn.ExpressVPN';" + }, + "installer_url": "https://www.expressvpn.works/clients/mac/expressvpn_mac_11.71.0.90727_release.pkg", + "install_script_ref": "06187be7", + "uninstall_script_ref": "7b339d2f", + "sha256": "4a13d83a20426d7dc96848ae33850d85820606440053325edf349597badd9b67", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "06187be7": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/expressvpn_mac_11.71.0.90727_release.pkg\" -target /\n", + "7b339d2f": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\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 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\nremove_launchctl_service 'com.expressvpn.ExpressVPN.agent'\n(cd /Users/$LOGGED_IN_USER && sudo '/Applications/ExpressVPN.app/Contents/Resources/uninstall.tool')\nremove_pkg_files 'com.expressvpn.ExpressVPN'\nforget_pkg 'com.expressvpn.ExpressVPN'\ntrash $LOGGED_IN_USER '/Library/Application Support/com.expressvpn.ExpressVPN'\ntrash $LOGGED_IN_USER '/Library/LaunchDaemons/com.expressvpn.expressvpnd.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.expressvpn.ExpressVPN'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.expressvpn.ExpressVPN'\ntrash $LOGGED_IN_USER '~/Library/Logs/ExpressVPN'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.expressvpn.ExpressVPN.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/fork/darwin.json b/ee/maintained-apps/outputs/fork/darwin.json new file mode 100644 index 0000000000..de0eb76af7 --- /dev/null +++ b/ee/maintained-apps/outputs/fork/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "2.60.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.DanPristupov.Fork';" + }, + "installer_url": "https://cdn.fork.dev/mac/Fork-2.60.4.dmg", + "install_script_ref": "e6e8997c", + "uninstall_script_ref": "92b40975", + "sha256": "5dbf9cfdef2d89de3251d6b2669ca77138e15be170a5ab7f43e76cfc9062ff5f", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "92b40975": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/Fork.app\"\nsudo rm -rf 'fork'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.danpristupov.fork.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.DanPristupov.Fork'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Fork'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.DanPristupov.Fork'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.DanPristupov.Fork'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.DanPristupov.Fork.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.DanPristupov.Fork'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.DanPristupov.Fork.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/Fork.log'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.DanPristupov.Fork.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.DanPristupov.Fork.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.DanPristupov.Fork'\n", + "e6e8997c": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.DanPristupov.Fork'\nif [ -d \"$APPDIR/Fork.app\" ]; then\n\tsudo mv \"$APPDIR/Fork.app\" \"$TMPDIR/Fork.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Fork.app\" \"$APPDIR\"\nmkdir -p .\n/bin/ln -h -f -s -- \"$APPDIR/Fork.app/Contents/Resources/fork_cli\" \"fork\"\n" + } +} diff --git a/ee/maintained-apps/outputs/front/darwin.json b/ee/maintained-apps/outputs/front/darwin.json new file mode 100644 index 0000000000..1e628056b9 --- /dev/null +++ b/ee/maintained-apps/outputs/front/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "3.67.6", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.frontapp.Front';" + }, + "installer_url": "https://dl.frontapp.com/desktop/builds/3.67.6/Front-3.67.6-arm64.zip", + "install_script_ref": "9cfdb848", + "uninstall_script_ref": "b3154f7f", + "sha256": "f97adced8553e769d42c6f975f52f59bcd41cebd308fe601a58d3f1e1ae21129", + "default_categories": [ + "Communication" + ] + } + ], + "refs": { + "9cfdb848": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.frontapp.Front'\nif [ -d \"$APPDIR/Front.app\" ]; then\n\tsudo mv \"$APPDIR/Front.app\" \"$TMPDIR/Front.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Front.app\" \"$APPDIR\"\n", + "b3154f7f": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/Front.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Front'\ntrash $LOGGED_IN_USER '~/Library/FrontBoard'\ntrash $LOGGED_IN_USER '~/Library/Logs/Front'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.frontapp.Front.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.frontapp.Front.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/ghostty/darwin.json b/ee/maintained-apps/outputs/ghostty/darwin.json new file mode 100644 index 0000000000..da72fb12e6 --- /dev/null +++ b/ee/maintained-apps/outputs/ghostty/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "1.2.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.mitchellh.ghostty';" + }, + "installer_url": "https://release.files.ghostty.org/1.2.3/Ghostty.dmg", + "install_script_ref": "8af82cab", + "uninstall_script_ref": "cf87f8a0", + "sha256": "f35ee91f116e28027ab9f8def45098c7575b44b407ff883a2dcd2985c483206b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "8af82cab": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.mitchellh.ghostty'\nif [ -d \"$APPDIR/Ghostty.app\" ]; then\n\tsudo mv \"$APPDIR/Ghostty.app\" \"$TMPDIR/Ghostty.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Ghostty.app\" \"$APPDIR\"\n", + "cf87f8a0": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/Ghostty.app\"\ntrash $LOGGED_IN_USER '~/.config/ghostty/'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.mitchellh.ghostty'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.mitchellh.ghostty'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.mitchellh.ghostty'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.mitchellh.ghostty.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.mitchellh.ghostty.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.mitchellh.ghostty'\n" + } +} diff --git a/ee/maintained-apps/outputs/gimp/darwin.json b/ee/maintained-apps/outputs/gimp/darwin.json new file mode 100644 index 0000000000..1eadb967b2 --- /dev/null +++ b/ee/maintained-apps/outputs/gimp/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "3.0.6", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.gimp.gimp-3.0';" + }, + "installer_url": "https://download.gimp.org/gimp/v3.0/macos/gimp-3.0.6-arm64.dmg", + "install_script_ref": "6f15971b", + "uninstall_script_ref": "2cdb3a30", + "sha256": "6f4e7f8ed7ebfa80dcb6e0c05f9b1d6bd3d5a991e99abc2f3391cf37bfd97d70", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2cdb3a30": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/GIMP.app\"\nsudo rm -rf 'gimp'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Gimp'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.gimp.gimp-3.0.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.gimp.gimp-3.0.savedState'\n", + "6f15971b": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'org.gimp.gimp-3.0'\nif [ -d \"$APPDIR/GIMP.app\" ]; then\n\tsudo mv \"$APPDIR/GIMP.app\" \"$TMPDIR/GIMP.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/GIMP.app\" \"$APPDIR\"\n" + } +} diff --git a/ee/maintained-apps/outputs/hyper/darwin.json b/ee/maintained-apps/outputs/hyper/darwin.json new file mode 100644 index 0000000000..02e50b70ec --- /dev/null +++ b/ee/maintained-apps/outputs/hyper/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "3.4.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'co.zeit.hyper';" + }, + "installer_url": "https://github.com/vercel/hyper/releases/download/v3.4.1/Hyper-3.4.1-mac-arm64.zip", + "install_script_ref": "c2e48c1b", + "uninstall_script_ref": "524382b3", + "sha256": "7d2440fdd93fde4101e603fe2de46732b54292a868ad17dbcb55288e6f8430a8", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "524382b3": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\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 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\nsudo rm -rf \"$APPDIR/Hyper.app\"\ntrash $LOGGED_IN_USER '~/.hyper.js'\ntrash $LOGGED_IN_USER '~/.hyper_plugins'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/co.zeit.hyper.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Hyper'\ntrash $LOGGED_IN_USER '~/Library/Caches/co.zeit.hyper'\ntrash $LOGGED_IN_USER '~/Library/Caches/co.zeit.hyper.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Cookies/co.zeit.hyper.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/Hyper'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/co.zeit.hyper.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/co.zeit.hyper.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/co.zeit.hyper.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/co.zeit.hyper.savedState'\n", + "c2e48c1b": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'co.zeit.hyper'\nif [ -d \"$APPDIR/Hyper.app\" ]; then\n\tsudo mv \"$APPDIR/Hyper.app\" \"$TMPDIR/Hyper.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Hyper.app\" \"$APPDIR\"\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Egnyte.tsx b/frontend/pages/SoftwarePage/components/icons/Egnyte.tsx new file mode 100644 index 0000000000..711726d9ad --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Egnyte.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Egnyte = (props: SVGProps) => ( + + + +); +export default Egnyte; diff --git a/frontend/pages/SoftwarePage/components/icons/ElgatoControlCenter.tsx b/frontend/pages/SoftwarePage/components/icons/ElgatoControlCenter.tsx new file mode 100644 index 0000000000..1553c60604 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ElgatoControlCenter.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ElgatoControlCenter = (props: SVGProps) => ( + + + +); +export default ElgatoControlCenter; diff --git a/frontend/pages/SoftwarePage/components/icons/ElgatoStreamDeck.tsx b/frontend/pages/SoftwarePage/components/icons/ElgatoStreamDeck.tsx new file mode 100644 index 0000000000..eb7d5b078f --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ElgatoStreamDeck.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ElgatoStreamDeck = (props: SVGProps) => ( + + + +); +export default ElgatoStreamDeck; diff --git a/frontend/pages/SoftwarePage/components/icons/ExpressVpn.tsx b/frontend/pages/SoftwarePage/components/icons/ExpressVpn.tsx new file mode 100644 index 0000000000..c34eee1856 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ExpressVpn.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ExpressVpn = (props: SVGProps) => ( + + + +); +export default ExpressVpn; diff --git a/frontend/pages/SoftwarePage/components/icons/Fork.tsx b/frontend/pages/SoftwarePage/components/icons/Fork.tsx new file mode 100644 index 0000000000..9d0304e1d8 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Fork.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Fork = (props: SVGProps) => ( + + + +); +export default Fork; diff --git a/frontend/pages/SoftwarePage/components/icons/Front.tsx b/frontend/pages/SoftwarePage/components/icons/Front.tsx new file mode 100644 index 0000000000..05a48c28be --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Front.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Front = (props: SVGProps) => ( + + + +); +export default Front; diff --git a/frontend/pages/SoftwarePage/components/icons/Ghostty.tsx b/frontend/pages/SoftwarePage/components/icons/Ghostty.tsx new file mode 100644 index 0000000000..fb587d7d62 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Ghostty.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Ghostty = (props: SVGProps) => ( + + + +); +export default Ghostty; diff --git a/frontend/pages/SoftwarePage/components/icons/Gimp.tsx b/frontend/pages/SoftwarePage/components/icons/Gimp.tsx new file mode 100644 index 0000000000..db8d60eea2 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Gimp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Gimp = (props: SVGProps) => ( + + + +); +export default Gimp; diff --git a/frontend/pages/SoftwarePage/components/icons/Hyper.tsx b/frontend/pages/SoftwarePage/components/icons/Hyper.tsx new file mode 100644 index 0000000000..fb2e76410d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Hyper.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Hyper = (props: SVGProps) => ( + + + +); +export default Hyper; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index b85c404cd0..ccb4d11646 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -67,13 +67,21 @@ import Drawio from "./DrawIo"; import Dropbox from "./Dropbox"; import Eclipse from "./Eclipse"; import Edge from "./Edge"; +import Egnyte from "./Egnyte"; import EightXEightWork from "./8X8Work"; +import ElgatoControlCenter from "./ElgatoControlCenter"; +import ElgatoStreamDeck from "./ElgatoStreamDeck"; import Evernote from "./Evernote"; import Excel from "./Excel"; +import ExpressVpn from "./ExpressVpn"; import Extension from "./Extension"; import Falcon from "./Falcon"; import Figma from "./Figma"; import Firefox from "./Firefox"; +import Fork from "./Fork"; +import Front from "./Front"; +import Ghostty from "./Ghostty"; +import Gimp from "./Gimp"; import GitHubDesktop from "./GitHubDesktop"; import GitKraken from "./GitKraken"; import GoLand from "./GoLand"; @@ -81,6 +89,7 @@ import GoogleDrive from "./GoogleDrive"; import GpgKeychain from "./GpgKeychain"; import GrammarlyDesktop from "./GrammarlyDesktop"; import Granola from "./Granola"; +import Hyper from "./Hyper"; import IMazingProfileEditor from "./IMazingProfileEditor"; import ITerm from "./ITerm"; import Insomnia from "./Insomnia"; @@ -244,11 +253,19 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "draw.io": Drawio, dropbox: Dropbox, eclipse: Eclipse, + egnyte: Egnyte, + "elgato control center": ElgatoControlCenter, evernote: Evernote, + expressvpn: ExpressVpn, falcon: Falcon, figma: Figma, firefox: Firefox, + fork: Fork, + front: Front, + ghostty: Ghostty, + gimp: Gimp, "gpg keychain": GpgKeychain, + hyper: Hyper, keepassxc: KeePassXc, libreoffice: LibreOffice, "microsoft autoupdate": MicrosoftAutoUpdate, @@ -319,6 +336,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { snagit: Snagit, sourcetree: Sourcetree, spotify: Spotify, + "stream deck": ElgatoStreamDeck, "sublime text": SublimeText, tableau: TableauDesktop, tableplus: TablePlus, diff --git a/website/assets/images/app-icon-egnyte-60x60@2x.png b/website/assets/images/app-icon-egnyte-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..199116181afd2a3dace12cc50ac476e08c582c59 GIT binary patch literal 6151 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 Z2f#zGkgsDn<9~ltQB%=Wu2eJ+`!5l1HHQEI literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-expressvpn-60x60@2x.png b/website/assets/images/app-icon-expressvpn-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d92075c5f4e0e6d9c9da663d0014d2d152f06143 GIT binary patch literal 3899 zcmai1cRbXO|9{_b&OUo{NTH-s*_?=T85d_{l-b8hGLMXt8Ha?(Iz;x&CNm>GB3ed9 zR@vh?oblD~@%a6IfBhc6Kc27WYd!yXz5aVX$Leb{(eu#*0KlY!)-*h0!e78)XR%Aw zX5frKo`%}DfbvfQf6fX`2Q!_AdU}A=Sq=w4kxl^g@5&kY&Hwk&cdv3HI^fT-5+)_P zA<DSJAaU{oiAEGWMAKtq1MT;ZZHV%wR^ePxI|uBKB6ABpa^|(ZM*i%l#x#UW+i}(p<*{r?U$jW$I^( z1TVC&zm2(Y0Y?1}-fZmZ{-gAb)!L%-^REGeF*2rLS2?1T9__%6aX{W~)%>t8A=#XbU~Hrnm{+f$f| zN?lY_9-8~)kMTixc8)lXGz@lE(>l!k(?nsR?&X=@U<+wNRo@%az0!L_AvoMtAIzt^ zdJ@bt(A+NfgSC8AF%*UPVOuiL^U4A+pYYWR%#5*uuKwsWWUyXc-qMU*r>>=adQHC0 zWqnDxyZ>@-J{O_Rt9C2%Y8HFr3u)pbABNZWMBBHH0~mgJv3*DM?VG{>k7j8qvh2~o z_PIeJBA2M+?XW8Prdg&9@O7|b$G@V9o850whS7f8y?T@wO z$G7E5W!Fvl+&XS{LQyQ=Fmw*QFh>zNGh}%c0r?cic?PSPaZ*2|< z4|^(WKtx1o*^CI*tFNuq`-`fX7LGvS`el)llqniUxo%^IWK&DnSGno=#_@hOWUSt4 z($n>4Nc|NY(+#;`{{FTtZ-cL1+x;{TBTNaFS3B>V)62yWx&zvepNnW+n3 zf;Jvr*rX`4m=_dU9YBW2*tj!6ZyFbhqrhZN{DV8vf;eg>^UMR9y<3yUZ;B5|F1dEm z)G{i)YYWOeJlXE%?m)Vg^b22@C;-Y#w4953|CPX@GOo(960;dWduqFktAX22 z=uKiuEJibX%!qt_Ug?VN280$Y}eoH{>C5((UCH0D8vIh8w9qT6P?== zS>Hly#cz?l=W<7@)f(kEf2p9<$`NNpneYygwM)4aX{~d$& zK5?MBc`;%o;4$JgeGf&LaBQGzcm333CFpI^2pm=0W^W^=$^Z7_hwqf?J=G%#C=6D4 z{+EBq{35A6K^x$>IaTj@d+gip@`^k3fj~ZYQ%m9Tf9V|eOtbfiuXA}~C-x(!f@oE# z2M|Q3`G)aYiZ+mh^X%I9Swz?@C$Q9atSfCqpwsxFo5g!~M1Zd+egDd+ueOYdo=F?* zk22K`CBxY1CV%Dyg2&Ho$AJxBJ@Z~G*b$MhsR-gyB;orD57bxpoq)yst)f?r7(mL) zeHyw-?%?@2VK}#;GrnP8c(Xj;F3D z^Qr_)?gu&Uy&IV00~H=rwEFnn7jAI9jcd~vSPs|tz4x{Gz)GG>sRzXg-Ej7Yrw6?G zMzwC2W9wOG1q?c)1~Va{Yl3eMHxp#hUSWYD*WKcV*@}cUn%abaSy{dKy?j%3E0lKj zcU`dhbXz^-BvZ5NaY7n?bQ5&FW!gFLW_cVt!C5t&JOiwnJxQGHPXF*!tnrCn`=eQ2 z-|6JC_$NO@Z#ecE1Vx1A*~BZiC6ux0{rW9eHlNTY8oMeRS3=Ibsw}y>i&hhMjAKVy z@PORddfT^)PPxXPBsb?i8q$rM=Web zxjSMJ{>KVRuM<#>IHWX&plxkj}>#40mok;?gZ2Nu0^!^PKTaQR9|?^ zm;77Zgdu#UXLB((+awRmAAO#KAn$Bqql;b2!HV0vGZn#*z_N7hi)kK|`~yg8AC?82hJ-@4`cmQo53<({o2)Ey`nI>2pCkO>p zg?2{WnKF@0&d`?v6}r|q^s@*@sKl#WZY=y1&Hv*aH}m_Ww5o|euAe+S6EQ%sWQ~gM zM2m{ddt#8MOrLa_#>j8)brlw6C}S`1rL0IGkBvYOZ7<|RvaM1V#D=#bZ(wG%cTNm8 zlgm%agdYm1J7V9sSE7Ib(nqaq6GBUvuJ*@3mQ(r@&y_WV+Khp4`)cla_sJ2TiA;QI z*CFwwwdC|y9qSacmR!8hX#Pchfdm&(b*(E~GE9NLb(+_rU2^=#*iu`Lq$D!0TAfq+ zKKC+l8MIohXrclUD5&Zg5Hy3eF`e|?%(aHI6Fk3#bjjaU==zn|`$7k-NR?IKi7e;- z-qFGR0IaBi^x3E0j^(b0tT|)q6oUayzA%TxpUSC>UWO7;jLWisLF8d`U1P{ zs?oZpiQRpB%CeSexLzR7F_me=aIjb4$b?#iy_DM1FUb`~hp?U9lmF12H~;(*k#4vt zLR(riT}u?po!I%5{D^0&;Zx%Cu6Rc9OfXq5)c8GL0@v(F`mygk3?Rt$g{ClIn?V5W|8R3JrJYC8AgERzmb-g|yP6Xz#!>s{D?F1WIb7V@4$>Q3O}@ zn^iCC#lbI-%5A4X7s1|qORSZ43A6a4`#*SE6NoKGn_OJ+#0J*4_}$mhu0?{tBF zNgjey;VJK{l2#EKP-m8_wRWmBIAeUgnu$s>_TdHB`pnQ8U$PWj&>)qhaQucT?5x;k0<<~!;ViiKEG5baP`k0 zbz6@^5Rx2ST(i23Ho3}~l71Lt3WNngtCaXEx6(5dup3M@gZfHkCUQQdNmf#zYR)74ShZt=jB(2RbHyxsZ#-UC5PbLb z6Xt<9g{kt<`4tcNF>(B3+sny@zQo9~dvh72pZHMS6z%`l^ZmCY9DpCOcvx&qhx4<) Q`)gcvZtH87-?D!8AM`Xs5dZ)H literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-fork-60x60@2x.png b/website/assets/images/app-icon-fork-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..16d3b6c35c5a209505df1642faf936a23e8c3bef GIT binary patch literal 15833 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 qETH+Vy=VfkdP9Pl5UY**af6lX^@bR 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°h6~-P? zf;cisFA1X}FXxewuvhZS9z~q95+3;M;Ev47mxK>F#Gi#q>fAvIw~rTQ^I=g?ODOfP(6z763|Akbib{5D)lY_>qr|K>%0*Aj{6XkwH;eu-wgjKnV{l zn^3Vi{LtFPV{^odFe^mJaU5@tbHV@?c$6?QJ_jCw&u89JQLcnvuA7t(b(8Qp{B~Z( zSr;jPyb-{;G+z~$H7v?yuG`0 z>4JfOo|mhC@pASFFLy$eg~nkOC@##V2<}M9d7mu~I5ArsIpnO|fwG^|WEj~aGPuIn zGl>6ouN^4^$wAp8&2~qG@+JJv2!~J9!GX}DZipA9$iNbQHaDAhL-Y;$NOC;zJ2*U* zP0~88PDqI+y-i;Ml=b3@?|S>~x4ZM8kK~4IMH;BPgfC=ZhB#*nQ@uQ+6f;=?16VPu z|XxN>mJO(M_H!x06?nc_{X8zG4uDpmGcKi#-91Em3_)_!;wKTE8w>W zWsgAV=pQ?<175rwehHCFoCCL`6bZ2eD)5R(&Lp8xdYon2i*=x5U>RDi){U==b?i26Ns81*p?U{}2hdY_EV0ro65Z+S zQxPu*Wsd~zh)}+S-x=ZXi9wS_+kK!AF9u5nmhd}j@5rD;EmAmM&LVrHyp9OvOZc4; z%AgY8O_^PGlpms3nGis6X;FT-%^G+|qLbvlWsk!z`c4kY9+57C2#-DFNgR$rmVxc% zIG|n1apvVz2fTPW{Pwzd5{(_k2~@%#M*=p)|H^~_QkR9DYBRWW6HCCwJt@}?;dKCL4YCrkqY6%hCe{tO?TDH2-*_=4#=A10y(*^v zFB2XBtyuQ)kjSVK>$pQFuFhfZm+hzEE-hQs5jEm}ikdZR5dYW2_&D(u;n@RGW&EvT_R_lG4=P@o|w~HBG3tOqov&j=TUMDI>SA+nJ24X`oss{c!s@U_;yZ z&224Cs$1XTbNL-fH{$hZZ-#@5iB1*-eX=~QSmr2>Rc0a3<$s?JdBC` zQBl@?(`IhD-3VSS*tZ|P^%-7uKF~@>JPT%?dj6k>KK2HqH|@PYcHdV}RMJr_T^M*K z1}q(E(*mq1Q~#ESQ!u|8vXgy0ZEU4 zvc~YO9%Hpphb}V$s1jp+yCf=1SXhz=A9dsb5@W<&7H$pOH1?I1%hjuHJT@{a?4~ct zm(6CmX&ke9jtAaZyZVP0`)w&ME$u}R@QJbKffvF)J0W2E3lA%LlT*j4V+n3-nGnE& z>4R$XR2&%=f#XkZAU_-y9uekIVluFWN0dBgX7jDqk`>_=>ovw%Lj&)%;v!n9k>*!) z_2{r?3rpEl7*>DBlov0t0@#-T_KuwYOF72bd5(`zZ7iBmp0aJ;yvuo0DnHCKDCXXQ1X zI&1Gq&z%0p41Rgd_9{`dC#GGQxD9U% znP9Po!pgN>W)3KI&FxD*y_Y-1-@PqhjN$ zPO*fCP2&Y1t+=#gc=x9l8#Z6$avmTzY-h4AA b1{?qXjkQwIwFsNq00000NkvXXu0mjf-70jQ literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-hyper-60x60@2x.png b/website/assets/images/app-icon-hyper-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a098e2396efd8cf021300b130fd119326c57ca03 GIT binary patch literal 7028 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 Oyi^o4pVi1&hW-yR(<=l3 literal 0 HcmV?d00001