diff --git a/ee/maintained-apps/inputs/homebrew/cursor.json b/ee/maintained-apps/inputs/homebrew/cursor.json new file mode 100644 index 0000000000..9c98732fcf --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/cursor.json @@ -0,0 +1,8 @@ +{ + "name": "Cursor", + "unique_identifier": "com.todesktop.230313mzl4w4u92", + "token": "cursor", + "installer_format": "zip", + "slug": "cursor/darwin", + "default_categories": ["Developer tools"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 04d648b102..6ccd6ce6e1 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -71,6 +71,13 @@ "unique_identifier": "Cloudflare WARP", "description": "Cloudflare WARP enhances internet safety and performance by encrypting your data and optimizing connections for privacy." }, + { + "name": "Cursor", + "slug": "cursor/darwin", + "platform": "darwin", + "unique_identifier": "com.todesktop.230313mzl4w4u92", + "description": "Cursor AI boosts your coding productivity by giving smart, context-aware code suggestions, quick explanations, and easy refactors — all inside your editor." + }, { "name": "Cursor", "slug": "cursor/windows", @@ -251,7 +258,7 @@ "slug": "yubico-yubikey-manager/darwin", "platform": "darwin", "unique_identifier": "com.yubico.ykman", - "description": "YubiKey Manager is an application for configuring any YubiKey. Requires Rosetta 2. YubiKey Manager won't get security updates or bug fixes. It's End of Life: https://www.yubico.com/support/download/yubikey-manager/" + "description": "YubiKey Manager is an application for configuring any YubiKey. Requires Rosetta 2. YubiKey Manager won't get security updates or bug fixes. It's End of Life: https://www.yubico.com/support/download/yubikey-manager" }, { "name": "Zoom", diff --git a/ee/maintained-apps/outputs/cursor/darwin.json b/ee/maintained-apps/outputs/cursor/darwin.json new file mode 100644 index 0000000000..c88bd1ddb9 --- /dev/null +++ b/ee/maintained-apps/outputs/cursor/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "1.7.54", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.todesktop.230313mzl4w4u92';" + }, + "installer_url": "https://downloads.cursor.com/production/5c17eb2968a37f66bc6662f48d6356a100b67be8/darwin/arm64/Cursor-darwin-arm64.zip", + "install_script_ref": "d059edf1", + "uninstall_script_ref": "f7561d44", + "sha256": "cdf2990e01ce1f8fb64c077661788133b88819818bc8aadd78a5d70f96240ed1", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "d059edf1": "#!/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\u003e/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 \u0026\u0026 \"$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 \u003c timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" \u003e/dev/null 2\u003e\u00261; then\n if ! pgrep -f \"$bundle_id\" \u003e/dev/null 2\u003e\u00261; 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.todesktop.230313mzl4w4u92'\nif [ -d \"$APPDIR/Cursor.app\" ]; then\n\tsudo mv \"$APPDIR/Cursor.app\" \"$TMPDIR/Cursor.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Cursor.app\" \"$APPDIR\"\nmkdir -p .\n/bin/ln -h -f -s -- \"$APPDIR/Cursor.app/Contents/Resources/app/bin/code\" \"cursor\"\n", + "f7561d44": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil \u003c\u003c\u003c \"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/Cursor.app\"\nsudo rm -rf 'cursor'\ntrash $LOGGED_IN_USER '~/.cursor'\ntrash $LOGGED_IN_USER '~/.cursor-tutor'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Caches/cursor-updater'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Cursor'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.todesktop.*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.todesktop.*.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.todesktop.*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Cursor'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/com.todesktop.*.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.todesktop.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.todesktop.*.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/todesktop.com.ToDesktop-Installer.savedState'\n" + } +} \ No newline at end of file