[
  {
    "path": ".gitattributes",
    "content": "commands/README.md          -diff -merge\ncommands/README.md          linguist-generated=true\ncommands/extensions.json    -diff -merge\ncommands/extensions.json    linguist-generated=true"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "## Description\n\n<!-- Please write a short summary for this change. If it's a new script command, explain what it does. -->\n\n## Type of change\n\n<!-- Please delete options that are not relevant. -->\n\n- [ ] New script command\n- [ ] Bug fix\n- [ ] Improvement of an existing script\n- [ ] Documentation update\n- [ ] Toolkit change\n- [ ] Other (Specify)\n\n## Screenshot\n\n<!-- If it's a new script command, please include a screenshot or a GIF of how it works. -->\n\n## Dependencies / Requirements\n\n<!-- If it's a new script command that requires some additional steps to make it work, please describe it here. E.g. requiring installation of another command line tool or requirement to specify username / API token / etc. -->\n\n## Checklist\n\n- [ ] I have read [Contribution Guidelines](https://github.com/raycast/script-commands/blob/master/CONTRIBUTING.md)"
  },
  {
    "path": ".github/stale.yml",
    "content": "daysUntilStale: 30\ndaysUntilClose: 7\nexemptLabels:\n  - security\n  - enhancement\nstaleLabel: wontfix\nmarkComment: >\n  This issue/pull request has been automatically marked as stale because it has not had\n  recent activity. It will be closed if no further activity occurs in the next 7 days to\n  keep our backlog clean. Thanks for your contributions.\ncloseComment: false"
  },
  {
    "path": ".github/workflows/script-commands.yml",
    "content": "name: Set as Executable and Generate Documentation\n\non:\n  push:\n    branches: [master]\n    paths-ignore:\n      - commands/README.md\n      - commands/extensions.json\n\njobs:\n  scriptCommands:\n    runs-on: macos-15\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}\n\n      - name: Setup Xcode\n        uses: raycast/github-actions/setup-xcode@xcode-16.1.x\n\n      - name: Setup GIT\n        uses: raycast/github-actions/setup-git@v1.1.0\n\n      - name: Build Toolkit\n        run: |\n          make build\n\n      - name: Check and adjust scripts\n        run: |\n          make set-executable-and-commit\n\n      - name: Generate Script Commands Documentation\n        run: |\n          make gen-docs-and-commit\n\n      - name: Rebase\n        if: success()\n        run: git pull origin ${{ github.ref }} --autostash --rebase -X ours\n\n      - name: Push\n        if: success()\n        uses: ad-m/github-push-action@master\n        with:\n          branch: ${{ github.ref }}\n          github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}\n\n      - name: Notify Failure\n        if: failure()\n        uses: edge/simple-slack-notify@master\n        with:\n          color: \"danger\"\n          text: \":no_entry_sign: ${env.GITHUB_WORKFLOW} has failed\"\n          fields: |\n            [\n              { \"title\": \"Action logs:\", \"value\": \"${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}\"},\n              { \"title\": \"Commit:\", \"value\": \"${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/commit/${ env.GITHUB_SHA }\"}\n            ]\n        env:\n          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_STREAM_INFRA_CHANNEL_WEBHOOK_URL }}\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.build\n/Packages\n*.xcodeproj\nxcuserdata/\n.swiftpm\n.idea\n"
  },
  {
    "path": ".swiftlint.yml",
    "content": "indentation: 2\nincluded:\n  - Tools/Toolkit\nexcluded:\n  - Tools/Toolkit/.build\n  - _enabled-commands\n  - commands\n  - templates\ndisabled_rules:\n  - cyclomatic_complexity\n  - file_length\n  - line_length\n  - nesting\n  - todo # Use custom_todo\n  - unused_setter_value\n  - generic_type_name\n  - identifier_name\n  - function_parameter_count\n  - type_name\n  - function_body_length\n  - type_body_length\nopt_in_rules:\n  - indentation_width\n  - array_init\n  - closure_end_indentation\n  - closure_spacing\n  - collection_alignment\n  - empty_collection_literal\n  - empty_count\n  - empty_string\n  - fallthrough\n  - fatal_error_message\n  - file_header\n  - overridden_super_call\n  - sorted_imports\n  - unused_declaration\n  - unused_import\n  - vertical_whitespace_closing_braces\n  - vertical_whitespace_opening_braces\n  - yoda_condition\nindentation_width:\n  indentation_width: 2\ntrailing_comma:\n  mandatory_comma: true\nfile_header:\n  required_pattern: ([Copyright (c) \\d{4}\\-\\d{4} Raycast. All rights reserved.])\\w+\nidentifier_name:\n  min_length:\n    error: 3\n  excluded:\n    - id\n    - os\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThank you for your interest in contributing to Raycast Script Commands! Here you will find simple guidelines that can help you with getting started.\n\n- [Contributing](#contributing)\n  - [Guidelines](#guidelines)\n    - [Git and Pull Requests](#git-and-pull-requests)\n    - [Folder structure](#folder-structure)\n    - [English style convention](#english-style-convention)\n    - [File naming convention](#file-naming-convention)\n    - [Metadata convention](#metadata-convention)\n    - [Scripts that require additional modification](#scripts-that-require-additional-modification)\n    - [Scripts that require installation of runtimes and dependencies](#scripts-that-require-installation-of-runtimes-and-dependencies)\n    - [Scripts that require installation of apps](#scripts-that-require-installation-of-apps)\n    - [Bash profiles and environmental variables](#bash-profiles-and-environmental-variables)\n    - [Auto generated files](#auto-generated-files)\n  - [Examples](#examples)\n\n## Guidelines\n\n### Git and Pull Requests\n\nPlease make sure that your pull request makes it easy for the reviewer to understand what the change is about (fill in the pull request template) and keep your change focused (do not create a PR containing multiple complex Script Commands).\n\nIn order to keep the Git history clean, we prefer if you rebase your branch on top of master, so that we can do a fast-forward merge back to master. Make sure to use descriptive commit messages (incl. proper spelling), and squash commits (\"fix typo\") already on your end.\n\n### Folder structure\n\nTry to bundle scripts that are related in a directory / sub-directory. Avoid having generic folders with lots of different commands. For example instead of having one `media` directory that contains integrations with different services, it's better to create sub-directories for each service:\n\n```markdown\n. commands\n└─ media\n   ├─ spotify\n   ├─ apple-music\n   └─ youtube\n```\n\nReasoning behind it: To avoid automatically including scripts that people may not be interested in. E.g. if you're using Spotify scripts, there is a lower chance you will need to access Apple Music.\n\nImages should go into dedicated `images` folder:\n\n```markdown\n. commands\n└─ media\n   └─ spotify\n      └─ images\n         └─ spotify-logo.png\n      └─ spotify-next-track.applescript\n      └─ spotify-prev-track.applescript\n```\n\n### English style convention\n\nUse American English spelling and style for your command metadata. \nTo make sure you use the right version, refer to [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_American_and_British_English) or use [British to American English Converter](https://www.infoenglish.net/british-to-american-english/)\n\n### File naming convention\n\nUse lowercased, dash-case format for script files and directories, and use proper file extensions: Applescript should be `.applescript`, Swift should be `.swift`, Bash should be `.sh`, etc.\nExample: `spotify-next-track.applescript`\n\n### Metadata convention\n\n- **Title:** Raycast's UI adopts title-cased strings for all command titles as per Apple's Human Interface Guidelines. Please make sure your command title follows this pattern to look good between other commands.\n- **Mode:** Use the `silent` mode for commands that are instant, e.g. `Toggle Hidden Files`. Use the `compact` mode for long-running tasks, e.g. some networking requests. Use the `fullOutput` mode for commands that print more information, e.g. output some file content. And use the `inline` mode for dashboard items, e.g. `Current Weather`.\n- **Package Name:** While `packageName` is an optional parameter and if it's missing Raycast will derive it from the directory name, it is required in this repository to improve portability. Make sure to always provide it in your script commands.\n\n### Scripts that require additional modification\n\n1. Ensure that comments include instructions on how to start using the script. E.g. you might need to provide API token, username or tweak parameters.\n2. Add `.template.` to the file name for scripts that need modifications. Then scripts won't be automatically parsed by Raycast and people who want to use it will need to copy the file and remove `.template.` part.\n\nExample: `github-notifications.template.sh`\n\n*NOTE:* This might change as soon as we introduce a better way to provide parameters / environmental variables.\n\n### Scripts that require installation of runtimes and dependencies\n\nMost scripts are either written in Bash or AppleScript. We also allow Swift and Node runtimes; however, always check if there's a strong need for those runtimes since they don't come pre-installed on macOS. We have non-technical users who don't bother installing a Node runtime just to perform a simple function.\n\nSome general guidelines:\n- First, ask yourself if you can build the Script Command without any dependencies. Less or no dependencies make it easier for others to adopt your command and make it more portable.\n- A question you can ask yourself is whether a dependency is \"deep\" or \"shallow\": a deep dependency hides complex functionality behind a simple interface. A shallow dependency is the opposite. Avoid using shallow dependencies and check whether there are built-in Unix tools (curl, awk, sed, etc.) that can solve the same problem without much code.\n- Also consider transitive dependencies and security aspects. The npm ecosystem, for instance, has been notorious for pulling-in dependencies for trivial tasks, sometimes exposing the user to security issues.\n\nIf you still need a dependency, follow these guidelines:\n\n1. At the top of the file add a comment section explicitly stating the dependency and how to install it. Example:\n   ```\n   #!/bin/bash\n\n   # Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n   # Install via homebrew: `brew install jq`\n\n   # @raycast.schemaVersion 1\n   # @raycast.title Prettify JSON from Clipboard\n   ...\n   ```\n\n\n2. Make sure you have code that handles missing dependency. Example:\n   ```bash\n   if ! command -v download &> /dev/null; then\n\t     echo \"download command is required (https://github.com/kevva/download-cli).\";\n\t     exit 1;\n   fi\n   ```\n   \n### Scripts that require installation of apps\n\nSome Scripts control apps and therefore require them to be installed. Make sure to hint the requirement and add guidance on how to install it at the top of the script:\n\n```\n#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# @raycast.schemaVersion 1\n```\n\n### Bash profiles and environmental variables\n\nAll Script Commands are executed in a non-login shell to avoid additional information loaded from profiles that aren't relevant to Raycast. With an argument after a shebang, you can run a script in a login shell, e.g. `#!/bin/bash -l`. We don't allow Script Commands that make use of this feature in this repository. Mainly to guarantee easy portability, explicit injection of information and best performance.\n\n*NOTE:* We will add support for environmental variables in Raycast and keep track of it in [this issue](https://github.com/raycast/script-commands/issues/77).\n\n### Auto generated files\n\nThere are some files auto generated by our Toolkit after each commit pushed to this repository, for now, this is the list of files:\n\n- `commands/README.md`\n- `commands/extensions.json`\n\nRemember to keep these files unchanged. All manual changes will be lost when our integration workflow is performed. The information used to fill these files is collected from the Script Commands pushed to this repository. No changes on your side in these files are necessary.\n\n## Examples\n\nSome examples to get started:\n\n- **[Apple Music Play](commands/media/apple-music/apple-music-play.applescript)**: An `AppleScript` to start playing music.\n- **[Sentry Unresolved Issues](commands/developer-utils/sentry/sentry-unresolved-issues.template.py):** A `Python` script that fetches information from an API and parses the JSON response.\n- **[Slack Set Status](commands/communication/slack/set-slack-status.template.sh)**: A `Bash` script that sends a JSON payload with cURL.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020-2021 Raycast Technologies Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "EXECUTABLE_NAME = toolkit\n\nTOOLKIT_PATH = Tools/Toolkit\nBUILD_PATH_RELEASE = $(TOOLKIT_PATH)/.build/release\nEXECUTABLE_PATH_RELEASE = $(BUILD_PATH_RELEASE)/Toolkit\n\nBUILD_PATH_DEBUG = $(TOOLKIT_PATH)/.build/debug\nEXECUTABLE_PATH_DEBUG = $(BUILD_PATH_DEBUG)/Toolkit\n\nclean:\n\trm -rf $(TOOLKIT_PATH)/.build $(EXECUTABLE_NAME)\n\nbuild: clean\n\tswift build -c release --disable-sandbox --package-path $(TOOLKIT_PATH)\n\tln -s $(EXECUTABLE_PATH_RELEASE) $(EXECUTABLE_NAME)\n\nbuild-debug:\n\tif [ -f $(EXECUTABLE_NAME) ]; then rm $(EXECUTABLE_NAME); fi\n\n\tswift build --package-path $(TOOLKIT_PATH)\n\tln -s $(EXECUTABLE_PATH_DEBUG) $(EXECUTABLE_NAME)\n\ngen-docs:\n\t./$(EXECUTABLE_NAME) generate-documentation\n\ngen-docs-and-commit: gen-docs\n\t./$(TOOLKIT_PATH)/integration.sh commit_documentation\n\nset-executable:\n\t./$(EXECUTABLE_NAME) set-executable\n\nset-executable-and-commit: set-executable\n\t./$(TOOLKIT_PATH)/integration.sh commit_executable\n\nlint:\n\tswiftlint lint\n\nfix:\n\tswiftlint --fix\n\nopen:\n\topen -a /Applications/Xcode.app $(TOOLKIT_PATH)\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <img alt=\"Raycast Logo\" src=\"images/logo.png\" height=\"240\"/>\n\n  <div align=\"center\">\n    <a href=\"https://github.com/raycast/script-commands/tree/master/commands\">\n        <img alt=\"GitHub contributors\" src=\"https://img.shields.io/badge/dynamic/json?style=flat&color=FF6363&label=Script%20Commands&query=$.totalScriptCommands&url=https:%2F%2Fraw.githubusercontent.com%2Fraycast%2Fscript-commands%2Fmaster%2Fcommands%2Fextensions.json&logo=raycast&labelColor=202123\" />\n    </a>\n    <a href=\"https://twitter.com/raycastapp\">\n      <img alt=\"Twitter Follow\" src=\"https://img.shields.io/badge/follow-@raycastapp-blue?labelColor=202123&logo=x&color=eee\" />\n    </a>\n  </div>\n\n<br>\n\n  <h1>Raycast Script Commands</h1>\n\n</div>\n\n[Raycast](https://raycast.com/) lets you control your tools with a few keystrokes and installing script commands makes it possible to execute commands from anywhere on your desktop. They are a great way to speed up every-day tasks such as converting data, opening bookmarks or triggering dev workflows. This repository contains some example scripts as well as links to our community commands and documentation to write your own ones.\n\n**✨ Looking to build richer extensions?** Check out the Extensions API [here](https://github.com/raycast/extensions).\n\n🚨 For anything that is not related to script commands, please [send us an email](mailto:feedback@raycast.com), use the feedback command within Raycast, or join the [Slack community](https://www.raycast.com/community).\n\n<br>\n<br>\n\n![Script Command Banner](images/screenshots/script-commands-readme-header.png)\n\n<br>\n<br>\n\n## Install Script Commands from this repository\n\nTo install new commands, follow these steps:\n\n1. Choose a script from the [community repo](https://github.com/raycast/script-commands/tree/master/commands#apps) and save it into a new directory.\n   \n   Scripts containing the word `.template.` in the filename require some values to be set (check [the troubleshooting section](#troubleshooting-and-faqs) for more information).\n   \n   Alternatively, instead of creating a new directory you can reuse the repo's [`_enable-commands` folder](https://github.com/raycast/script-commands/tree/master/_enabled-commands).\n3. Open the Extensions tab in the Raycast preferences\n4. Click the plus button\n5. Click `Add Script Directory`\n6. Select directories containing your Script Commands\n\n**💡 Hint:** We recommend that you don't directly load the community script directories into Raycast to avoid potential restructuring and new script commands suddenly appearing in Raycast.\n\n![Add directory](/images/screenshots/add-directory.png)\n\n\n## Create your own Script Commands\n\nTo write your own custom Script Commands, go over the following steps:\n\n1. Use the `Create Script Command` functionality in Raycast\n2. Write and edit your script using your favourite code editor\n3. Run your Script Command from the Raycast root search\n\n**💡 Hint:** If you choose to write your script in `Bash`, we highly recommend using the [Shellcheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck) linter as this will ensure smooth running of your script. All  scripts uploaded to GitHub will need to have been run through ShellCheck.\n\n![Create Script Command](/images/screenshots/Create-Script-Command.png)\n\n### Metadata\n\nThese parameters are available for you to customize your Script Command in Raycast. For practical examples of how these should be used, as well as best practices and supported languages, please browse our templates and community-built scripts.\n\n| Name                 | Description                                                                                                                                                                                                                                                                          | Required | App Version         |\n|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------------------|\n|schemaVersion        | Schema version to prepare for future changes in the API. Currently there is only version 1 available.                                                                                                                                                                                | Yes      | 0.29+               |\n| title                | Display name of the Script Command that is shown as title in the root search.                                                                                                                                                                                                        | Yes      | 0.29+               |\n| mode                 | Specifies how the script is executed and how the output is presented. [Details of the options for this parameter can be viewed here](https://github.com/raycast/script-commands/blob/master/documentation/OUTPUTMODES.md) | Yes      | 0.29+               |\n| packageName          | Display name of the package that is shown as subtitle in the root search. When not provided, the name will be inferred from the script directory name.                                                                                                                               | No       | 0.29+               |\n| icon                 | Icon that is displayed in the root search. Can be an emoji, a file path (relative or full) or a remote URL (only https). Supported formats for images are PNG and JPEG. Please make sure to use small icons, recommended size - 64px.                                                | No       | 0.29+               |\n| iconDark             | Same as `icon`, but for dark theme. If not specified, then `icon` will be used in both themes.                                                                                                                             | No       | 1.3.0+              |\n| currentDirectoryPath | Path from which the script is executed. Default is the path of the script.                                                                                                                                                                                                           | No       | 0.29+               |\n| needsConfirmation    | Specify `true` if you would like to show confirmation alert dialog before running the script. Can be helpful with destructive scripts like \"Quit All Apps\" or \"Empty Trash\". Default value is `false`.                                                                               | No       | 0.30+               |\n| refreshTime          | Specify a refresh interval for inline mode scripts in seconds, minutes, hours or days. Examples: 10s, 1m, 12h, 1d. Note that the actual times can vary depending on how the OS prioritises scheduled work. The minimum refresh interval is 10 seconds. If you have more than 10 inline commands, only the first 10 will be refreshed automatically; the rest have to be manually refreshed by navigating to them and pressing `return`.| No       | 0.31+ |\n| argument[1...3]      | [Custom arguments, see Passing Arguments page](https://github.com/raycast/script-commands/blob/master/documentation/ARGUMENTS.md) for detail of how to use this field | No | 1.2.0+ |\n| author               | Define an author name to be part of the script commands documentation | No | |\n| authorURL            | Author social media, website, email or anything to help the users to get in touch | No | |\n| description          | A brief description about the script command to be presented in the documentation | No | |\n\n### Output Mode\n\nYou can use the standard output to present messages in Raycast. Depending on the `mode`, the standard output of your scripts is differently presented.`fullOutput` and `inline` modes support ANSI Escape codes allowing to color generated output by changing its background and foreground color. [You can view the different output mode options as well as their various forms and color options here.](https://github.com/raycast/script-commands/blob/master/documentation/OUTPUTMODES.md)\n\n\n### Error Handling\n\nIf the script exits with a status code not equal to 0, Raycast interprets it as failed and shows a toast that the script failed to run. If this script has inline or compact mode, the last line of the output will be used as an error message. Consider this example for a bash script:\n```bash\nif ! [[ $value =~ $regex ]] ; then\n  echo \"Invalid value provided\"\n  exit 1\nelse\n  ...\n```\n\n## Troubleshooting and FAQs\n<details>\n  <summary>Why isn't my script appearing in Raycast?</summary>\n\n* Ensure the filename doesn't contain `.template.` string\n* Check that all required metadata parameters are provided. See the table above which parameters are required.\n* Ensure you use either `#` or `//` comments for metadata parameters\n* If nothing helps, try to go step by step from a [template](https://github.com/raycast/script-commands/tree/master/templates) Script Command or use one of the examples in this repo.\n</details>\n\n<details>\n  <summary>Why isn't my Shell script  working?</summary>\n\n* Ensure the filename doesn't contain `.template.` string\n* Run your code through [ShellCheck](https://www.shellcheck.net/) to check for syntax errors or unexpected characters\n</details>\n\n<details>\n  <summary>Can I build in a non-login shell?</summary>\n\n**We only allow Script Commands that run in a non-login shell in this repository as agreed on in our [contribution guidelines](https://github.com/raycast/script-commands/blob/master/CONTRIBUTING.md), due to any dependencies.**\nHowever, if you need to run your local script as login-shell, you can specify an argument after shebang, e.g. `#!/bin/bash -l` for bash. We also append `/usr/local/bin` to `$PATH` variable so you can use your local shell commands without any additional steps. If this is not enough, you can always extend `$PATH` by adding `export PATH='/some/extra/path:$PATH'` at the top of your script.\n</details>\n\n## Community\n\nWe're always looking for new Script Commands or other ways to improve Raycast. If you have anything cool to show, please send us a pull request. If we screwed something up, please report a bug. Join our [Slack community](https://www.raycast.com/community) to brainstorm ideas with like-minded folks.\n"
  },
  {
    "path": "Tools/Toolkit/CONTRIBUTING.md",
    "content": "# Contributing to Raycast's Toolkit\n\nRaycast Toolkit is a command-line application for automating repetitive tasks in this repo. At the moment the Toolkit automates the generation of the [Awesome Script Commands](../../commands/README.md) and the [extensions.json](../../commands/extensions.json) which contains information about each Script Command.\n\n## Tech Stack\n\n- [Swift](https://developer.apple.com/swift) 5.3\n- [Swift Package Manager](https://github.com/apple/swift-package-manager/)\n- [Swift Argument Parser](https://github.com/apple/swift-argument-parser)\n- [SwiftLint](https://github.com/realm/SwiftLint)\n\n## Code Structure\n\n```txt\n.\n├── Sources\n│   ├── Toolkit - Command-line Interface tool that makes calls to ToolkitLibrary. This is the interface used by the user or by the CI.\n│   │   ├── Extensions - Custom Swift extensions specific to the CLI\n│   │   └── SubCommands - Sub-commands are the interfaces that are exposed to the user\n│   └── ToolkitLibrary - The main library\n│       ├── Core - Core functionally\n│       │   ├── Documentation - Documentation generation for Markdown and JSON\n│       │   └── Toolkit - Contains the public interface which will be consumed by the Toolkit CLI\n│       ├── Errors - Errors for the Toolkit\n│       ├── Extensions - Custom Swift extensions\n│       ├── Models - Data models\n│       └── Protocols - Custom Swift protocols\n└── Tests - Unit tests\n    └── ToolkitLibraryTests - Unit tests for the library\n```\n\n## Getting Setup\n\nOpen this folder in Xcode with the following terminal command:\n\n```bash\nopen -a Xcode.app .\n```\n\nXcode will automatically download the Swift Packages for you.\n\n## Running the CLI\n\n1. Open up your terminal and head over to the root of this repo.\n2. Run `make build`\n3. Use the generated binary with `./toolkit`!\n\n## Running the Unit Tests\n\nSee [Apple's documentation for running unit tests](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/UnitTesting.html).\n"
  },
  {
    "path": "Tools/Toolkit/Package.resolved",
    "content": "{\n  \"object\": {\n    \"pins\": [\n      {\n        \"package\": \"swift-argument-parser\",\n        \"repositoryURL\": \"https://github.com/apple/swift-argument-parser.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"d2930e8fcf9c33162b9fcc1d522bc975e2d4179b\",\n          \"version\": \"1.0.1\"\n        }\n      },\n      {\n        \"package\": \"swift-tools-support-core\",\n        \"repositoryURL\": \"https://github.com/apple/swift-tools-support-core.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"f9bbd6b80d67408021576adf6247e17c2e957d92\",\n          \"version\": \"0.2.4\"\n        }\n      }\n    ]\n  },\n  \"version\": 1\n}\n"
  },
  {
    "path": "Tools/Toolkit/Package.swift",
    "content": "// swift-tools-version:5.3\n\nimport PackageDescription\n\nlet package = Package(\n  name: \"toolkit\",\n  platforms: [\n    .macOS(.v11),\n  ],\n  dependencies: [\n    .package(\n      url: \"https://github.com/apple/swift-tools-support-core.git\",\n      .upToNextMinor(from: \"0.2.4\")\n    ),\n    .package(\n      url: \"https://github.com/apple/swift-argument-parser.git\",\n      .upToNextMinor(from: \"1.0.0\")\n    ),\n  ],\n  targets: [\n    .target(\n      name: \"Toolkit\",\n      dependencies: [\n        \"ToolkitLibrary\",\n        .product(name: \"SwiftToolsSupport-auto\", package: \"swift-tools-support-core\"),\n        .product(name: \"ArgumentParser\", package: \"swift-argument-parser\"),\n      ]\n    ),\n    .target(\n      name: \"ToolkitLibrary\",\n      dependencies: [\n        .product(name: \"SwiftToolsSupport-auto\", package: \"swift-tools-support-core\"),\n      ]\n    ),\n    .testTarget(\n      name: \"ToolkitLibraryTests\",\n      dependencies: [\"ToolkitLibrary\"]),\n  ]\n)\n"
  },
  {
    "path": "Tools/Toolkit/README.md",
    "content": "# Raycast Toolkit\n\n[Raycast](https://raycast.com) Toolkit helps you to generate documentation for all script commands on a predefined or customized path.\n\n## CLI overview\n\n```txt\nOVERVIEW: A tool to generate automatized documentation\n\nUSAGE: toolkit [--version] <subcommand>\n\nOPTIONS:\n  -v, --version           Print the version and exit\n  -h, --help              Show help information.\n\nSUBCOMMANDS:\n  generate-documentation  Generate the documentation in JSON and Markdown format\n\n  See 'toolkit help <subcommand>' for detailed help.\n```\n\n## How does the Toolkit work?\n\nThe Toolkit runs on every push to master using [this GitHub Action workflow](../../.github/workflows/documentation.yml). That workflow goes through the following process:\n\n1. Setup a version of Xcode\n2. Build the Toolkit using the [Makefile](../../Makefile) located at the root of the repo\n3. Run `make gen-docs-and-commit`\n   1. Runs the [integration shell script](integration.sh)\n   2. Commits the changes (if there are any)\n4. Pushes the changes to the master branch using the Raycast bot.\n\n## Contributing\n\nWe would love to have your contribution! Check out our [CONTRIBUTING.md](CONTRIBUTING.md) file to get started.\n\n## Community\n\nThis is a shared place and we're always looking for new Script Commands or other ways to improve Raycast. If you have anything cool to show, please send us a pull request. If we screwed something up, please report a bug. Join our [Slack community](https://www.raycast.com/community) to brainstorm ideas with like-minded folks.\n"
  },
  {
    "path": "Tools/Toolkit/Sources/Toolkit/SubCommands/GenerateDocumentation.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport ArgumentParser\nimport ToolkitLibrary\n\nextension ToolkitCommand {\n  struct GenerateDocumentation: ParsableCommand {\n    static var configuration = CommandConfiguration(\n      abstract: \"Generate the documentation in JSON and Markdown format\"\n    )\n\n    @Argument(help: \"Path of the Raycast extensions folder.\\n\")\n    var path: String = \"./commands\"\n\n    @Argument(help: \"Output file name for the Markdown documentation.\\n\")\n    var outputMarkdownFilename: String = \"README.md\"\n\n    @Argument(help: \"Output file name for the Markdown documentation.\\n\")\n    var outputJSONFilename: String = \"extensions.json\"\n\n    func run() throws {\n      do {\n        let dataManager = try DataManager(\n          extensionsPath: path,\n          extensionsFilename: outputJSONFilename\n        )\n\n        let toolkit = Toolkit(\n          dataManager: dataManager\n        )\n\n        try toolkit.generateDocumentation(\n          outputJSONFilename: outputJSONFilename,\n          outputMarkdownFilename: outputMarkdownFilename\n        )\n\n        Toolkit.raycastDescription()\n        Console.shared.writeGreen(\"Documents generated!\")\n      } catch {\n        Toolkit.raycastDescription()\n        Console.shared.writeRed(\"Error: \\(error)\")\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/Toolkit/SubCommands/Report.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport ArgumentParser\nimport SwiftUI\nimport ToolkitLibrary\n\nextension ToolkitCommand {\n  struct Report: ParsableCommand {\n    static var configuration = CommandConfiguration(\n      abstract: \"Generate a report about the health of the Script Commands\"\n    )\n\n    @Option(\n      name: [\n        .customShort(\"t\"),\n        .customLong(\"type\"),\n      ],\n      help: \"\\(Toolkit.ReportType.allOptions)\\n \"\n    )\n    var reportType: Toolkit.ReportType = .allScripts\n\n    @Argument(\n      help: \"Path of the Raycast extensions folder.\\n \"\n    )\n    var path: String = \"./commands\"\n\n    @Flag(help: \"Print report without colors\")\n    var noColor: Bool = false\n\n    func run() throws {\n      do {\n        let dataManager = try DataManager(\n          extensionsPath: path\n        )\n\n        let toolkit = Toolkit(\n          dataManager: dataManager\n        )\n\n        try toolkit.report(\n          type: reportType,\n          noColor: noColor\n        )\n      } catch {\n        Toolkit.raycastDescription()\n        Console.shared.writeRed(\"Error: \\(error)\")\n      }\n    }\n  }\n}\n\n// MARK: - Expressible By Argument\n\nextension ToolkitLibrary.Toolkit.ReportType: ExpressibleByArgument {\n  static var allOptions: String {\n    Self.allValueStrings.joined(separator: \"|\")\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/Toolkit/SubCommands/SetExecutable.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport ArgumentParser\nimport ToolkitLibrary\n\nextension ToolkitCommand {\n  struct SetExecutable: ParsableCommand {\n    static var configuration = CommandConfiguration(\n      abstract: \"Set file mode \\\"executable\\\" to Script Commands\"\n    )\n\n    @Argument(help: \"Path of the Raycast extensions folder.\\n\")\n    var path: String = \"./commands\"\n\n    func run() throws {\n      do {\n        let dataManager = try DataManager(\n          extensionsPath: path\n        )\n\n        let toolkit = Toolkit(\n          dataManager: dataManager\n        )\n\n        try toolkit.setScriptCommandsAsExecutable()\n      } catch {\n        Toolkit.raycastDescription()\n        Console.shared.writeRed(\"Error: \\(error)\")\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/Toolkit/SubCommands/Version.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport ArgumentParser\nimport ToolkitLibrary\n\nextension ToolkitCommand {\n  struct Version: ParsableCommand {\n    static var configuration = CommandConfiguration(\n      abstract: \"Print the current Toolkit version\"\n    )\n\n    func run() throws {\n      Toolkit.version()\n      throw ExitCode.success\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/Toolkit/main.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nimport ArgumentParser\nimport ToolkitLibrary\nimport TSCBasic\n\nstruct ToolkitCommand: ParsableCommand {\n  static var configuration = CommandConfiguration(\n    commandName: \"toolkit\",\n    abstract: \"A tool to generate automatized documentation\",\n    subcommands: [\n      GenerateDocumentation.self,\n      Report.self,\n      SetExecutable.self,\n      Version.self,\n    ]\n  )\n}\n\nToolkitCommand.main()\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Console.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\npublic final class Console {\n  private var noColor: Bool\n  private let terminalController: TerminalController?\n\n  public static let shared = Console()\n\n  init(noColor: Bool = false) {\n    self.noColor = noColor\n    self.terminalController = TerminalController(stream: stdoutStream)\n  }\n\n  public func writeRed(_ message: String, bold: Bool = false, endLine: Bool = true) {\n    write(string: message, color: .red, bold: bold, endLine: endLine)\n  }\n\n  public func writeYellow(_ message: String, bold: Bool = false, endLine: Bool = true) {\n    write(string: message, color: .yellow, bold: bold, endLine: endLine)\n  }\n\n  public func writeGreen(_ message: String, bold: Bool = false, endLine: Bool = true) {\n    write(string: message, color: .green, bold: bold, endLine: endLine)\n  }\n\n  public func write(_ message: String, bold: Bool = false, endLine: Bool = true) {\n    write(string: message, color: .noColor, bold: bold, endLine: endLine)\n  }\n\n  public func write(string: String, color: TerminalController.Color, bold: Bool = false, endLine: Bool = true) {\n    terminalController?.write(string, inColor: noColor ? .noColor : color, bold: bold)\n\n    if endLine {\n      terminalController?.endLine()\n    }\n  }\n\n  public func endLine() {\n    terminalController?.endLine()\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Documentation/Documentation.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nfinal class Documentation {\n  private let fileSystem = TSCBasic.localFileSystem\n\n  private let path: AbsolutePath\n\n  private let markdownFilename: String\n  private let jsonFilename: String\n\n  init(path: AbsolutePath, jsonFilename: String, markdownFilename: String) {\n    self.path             = path\n    self.jsonFilename     = jsonFilename\n    self.markdownFilename = markdownFilename\n  }\n\n  func generateDocuments(for data: RaycastData) throws {\n    try generateMarkdown(for: data)\n    try generateJSON(for: data)\n  }\n}\n\n// MARK: - Private methods\n\nprivate extension Documentation {\n  func generateMarkdown(for raycastData: RaycastData) throws {\n    let documentFilePath = path.appending(\n      component: markdownFilename\n    )\n\n    guard let data = markdownData(for: raycastData) else {\n      return\n    }\n\n    try fileSystem.writeFileContents(\n      documentFilePath,\n      bytes: ByteString(data.uint8Array)\n    )\n  }\n\n  func generateJSON(for raycastData: RaycastData) throws {\n    let documentFilePath = path.appending(\n      component: jsonFilename\n    )\n\n    let data = try raycastData.toData()\n\n    try fileSystem.writeFileContents(\n      documentFilePath,\n      bytes: ByteString(data.uint8Array)\n    )\n  }\n\n  func markdownData(for raycastData: RaycastData) -> Data? {\n    let groups = raycastData.groups\n    var tableOfContents = String.empty\n    var contentString = String.empty\n\n    let sortedGroups = groups.sorted()\n\n    sortedGroups.forEach {\n      tableOfContents += $0.markdownDescription\n    }\n\n    sortedGroups.forEach { group in\n      contentString += .newLine + group.sectionTitle\n\n      contentString += renderMarkdown(for: group)\n    }\n\n    let markdown = \"\"\"\n      <!-- AUTO GENERATED FILE. DO NOT EDIT. -->\n      \\(renderBadges())\n\n      # Raycast Script Commands\n\n      [Raycast](https://raycast.com) lets you control your tools with a few keystrokes\n      and Script Commands makes it possible to execute scripts from anywhere on your desktop.\n      They are a great way to speed up every-day tasks such as converting data, opening bookmarks\n      or triggering dev workflows.\n\n      This repository contains sample commands and documentation to write your own ones.\n\n      ### Categories\n      \\(tableOfContents)\\(contentString)\n\n      ## Community\n\n      This is a shared place and we're always looking for new Script Commands or other ways to improve Raycast.\n      If you have anything cool to show, please send us a pull request. If we screwed something up,\n      please report a bug. Join our\n      [Slack community](https://www.raycast.com/community)\n      to brainstorm ideas with like-minded folks.\n      \"\"\"\n\n    guard let contentData = markdown.data(using: .utf8) else {\n      return nil\n    }\n\n    return contentData\n  }\n\n  func renderMarkdown(for group: Group, headline: Bool = false) -> String {\n    var contentString = String.empty\n\n    if group.scriptCommands.isEmpty == false {\n      if headline {\n        contentString += .newLine\n        contentString += .newLine + \"#### \\(group.name)\"\n      }\n\n      contentString += .newLine\n      contentString += .newLine + \"| Icon | Title | Description | Author | Args | Templ | Lang |\"\n      contentString += .newLine + \"| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\"\n\n      for scriptCommand in group.scriptCommands.sorted() {\n        contentString += scriptCommand.markdownDescription\n      }\n    }\n\n    if let subGroups = group.subGroups?.sorted() {\n      for subGroup in subGroups {\n        contentString += renderMarkdown(\n          for: subGroup,\n          headline: true\n        )\n      }\n    }\n\n    return contentString\n  }\n\n  func renderBadges() -> String {\n    let logo = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAABYCAIAAAD+96djAAAIC0lEQVR4nOybW2zb1hmADynqLsuWRFLOBVmTpqkVy5LlpkgfDGRdnSvcdSiKIUWHosO8lwDtw4Bge1pRYMAw9KXAgAxYMiTNGjRZt+5plxQIkCzpNjduZMmJnMRpt7WR7NgSJYqULFISNUQ8pikpKVLpkOwDP+QhUajj40//f3j+n0fEY1sfByYA4EZP4JuCKQJiioCYIiCmCIgpAmKKgJgiIKYIiCkCYoqAmCIgpgiIKQJiioCYIiDGi9jidIQ8bqNnYbSIkNv9h7HY+7HRXf39xs7ESBFbnc5To5Gg3d5vtf4uMhLu8xg4GSNF7BroJ202+e9eK3EmNvr0gGFxYRnw+Y362SmeL1Rrzwb8AMMAAHYc30+Sl3JMtlrVfzJGigAAJDguXRH2kQHowmJ5Phi8kmeWRVHnmegt4gmXa7vLlRYE5ZUUz+ertT0BPwZd4JNBejpfWFJdowO6itjssJ8bix3euGGGZdOV9d8zwXFtOXKQoi4yuayoX47oJ2Kzw/HuaHSz00ng+H6K+pjJ31PFf4Lj+Hp93O9T4mKCJC8zTE6v9UI/Ec8M9B/euNGy9plPBulrrXERLxbvVip7SVJ24SGIFwaDuuWIfiI+K68u8KVDNIUpLmi6LUfm+VJnjuizduq6RnxWLmcqwgQZkF0QOH6Aoq51rBeda+elnObrhbYiQm73bt/AQqmsvJLi+YVSaS9Fyjlia8bFbLH4ZaWiXJPgOLWvtdgpZrTMEQ1FbHU634tFX9wwmCxy/11dBQAMEMSugX6x0ahJjRFvn3wZgeOHaGpREAI22xanU/7D1+sei2W7GxZjDovlgMY5gml0LCDkcZ+KRmi7HQAgStKRuRsXcrlxv+/3o9GuxyzWalPJuasFFulMIVrVGttcrsBaHWHD8Z9sewzreUwvQZwYCYfcmtTsWon4y/LKVGJOlCQAwE2OfyWeaKAY1mu1nh2LaVGnalh9XmSYI3M3Uhz3cny2UKuhGlauU2NeL6oBZVCK2Oyw7yNJ9SsXcrnJq58itCDjJYhT0cgQ0r4WMhHyDvrX4Z37qRYXSDJCZjpfkBpwPK+VOBmN7HC7UA2ORsQTLtefnoptc7lsOH4sPPzShkEkw7ZxbnHx6PxNxcWg3f7BU2OocgSNCJ/V6iUIOCKG/WroyYOtcYGKD5fuvXX7DlDiopkjSNZONCI+YdnXEklubS3AMeyd4Z0auTidTr95+446R87ERnvvgyNbI6YL7A/iCcWFDcdf3rQR1eBtnE6nfzp/S1LFRe998O5FbHU6v9+6FiQ57sfJuUq93suEHpE/Li39YmE9R3rvg3cpIuRxnx0b/eXQk69u2qR+fbpwP0d41PdLGWUZkjl59wE50nUfvJuia4vDcSY2GrTbMQx7NuBPV4QUzyv/m64I11h2kqYzgvDnpXstb3Q6Xxzs/obyzMBAosh90VqnouqDdxMRbovFga+9EcPeDj0gLqY0yBGHxXI8Et7d+pmfTqePzt9ScsSK457WwHlEuomIbLU6w7IHaMou68CwPQF/oVpLcJxyzZeVyr8LbLnVRY8R8bBejtIHFyTp9RupK/l8FyN32Y/ICMIVhpmkabsFb6q4nyN8vR4vFpVryh0R0bsIpZfT2QdnxOq76fQ/mG4s9NSYWRbFT1l2P0XaLRbQlDHu992tVOb50sPegkSEHBedffAkx6nbXF+XnvYRV1n2cHy2qNpHvR0aalsvEPL35RW5rgcA9BHEe7HobnTPSnvdUM3zpVfis8Xquou3dmzXyMVH2ewb11PK/bKvub9G5QLBzvI6x7+WSCpxATDszR3bX0KRAp2cz2bVe0r5lolkZGQ9yyGP+2Q0MthsUgIApEbj57cWzmQy6msom23c7+v6R8wUWHkVOEiR7wzvXK3Xp5JzM2yx57kDxM3bHW7XB2NjXiu8jV9mmFdnk6gGb+MQRS2LAioLiDtUt0vllhxBhBXDjkfCzwUC6hf/urKC0AL6nmW8WFSvnb1jxbDfjAxPkOSxkeHvBDR8FoW+eXud4w9fi7OInmIfCw8/1+yD2nD8t5GR7wVpJMN2okkXe75UmkrOIcmRs5lFZe9QlSROsxpfqyddAADaZjvyrS191vUS6JM8e25xUX2NlyB+9vg2eZ8uc345+1E2q77m237/iehIVZJ+lJz7Z76g0Ww1FAEAeLq//0Qk7LVa5X9KjcbR+Zsfttbm4z7f8UjYIe/Tm88H37iROr/S4uK7QbpUq1/I5bSbqrZPwzOCcIlhng8G5W0PhmF7SbKtTv2iUrlfy1KUrXmNBcMO0VRGaOlx3CqV/tN8jKwdmp+PyIrVzjo13+pC6eUQa74myMBCqXSnXNZ0bmr0OCiyLIrThcLB1v5FpqOvNXO/lqXWY4ciPy+X1WcrNEWnEzNLgnAxl5sgSbl9JH/mXK02W2yJi4+Z/GSQll3wtdr7mYymh0PU6Hd0KCtWLzPMC8GgkiN7/O05ck8U5RypNRo/TCTR7h2/Gl3PUOWq1c4cKXSsFzMs+7eVlX9pcyDkYeh98nbpQT2+zj74/1a77zV1hwFnsZdF8VIuNxmkHWs9vn1koC1H9MeYQ+kP7IMzYjVpnAvDvq8xw7bUqaIkfb6q366hEyO/pqD0wSUAXr+e6roTjwRta41HIeRxewhCo0ODj043T8fQ8hXPQfTE+K87fkMwRUBMERBTBMQUATFFQEwREFMExBQBMUVATBEQUwTEFAExRUBMERBTBOT/AQAA//98wKt7wQJ9rAAAAABJRU5ErkJggg==\"\n\n    let style      = \"for-the-badge\"\n    let labelColor = \"202123\"\n    let dataURL    = \"https:%2F%2Fraw.githubusercontent.com%2Fraycast%2Fscript-commands%2Fmaster%2Fcommands%2Fextensions.json\"\n    let jsonPath   = \"$.totalScriptCommands\"\n\n    let badges = \"\"\"\n    <div align=\"center\">\n      <a href=\"https://github.com/raycast/script-commands\">\n        <img alt=\"GitHub contributors\" src=\"https://img.shields.io/badge/dynamic/json?style=\\(style)&color=\\(labelColor)&label=Script%20Commands&query=\\(jsonPath)&url=\\(dataURL)&logo=\\(logo)&labelColor=\\(labelColor)\">\n      </a>\n      <a href=\"https://github.com/raycast/script-commands/graphs/contributors\">\n        <img alt=\"GitHub contributors\" src=\"https://img.shields.io/github/stars/raycast?style=\\(style)\">\n      </a>\n      <a href=\"https://github.com/raycast/script-commands/stargazers\">\n        <img alt=\"GitHub Org's stars\" src=\"https://img.shields.io/github/contributors/raycast/script-commands?style=\\(style)\">\n      </a>\n      <a href=\"https://twitter.com/raycastapp\">\n        <img alt=\"Twitter Follow\" src=\"https://img.shields.io/twitter/follow/raycastapp?style=\\(style)\">\n      </a>\n    </div>\n    \"\"\"\n\n    return badges\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/GitShell.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport TSCBasic\nimport TSCUtility\n\nstruct GitError: Error {\n  let result: ProcessResult\n}\n\nstruct GitShell {\n  init() {}\n\n  func run(_ args: String..., environment: [String: String] = Git.environment, path: AbsolutePath) throws -> String {\n    do {\n      return try execute(\n        [\"-C\", path.dirname] + args,\n        environment: environment\n      )\n    } catch {\n      throw error\n    }\n  }\n\n  private func execute(_ args: [String], environment: [String: String] = Git.environment) throws -> String {\n    let process = Process(arguments: [Git.tool] + args, environment: environment)\n    let result: ProcessResult\n\n    do {\n      try process.launch()\n      result = try process.waitUntilExit()\n\n      guard result.exitStatus == .terminated(code: 0) else {\n        throw GitError(\n          result: result\n        )\n      }\n\n      let content = try result.utf8Output().spm_chomp()\n\n      return content\n    } catch let error as GitError {\n      throw error\n    } catch {\n      let result = ProcessResult(\n        arguments: process.arguments,\n        environment: process.environment,\n        exitStatus: .terminated(code: -1),\n        output: .failure(error),\n        stderrOutput: .failure(error)\n      )\n\n      throw GitError(\n        result: result\n      )\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/RegEx.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\ntypealias NSTextCheckingResults = [NSTextCheckingResult]\n\nfinal class RegEx {\n  static func checkingResults(for regex: String, in text: String) -> NSTextCheckingResults {\n    do {\n      let regex = try NSRegularExpression(\n        pattern: regex,\n        options: [\n          .caseInsensitive,\n          .anchorsMatchLines,\n        ]\n      )\n\n      let range = NSRange(text.startIndex..., in: text)\n      return regex.matches(in: text, range: range)\n    } catch {\n      print(\"Invalid regex: \\(error.localizedDescription)\")\n      return []\n    }\n  }\n\n  static func checkingResult(for regex: String, in text: String) -> NSTextCheckingResult? {\n    return checkingResults(for: regex, in: text).first\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Report/Report.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nfinal class Report {\n  private lazy var scriptCommands = ScriptCommands()\n  private let console: Console\n\n  private let data: RaycastData\n  private let type: Toolkit.ReportType\n\n  init(data: RaycastData, type: Toolkit.ReportType, noColor: Bool) {\n    self.console = Console(\n      noColor: noColor\n    )\n\n    self.data = data\n    self.type = type\n  }\n\n  func showResult() {\n    data.groups.sorted().forEach { group in\n      filter(\n        for: group,\n        by: type\n      )\n    }\n\n    renderReport(\n      for: scriptCommands\n    )\n  }\n}\n\n// MARK: - Signs\nextension Report {\n  enum Divider {\n    static let pipe = \"|\"\n    static let plus = \"+\"\n    static let minus = \"-\"\n    static let space = \" \"\n  }\n}\n\n// MARK: - Private methods\n\nprivate extension Report {\n  typealias Title = (value: String, color: TerminalController.Color, bold: Bool)\n  typealias Titles = [Title]\n  typealias Cell = (title: String, length: Int, color: TerminalController.Color, bold: Bool)\n  typealias Cells = [Cell]\n\n  func filter(for group: Group, by type: Toolkit.ReportType) {\n    if group.scriptCommands.isEmpty == false {\n      for scriptCommand in group.scriptCommands.sorted() {\n        switch (type, scriptCommand.isExecutable) {\n        case (.executable, true):\n          self.scriptCommands.append(scriptCommand)\n        case (.nonExecutable, false):\n          self.scriptCommands.append(scriptCommand)\n        case (.allScripts, _):\n          self.scriptCommands.append(scriptCommand)\n        default:\n          break\n        }\n      }\n    }\n\n    if let subGroups = group.subGroups?.sorted() {\n      for subGroup in subGroups {\n        filter(\n          for: subGroup,\n          by: type\n        )\n      }\n    }\n  }\n\n  func renderReport(for scriptCommands: ScriptCommands) {\n    let raycast = \"Raycast\"\n    let cellMargin = 2\n    var firstColumnLength = 0\n    var secondColumnLength = 0\n    let thirdColumnLength = 10\n\n    scriptCommands.forEach {\n      let author: String = $0.authors?.description ?? raycast\n\n      if author.count >= firstColumnLength {\n        firstColumnLength = author.count\n      }\n\n      if $0.fullPath.count >= secondColumnLength {\n        secondColumnLength = $0.fullPath.count\n      }\n    }\n\n    let columnsLength = [firstColumnLength, secondColumnLength, thirdColumnLength]\n\n    let titleCells = [\n      Title(value: raycast, color: .red, bold: true),\n      Title(value: \"Script Commands\", color: .green, bold: true),\n    ]\n\n    let descriptionCells = [\n      Cell(title: \"Author\", length: firstColumnLength, color: .noColor, bold: false),\n      Cell(title: \"Path\", length: secondColumnLength, color: .noColor, bold: false),\n      Cell(title: \"Executable\", length: thirdColumnLength, color: .noColor, bold: false),\n    ]\n\n    let headerWidth = columnsLength.reduce(0, +) + (descriptionCells.count * cellMargin)\n\n    renderDivider(with: columnsLength)\n    renderHeader(with: headerWidth, titles: titleCells)\n    renderDivider(with: columnsLength)\n    renderRow(for: descriptionCells)\n    renderDivider(with: columnsLength)\n\n    scriptCommands.forEach {\n      let author = $0.authors?.description ?? raycast\n\n      let executableColor: TerminalController.Color = $0.isExecutable ? .cyan : .yellow\n\n      let rowCells = [\n        Cell(title: author, length: firstColumnLength, color: .green, bold: true),\n        Cell(title: $0.fullPath, length: secondColumnLength, color: .noColor, bold: false),\n        Cell(title: String($0.isExecutable), length: thirdColumnLength, color: executableColor, bold: !$0.isExecutable),\n      ]\n\n      renderRow(for: rowCells)\n    }\n\n    renderDivider(with: columnsLength)\n    console.write(\"  Total of\", endLine: false)\n    console.write(string: \" \\(scriptCommands.count) \", color: .cyan, bold: true, endLine: false)\n    console.write(\"script commands\")\n  }\n\n  func renderHeader(with maxWidth: Int, titles: Titles) {\n    let titleCount = titles.map { $0.value }.joined(separator: \" \").count\n\n    let titleLength = titleCount % 2 == 0 ? titleCount : titleCount + 1\n    let halfMaxWidth = maxWidth / 2\n    let halfTitleWidth = titleLength / 2\n\n    let leadingOffset = halfMaxWidth - halfTitleWidth\n    let titleLeadingMargin = Divider.space.`repeat`(by: leadingOffset)\n\n    let trailingOffset = maxWidth - (leadingOffset + titleCount)\n    let titleTrailingMargin = Divider.space.`repeat`(by: trailingOffset)\n\n    console.write(Divider.pipe, endLine: false)\n    console.write(titleLeadingMargin, endLine: false)\n\n    titles.enumerated().forEach { (i, title) in\n      if i > 0 {\n        console.write(Divider.space, endLine: false)\n      }\n\n      console.write(\n        string: title.value,\n        color: title.color,\n        bold: title.bold,\n        endLine: false\n      )\n    }\n\n    console.write(titleTrailingMargin, endLine: false)\n    console.write(Divider.pipe)\n  }\n\n  func renderRow(for cells: Cells) {\n    console.write(Divider.pipe, endLine: false)\n\n    cells.forEach { cell in\n      let length = cell.length - cell.title.count\n\n      var cellString = String.empty\n      cellString += Divider.space\n      cellString += cell.title\n      cellString += Divider.space.`repeat`(by: length)\n\n      console.write(\n        string: cellString,\n        color: cell.color,\n        bold: cell.bold,\n        endLine: false\n      )\n      console.write(Divider.pipe, endLine: false)\n    }\n\n    console.endLine()\n  }\n\n  func renderDivider(with maxWidthList: [Int]) {\n    var divisor = Divider.plus\n\n    maxWidthList.forEach { maxWidth in\n      divisor += Divider.minus.`repeat`(by: maxWidth + 1)\n      divisor += Divider.plus\n    }\n\n    console.write(divisor, endLine: true)\n  }\n}\n\n// MARK: - Extension for Array<Author>\n\nprivate extension Array where Element == ScriptCommand.Author {\n  /// Return the name of the author or in case of multiple authors, just \"Multiple\"\n  var description: String {\n    var author = String.empty\n\n    if count == 1 {\n      author = self[0].name ?? \"Raycast\"\n    } else if count > 1 {\n      author = \"Multiple\"\n    }\n\n    return author\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Stores/DataManager.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport TSCBasic\n\npublic final class DataManager {\n  private var total: Int = 0 {\n    // FIXME: Data racing\n    didSet {\n      data.totalScriptCommands = total\n    }\n  }\n\n  var data = RaycastData()\n\n  let extensionsFilePath: AbsolutePath\n  let extensionsPath: AbsolutePath\n\n  let fileSystem: FileSystem\n  let ignoreGitInformation: Bool\n\n  var isMetadataEmpty: Bool {\n    data.metadata.isEmpty\n  }\n\n  var extensionsPathString: String {\n    extensionsPath.pathString\n  }\n\n  public init(extensionsPath: String, extensionsFilename: String = \"\") throws {\n    let fileSystem          = TSCBasic.localFileSystem\n    let path                = fileSystem.absolutePath(for: extensionsPath)\n    let extensionsFilePath  = path.appending(RelativePath(extensionsFilename))\n\n    guard fileSystem.exists(path) else {\n      throw ToolkitError.folderNotFound(path.pathString)\n    }\n\n    self.fileSystem           = fileSystem\n    self.extensionsPath       = path\n    self.extensionsFilePath   = extensionsFilePath\n    self.ignoreGitInformation = extensionsFilename.isEmpty\n  }\n\n  func increaseTotal() {\n    total += 1\n  }\n\n  func addLanguage(_ language: String) {\n    data.languages.insert(\n      Language.Information(name: language)\n    )\n  }\n\n  func loadContent() {\n    if let byteString = try? fileSystem.readFileContents(extensionsPath) {\n      let data = byteString.contents.data\n\n      do {\n        self.data = try data.decode()\n      } catch {\n        self.data = RaycastData()\n      }\n    } else {\n      data = RaycastData()\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+Constants.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\npublic extension Toolkit {\n  var blockedFolderList: [String] {\n    [\n      \".git\",\n      \"screenshots\",\n      \"Tools\",\n      \".build\",\n      \".github\",\n      \"templates\",\n      \"images\",\n      \"_enabled-commands\",\n      \".swiftpm\",\n    ]\n  }\n\n  var blockedFilesExtensionsList: [String] {\n    [\n      \"txt\",\n    ]\n  }\n\n  static var information: (name: String, version: String) {\n    (\n      name: \"Raycast Toolkit\",\n      version: \"0.4.0\"\n    )\n  }\n\n  static func raycastDescription() {\n    Console.shared.writeRed(information.name, bold: true)\n  }\n\n  static func version() {\n    raycastDescription()\n    Console.shared.write(\"Current version: \", endLine: false)\n    Console.shared.writeYellow(information.version, bold: true)\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+GenerateDocumentation.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nextension Toolkit {\n  public func generateDocumentation(outputJSONFilename: String, outputMarkdownFilename: String) throws {\n    dataManager.loadContent()\n\n    try readFolderContent(\n      path: dataManager.extensionsPath,\n      parentGroups: &dataManager.data.groups,\n      ignoreFilesInDir: true\n    )\n\n    let documentation = Documentation(\n      path: dataManager.extensionsPath,\n      jsonFilename: outputJSONFilename,\n      markdownFilename: outputMarkdownFilename\n    )\n\n    try documentation.generateDocuments(\n      for: dataManager.data\n    )\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+Mode.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nextension Toolkit {\n  public func setScriptCommandsAsExecutable() throws {\n    var data = RaycastData()\n\n    try readFolderContent(\n      path: dataManager.extensionsPath,\n      parentGroups: &data.groups,\n      ignoreFilesInDir: true\n    )\n\n    var scriptCommands = ScriptCommands()\n\n    data.groups.forEach { group in\n      filter(\n        for: group,\n        scriptCommands: &scriptCommands\n      )\n    }\n\n    let rawCount = scriptCommands.count\n    var newModeCount = 0\n\n    scriptCommands.sorted().forEach { scriptCommand in\n      let filePath = dataManager.extensionsPath.appending(RelativePath(scriptCommand.fullPath))\n\n      do {\n        try fileSystem.chmod(.executable, path: filePath)\n        newModeCount += 1\n      } catch {\n        return\n      }\n    }\n\n    let console = Console(noColor: false)\n\n    Toolkit.raycastDescription()\n\n    if newModeCount > 0 {\n      console.write(\"Result:\", endLine: false)\n      console.writeYellow(\" \\(newModeCount) \", bold: true, endLine: false)\n      console.write(\"of\", endLine: false)\n      console.writeGreen(\" \\(rawCount) \", bold: true, endLine: false)\n      console.write(\"Script Commands was set as \\\"executable\\\".\")\n    } else {\n      console.write(\"✅ Nothing to be done.\")\n    }\n  }\n}\n\nprivate extension Toolkit {\n  func filter(for group: Group, scriptCommands: inout ScriptCommands) {\n    if group.scriptCommands.isEmpty == false {\n      for scriptCommand in group.scriptCommands where scriptCommand.isExecutable == false {\n        scriptCommands.append(scriptCommand)\n      }\n    }\n\n    if let subGroups = group.subGroups {\n      for subGroup in subGroups {\n        filter(\n          for: subGroup,\n          scriptCommands: &scriptCommands\n        )\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+ReadContent.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nextension Toolkit {\n  typealias FolderContent = (scriptCommands: ScriptCommands, readmePath: String?, groupName: String)\n\n  @discardableResult\n  func readFolderContent(path: AbsolutePath, parentGroups: inout Groups, ignoreFilesInDir: Bool = false) throws -> FolderContent {\n    var scriptCommands = ScriptCommands()\n\n    for directory in onlyDirectories(at: path) {\n      guard blockedFolderList.contains(directory.basename) == false else {\n        continue\n      }\n\n      var group = Group(\n        name: directory.socialBasename,\n        path: directory.basenameWithoutExt\n      )\n\n      var subGroups = Groups()\n\n      let (scriptCommands, readmePath, groupName) = try readFolderContent(path: directory, parentGroups: &subGroups)\n\n      if groupName.isEmpty == false, groupName.lowercased() == group.name.lowercased() {\n        group.name = groupName\n      }\n\n      if scriptCommands.isEmpty == false {\n        group.scriptCommands = scriptCommands\n      }\n\n      if subGroups.isEmpty == false {\n        group.subGroups = subGroups\n      }\n\n      if let readmePath = readmePath {\n        group.readme = readmePath\n      }\n\n      if scriptCommands.isEmpty == false || subGroups.isEmpty == false {\n        parentGroups.append(group)\n      }\n    }\n\n    let directoryFiles = onlyFiles(at: path)\n\n    var groupName = \"\"\n    var readmePath: String?\n\n    for file in directoryFiles where directoryFiles.isEmpty == false {\n      guard ignoreFilesInDir == false else {\n        continue\n      }\n\n      guard\n        let fileExtension = file.extension,\n        blockedFilesExtensionsList.contains(fileExtension) == false else {\n        continue\n      }\n\n      if file.basenameWithoutExt.lowercased() == \"readme\" {\n        guard let fileContent = readContentFile(from: file), fileContent.count > 0 else {\n          continue\n        }\n\n        let pathCount = dataManager.extensionsPathString.count + 1\n        readmePath = String(file.pathString.dropFirst(pathCount))\n      } else if var scriptCommand = readScriptCommand(from: file) {\n        // This is to avoid data racing\n        DispatchQueue.global(qos: .userInitiated).async {\n          self.dataManager.increaseTotal()\n          self.dataManager.addLanguage(scriptCommand.language)\n        }\n\n        scriptCommand.configure(\n          isExecutable: fileSystem.isExecutableFile(file)\n        )\n\n        if let packageName = scriptCommand.packageName {\n          groupName = packageName\n        }\n\n        scriptCommands.append(scriptCommand)\n      }\n    }\n\n    return (\n      scriptCommands: scriptCommands,\n      readmePath: readmePath,\n      groupName: groupName\n    )\n  }\n\n  func readContentFile(from path: AbsolutePath) -> String? {\n    guard let byteString = try? fileSystem.readFileContents(path) else {\n      return nil\n    }\n\n    let data = byteString.contents.data\n    let content = String(data: data, encoding: .utf8)\n\n    return content\n  }\n\n  func extractGitDates(from filePath: AbsolutePath) -> [String]? {\n    do {\n      let dates = try git.run(\n        \"log\", \"--format=%aI\", \"--follow\", filePath.basename,\n        path: filePath\n      )\n\n      return dates.splitByNewLine\n    } catch {\n      return nil\n    }\n  }\n\n  func readScriptCommand(from filePath: AbsolutePath) -> ScriptCommand? {\n    guard fileSystem.isFile(filePath) else {\n      return nil\n    }\n\n    guard let fileContent = readContentFile(from: filePath) else {\n      return nil\n    }\n\n    let dictionary = keyValue(\n      for: fileContent,\n      filename: filePath.basename,\n      path: filePath\n    )\n\n    return ScriptCommand(\n      from: dictionary\n    )\n  }\n\n  func keyValue(for content: String, filename: String, path: AbsolutePath) -> [String: Any] {\n    let filenameKey = ScriptCommand.CodingKeys.filename.rawValue\n    let packageNameKey = ScriptCommand.CodingKeys.packageName.rawValue\n\n    var dictionary = readKeyValues(of: content)\n    dictionary[filenameKey] = filename\n\n    let pathCount = dataManager.extensionsPathString.count + 1\n    let scriptPath = path.dirname.dropFirst(pathCount)\n    dictionary[\"path\"] = \"\\(scriptPath)/\"\n\n    if dataManager.ignoreGitInformation == false {\n      if let dates = extractGitDates(from: path), dates.isEmpty == false {\n        if let updateAt = dates.first {\n          dictionary[\"updatedAt\"] = updateAt\n        }\n\n        if let createdAt = dates.last {\n          dictionary[\"createdAt\"] = createdAt\n        }\n      }\n    } else {\n      dictionary[\"updatedAt\"] = String.empty\n      dictionary[\"createdAt\"] = String.empty\n    }\n\n    dictionary[\"isTemplate\"] = filename.contains(\"template\")\n\n    if dictionary[packageNameKey] == nil {\n      dictionary[packageNameKey] = path.basenameWithoutExt.sanitize.capitalized\n    }\n\n    return dictionary\n  }\n\n  func readKeyValues(of content: String) -> [String: Any] {\n    let regex = \"@raycast.(?<key>[A-Za-z0-9]+)\\\\s(?<value>[\\\\S ]+)\"\n    let results = RegEx.checkingResults(for: regex, in: content)\n\n    var dictionary: [String: Any] = [:]\n\n    if let language = extractLanguageFromShebang(using: content) {\n      dictionary[\"language\"] = language\n    }\n\n    let authors = extractAuthors(from: content, using: results)\n    if authors.isEmpty == false {\n      dictionary[\"authors\"] = authors\n    }\n\n    let icons = extractIcons(from: content, using: results)\n    if icons.isEmpty == false {\n      dictionary[\"icon\"] = icons\n    }\n\n    dictionary[\"hasArguments\"] = extractArguments(from: content, using: results)\n\n    for result in results {\n      let keyValue = readKeyValue(from: result, content: content)\n\n      guard keyValue.authorKeys == false && keyValue.iconKeys == false else {\n        continue\n      }\n\n      dictionary.merge(keyValue) { $1 }\n    }\n\n    return dictionary\n  }\n\n  func extractLanguageFromShebang(using content: String) -> String? {\n    let regex = \"#!(?<shebang>[^\\n]+)\"\n\n    guard let result = RegEx.checkingResult(for: regex, in: content) else {\n      return nil\n    }\n\n    let range = result.range(withName: \"shebang\")\n\n    guard let shebang = self.content(of: range, on: content) else {\n      return nil\n    }\n\n    guard var software = shebang.split(separator: \"/\").last else {\n      return nil\n    }\n\n    let values = software.split(separator: \" \")\n\n    if values.count > 1 {\n      software = values.first == \"env\"\n        ? values.last ?? \"\"\n        : values.first ?? \"\"\n    }\n\n    let language = Language(String(software))\n\n    return language.name\n  }\n\n  func extractArguments(from content: String, using results: NSTextCheckingResults) -> Bool {\n    var hasArguments = false\n\n    for result in results {\n      let dictionary = readKeyValue(from: result, content: content)\n\n      guard dictionary.argumentsKeys else {\n        continue\n      }\n\n      hasArguments = true\n    }\n\n    return hasArguments\n  }\n\n  func extractIcons(from content: String, using results: NSTextCheckingResults) -> [String: String] {\n    var icons: [String: String] = [:]\n\n    for result in results {\n      let dictionary = readKeyValue(from: result, content: content)\n\n      guard let key = dictionary.keys.first, dictionary.iconKeys else {\n        continue\n      }\n\n      if let value = dictionary[key] as? String {\n        icons[key] = value\n      }\n    }\n\n    return icons\n  }\n\n  func extractAuthors(from content: String, using results: NSTextCheckingResults) -> [[String: String]] {\n    var authors: [[String: String]] = []\n    var currentAuthor: [String: String] = [:]\n\n    for result in results {\n      let dictionary = readKeyValue(from: result, content: content)\n\n      guard let key = dictionary.keys.first, dictionary.authorKeys else {\n        continue\n      }\n\n      if currentAuthor.keys.count == 2 {\n        currentAuthor = [:]\n      }\n\n      if let value = dictionary[key] as? String {\n        currentAuthor[key] = value\n      }\n\n      if currentAuthor.keys.count == 2 {\n        guard let value = dictionary[key] as? String else {\n          continue\n        }\n\n        guard authors.contains(\n          where: {\n            $0[key] == value\n          }\n        ) == false else {\n          currentAuthor = [:]\n          continue\n        }\n\n        authors.append(currentAuthor)\n        currentAuthor = [:]\n      }\n    }\n\n    if currentAuthor.keys.count == 1 {\n      authors.append(currentAuthor)\n    }\n\n    return authors\n  }\n\n  func readKeyValue(from result: NSTextCheckingResult, content: String) -> [String: Any] {\n    var dictionary = [String: Any]()\n\n    let keyRange = result.range(withName: \"key\")\n    let valueRange = result.range(withName: \"value\")\n\n    if let key = self.content(of: keyRange, on: content), let value = self.content(of: valueRange, on: content) {\n      if let intValue = Int(value) {\n        dictionary[key] = intValue\n      } else if let boolValue = Bool(value) {\n        dictionary[key] = boolValue\n      } else {\n        dictionary[key] = value\n      }\n    }\n\n    return dictionary\n  }\n\n  func content(of range: NSRange, on content: String) -> String? {\n    var value: String?\n\n    if range.location != NSNotFound, range.length > 0, let rangeString = Range<String.Index>(range, in: content) {\n      value = String(content[rangeString])\n    }\n\n    return value\n  }\n}\n\n// MARK: - Filter Extensions\n\nprivate extension Toolkit {\n  enum ContentDirType {\n    case directories\n    case files\n  }\n\n  func onlyFiles(at path: AbsolutePath) -> [AbsolutePath] {\n    return folderContent(type: .files, for: path)\n  }\n\n  func onlyDirectories(at path: AbsolutePath) -> [AbsolutePath] {\n    return folderContent(type: .directories, for: path)\n  }\n\n  func folderContent(type: ContentDirType, for path: AbsolutePath) -> [AbsolutePath] {\n    do {\n      let directoryContent = try fileSystem.getDirectoryContents(path)\n\n      let pathsForType: [AbsolutePath] = directoryContent.compactMap {\n        let contentPath = path.appending(component: $0)\n\n        guard check(type, for: contentPath) else {\n          return nil\n        }\n\n        return contentPath\n      }\n\n      return pathsForType\n    } catch {\n      return []\n    }\n  }\n\n  private func check(_ type: ContentDirType, for path: AbsolutePath) -> Bool {\n    switch type {\n    case .directories:\n      return fileSystem.isDirectory(path)\n    case .files:\n      return fileSystem.isFile(path)\n    }\n  }\n}\n\n// MARK: - Dictionary Extension\n\nprivate extension Dictionary where Key == String {\n  var authorKeys: Bool {\n    typealias Keys = ScriptCommand.Author.InputCodingKeys\n    let authorNameKey = Keys.name.rawValue\n    let authorURLKey = Keys.url.rawValue\n\n    guard let key = keys.first else {\n      return false\n    }\n\n    return key == authorNameKey || key == authorURLKey\n  }\n\n  var iconKeys: Bool {\n    typealias Keys = ScriptCommand.Icon.InputCodingKeys\n    let iconKey = Keys.icon.rawValue\n    let iconDarkKey = Keys.iconDark.rawValue\n\n    guard let key = keys.first else {\n      return false\n    }\n\n    return key == iconKey || key == iconDarkKey\n  }\n\n  var argumentsKeys: Bool {\n    guard let key = keys.first else {\n      return false\n    }\n\n    return key == \"argument1\" || key == \"argument2\" || key == \"argument3\"\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+Report.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\nextension Toolkit {\n  public func report(type: ReportType, noColor: Bool) throws {\n    try readFolderContent(\n      path: dataManager.extensionsPath,\n      parentGroups: &dataManager.data.groups,\n      ignoreFilesInDir: true\n    )\n\n    let report = Report(\n      data: dataManager.data,\n      type: type,\n      noColor: noColor\n    )\n\n    report.showResult()\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit+ReportType.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\npublic extension Toolkit {\n  enum ReportType: String, CaseIterable, CustomStringConvertible {\n    case executable\n    case nonExecutable = \"non-executable\"\n    case allScripts = \"all-scripts\"\n\n    public var description: String {\n      return rawValue\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Core/Toolkit/Toolkit.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\nimport TSCBasic\n\npublic final class Toolkit {\n  lazy var fileSystem = TSCBasic.localFileSystem\n\n  var dataManager: DataManager\n\n  let git = GitShell()\n\n  public init(dataManager: DataManager) {\n    self.dataManager = dataManager\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Errors/Reader+Error.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nenum ToolkitError: Swift.Error, CustomStringConvertible, LocalizedError {\n  case folderNotFound(String)\n  case fileNotFound(String)\n\n  var description: String {\n    switch self {\n    case .folderNotFound(let folder):\n      return \"Folder not found. Expected: \\(folder)\"\n    case .fileNotFound(let file):\n      return \"File \\\"\\(file)\\\" not found\"\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Array/Array+Metadata.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Array where Element == Metadata {\n  func hasIdentifier(_ identifier: Identifier) -> Bool {\n    var foundValue = false\n\n    for item in self {\n      foundValue = item.identifiers.first(where: { $0 == identifier }) != nil\n    }\n\n    return foundValue\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Array/Array+UInt8.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Array where Element == UInt8 {\n  var data: Data {\n    var array = self\n\n    return Data(\n      bytes: &array,\n      count: array.count\n    )\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Character/Character+Emoji.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Character {\n  var isSimpleEmoji: Bool {\n    guard let firstScalar = unicodeScalars.first else {\n      return false\n    }\n\n    return firstScalar.properties.isEmoji && firstScalar.value > 0x238C\n  }\n\n  var isCombinedIntoEmoji: Bool {\n    guard unicodeScalars.count > 1, let firstScalar = unicodeScalars.first else {\n      return false\n    }\n\n    return firstScalar.properties.isEmoji\n  }\n\n  var isEmoji: Bool {\n    isSimpleEmoji || isCombinedIntoEmoji\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Character/Character+String.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Character {\n  static var newLine = Character(.newLine)\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Codable/Encodable+Data.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Encodable {\n  func toData() throws -> Data {\n    let encoder = JSONEncoder()\n    encoder.outputFormatting.insert(.prettyPrinted)\n    encoder.outputFormatting.insert(.sortedKeys)\n    encoder.dateEncodingStrategy = .iso8601\n\n    return try encoder.encode(self)\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Data/Data+Bytes.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Data {\n  var uint8Array: [UInt8] {\n    return [UInt8](self)\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Data/Data+Decodable.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Data {\n  func decode<T: Codable>(_ type: T.Type = T.self) throws -> T {\n    let decoder = JSONDecoder()\n    decoder.dateDecodingStrategy = .iso8601\n\n    let object = try decoder.decode(type, from: self)\n\n    return object\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Dictionary/Dictionary+Codable.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Dictionary where Key == String, Value: Any {\n  func encodeToStruct<T: Decodable>() -> T? {\n    do {\n      let data = try JSONSerialization.data(\n        withJSONObject: self\n      )\n\n      let decoder = JSONDecoder()\n      decoder.dateDecodingStrategy = .iso8601\n\n      return try decoder.decode(T.self, from: data)\n    } catch {\n      return nil\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Integer/Int+Indent.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension Int {\n  var level: String {\n    var content: String = .empty\n\n    for _ in 0..<self {\n      content += \"  \"\n    }\n    return content\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/Integer/UInt8+Data.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension UInt8 {\n  var data: Data {\n    var int = self\n\n    return Data(\n      bytes: &int,\n      count: MemoryLayout<UInt8>.size\n    )\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/String/String+Emoji.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension String {\n  var isEmoji: Bool {\n    count == 1 && containsEmoji\n  }\n\n  var containsEmoji: Bool {\n    contains {\n      $0.isEmoji\n    }\n  }\n\n  var containsOnlyEmoji: Bool {\n    isEmpty == false &&\n      contains {\n        $0.isEmoji == false\n      } == false\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/String/String+Interpolation.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension String.StringInterpolation {\n  mutating func appendInterpolation(indent: Int, newLine: Bool = true) {\n    appendInterpolation(\"\\(newLine ? String.newLine : .empty)\\(indent.level)\")\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/String/String+URL.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension String {\n  var isValidURL: Bool {\n    guard let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) else {\n      return false\n    }\n\n    if let match = detector.firstMatch(in: self, options: [], range: NSRange(location: 0, length: utf16.count)) {\n      return match.range.length == self.utf16.count\n    }\n\n    return false\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/String/String.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport CryptoKit\nimport Foundation\n\nenum StringError: Error {\n  case convertStringToData\n}\n\nextension String {\n  var sanitize: String {\n    var text = self\n\n    let entities = [\n      \"_\",\n      \"-\",\n    ]\n\n    entities.forEach { entity in\n      guard text.contains(entity) else {\n        return\n      }\n\n      text = text.replacingOccurrences(\n        of: entity,\n        with: \" \"\n      )\n    }\n\n    return text\n  }\n\n  var trimmedString: String {\n    trimmingCharacters(in: .whitespacesAndNewlines)\n  }\n\n  var splitByNewLine: [String] {\n    split(separator: .newLine).map(String.init)\n  }\n\n  static var newLine: String {\n    \"\\n\"\n  }\n\n  static var empty: String {\n    \"\"\n  }\n\n  func `repeat`(by times: Int) -> String {\n    var content = self\n\n    guard times >= 0 else {\n      return .empty\n    }\n\n    for _ in 0..<times {\n      content += self\n    }\n\n    return content\n  }\n\n  func convertToMD5() throws -> String {\n    guard let data = data(using: .utf8) else {\n      throw StringError.convertStringToData\n    }\n\n    let digest = Insecure.MD5.hash(data: data)\n\n    let value = digest.map {\n      String(format: \"%02hhx\", $0)\n    }\n    .joined()\n\n    return value\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/TSCBasic/AbsolutePath+SocialBasename.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport TSCBasic\n\nextension AbsolutePath {\n  var socialBasename: String {\n    basenameWithoutExt.sanitize.capitalized\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Extensions/TSCBasic/FileSystem+AbsolutePath.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport TSCBasic\n\nextension FileSystem {\n  func absolutePath(for path: String) -> AbsolutePath {\n    if let path = try? AbsolutePath(validating: path) {\n      return path\n    } else if\n      let path = try? RelativePath(validating: path),\n      let currentWorkingDirectory = localFileSystem.currentWorkingDirectory {\n      return AbsolutePath(\n        path.pathString,\n        relativeTo: currentWorkingDirectory\n      )\n    }\n\n    return localFileSystem.homeDirectory.appending(\n      RelativePath(path)\n    )\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/Group.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\ntypealias Groups = [Group]\n\nstruct Group: Codable {\n  var name: String\n  let path: String\n  var readme: String?\n  var scriptCommands: ScriptCommands = []\n  var subGroups: Groups?\n}\n\n// MARK: - MarkdownDescription Protocol\n\nextension Group: MarkdownDescriptionProtocol {\n  var sectionTitle: String {\n    .newLine + \"## \\(name)\"\n  }\n\n  var markdownDescription: String {\n    renderTree(for: self, level: 0)\n  }\n\n  func renderItem(for group: Group, level: Int = 0) -> String {\n    \"\\(indent: level)- [\\(group.name)](#\\(group.path))\"\n  }\n\n  func renderTree(for group: Group, level: Int) -> String {\n    var description = String.empty\n\n    if let subGroups = group.subGroups?.sorted() {\n      description += renderItem(\n        for: group,\n        level: level\n      )\n\n      for subGroup in subGroups {\n        description += renderTree(\n          for: subGroup,\n          level: level + 1\n        )\n      }\n    } else {\n      description += renderItem(\n        for: group,\n        level: level\n      )\n    }\n\n    return description\n  }\n}\n\n// MARK: - Comparable\n\nextension Group: Comparable {\n  static func < (lhs: Group, rhs: Group) -> Bool {\n    lhs.name < rhs.name\n  }\n\n  static func == (lhs: Group, rhs: Group) -> Bool {\n    lhs.name == rhs.name\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/Language+Information.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nextension Language {\n  typealias Informations = [Information]\n\n  struct Information: Codable {\n    let name: String\n    let displayName: String\n    let icon: String?\n\n    init(name: String) {\n      let language = Language(name)\n\n      self.name = language.name\n      self.displayName = language.displayName\n      self.icon = language.icon\n    }\n  }\n}\n\nextension Language.Information: Hashable {\n  func hash(into hasher: inout Hasher) {\n    hasher.combine(name)\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/Language.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nenum Language {\n  case applescript\n  case bash\n  case python\n  case ruby\n  case swift\n  case node\n  case php\n  case dotnet\n  case custom(String)\n\n  init(_ rawValue: String) {\n    let value = rawValue.lowercased()\n\n    switch value {\n    case \"applescript\", \"osascript\":\n      self = .applescript\n    case \"bash\", \"zsh\", \"sh\":\n      self = .bash\n    case \"python\", \"python2\", \"python3\":\n      self = .python\n    case \"ruby\":\n      self = .ruby\n    case \"swift\":\n      self = .swift\n    case \"node\", \"js\", \"zx\":\n      self = .node\n    case \"php\":\n      self = .php\n    case \"dotnet\":\n      self = .cs\n    default:\n      self = .custom(value)\n    }\n  }\n\n  var icon: String? {\n    switch self {\n    case .applescript:\n      return \"icon-applescript.png\"\n    case .bash:\n      return \"icon-bash.png\"\n    case .python:\n      return \"icon-python.png\"\n    case .ruby:\n      return \"icon-ruby.png\"\n    case .swift:\n      return \"icon-swift.png\"\n    case .node:\n      return \"icon-nodejs.png\"\n    case .php:\n      return \"icon-php.png\"\n    case .cs:\n      return \"icon-dotnet.png\"\n    default:\n      return nil\n    }\n  }\n\n  var displayName: String {\n    switch self {\n    case .applescript:\n      return \"AppleScript\"\n    case .bash:\n      return \"Bash\"\n    case .python:\n      return \"Python\"\n    case .ruby:\n      return \"Ruby\"\n    case .swift:\n      return \"Swift\"\n    case .node:\n      return \"Node\"\n    case .php:\n      return \"PHP\"\n    case .cs:\n      return \".NET\"\n    case .custom(let name):\n      return name\n    }\n  }\n\n  var name: String {\n    displayName.lowercased()\n  }\n}\n\n// MARK: -\n\nextension Language: MarkdownDescriptionProtocol {\n  var markdownDescription: String {\n    if let iconFilename = icon {\n      return \"<img src=\\\"images/\\(iconFilename)\\\" width=\\\"20\\\" height=\\\"20\\\" title=\\\"\\(displayName)\\\">\"\n    }\n\n    return displayName\n  }\n\n  var sectionTitle: String {\n    .empty\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/Metadata.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nstruct Metadata: Codable {\n  let date: Date\n  var identifiers: Identifiers\n}\n\n// MARK: - Equatable\n\nextension Metadata: Equatable {\n  static func == (lhs: Metadata, rhs: Metadata) -> Bool {\n    lhs.date == rhs.date\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/RaycastData.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nstruct RaycastData: Codable {\n  var groups: Groups\n  var updatedAt: Date\n  var totalScriptCommands: Int\n  var metadata: [Metadata]\n  var languages: Set<Language.Information>\n\n  var isEmpty: Bool {\n    groups.isEmpty\n      && totalScriptCommands == 0\n      && metadata.isEmpty\n  }\n\n  private enum CodingKeys: String, CodingKey {\n    case groups\n    case updatedAt\n    case totalScriptCommands\n    case metadata\n    case languages\n  }\n\n  init() {\n    self.groups = .init()\n    self.updatedAt = Date()\n    self.totalScriptCommands = 0\n    self.metadata = []\n    self.languages = []\n  }\n\n  init(from decoder: Decoder) throws {\n    let container = try decoder.container(keyedBy: CodingKeys.self)\n\n    groups = try container.decode(Groups.self, forKey: .groups)\n    totalScriptCommands = try container.decode(Int.self, forKey: .totalScriptCommands)\n    languages = try container.decode(Set<Language.Information>.self, forKey: .languages)\n\n    if let value = try container.decodeIfPresent(String.self, forKey: .updatedAt) {\n      let dateFormatter = DateFormatter()\n      dateFormatter.dateFormat = \"yyyy-MM-dd'T'HH:mm:ssZ\"\n\n      self.updatedAt = dateFormatter.date(from: value) ?? Date()\n    } else {\n      self.updatedAt = Date()\n    }\n\n    if let metadata = try container.decodeIfPresent([Metadata].self, forKey: .metadata) {\n      self.metadata = metadata\n    } else {\n      self.metadata = []\n    }\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/ScriptCommand+Author.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension ScriptCommand {\n  typealias Authors = [Author]\n\n  struct Author: Codable {\n    let name: String?\n    let url: String?\n\n    init(from decoder: Decoder) throws {\n      let container = try decoder.container(keyedBy: InputCodingKeys.self)\n\n      name = try container.decodeIfPresent(String.self, forKey: .name)\n      url = try container.decodeIfPresent(String.self, forKey: .url)\n    }\n\n    func encode(to encoder: Encoder) throws {\n      var container = encoder.container(keyedBy: OutputCodingKeys.self)\n\n      try container.encode(name, forKey: .name)\n      try container.encode(url, forKey: .url)\n    }\n  }\n}\n\n// MARK: - Keys\n\nextension ScriptCommand.Author {\n  enum InputCodingKeys: String, CodingKey {\n    case url = \"authorURL\"\n    case name = \"author\"\n  }\n\n  enum OutputCodingKeys: String, CodingKey {\n    case url\n    case name\n  }\n}\n\n// MARK: - Comparable\n\nextension ScriptCommand.Author: Comparable {\n  static func < (lhs: ScriptCommand.Author, rhs: ScriptCommand.Author) -> Bool {\n    guard let leftName = lhs.name, let rightName = rhs.name else {\n      return false\n    }\n\n    return leftName < rightName\n  }\n\n  static func == (lhs: ScriptCommand.Author, rhs: ScriptCommand.Author) -> Bool {\n    guard let leftName = lhs.name, let rightName = rhs.name else {\n      return false\n    }\n\n    return leftName == rightName\n  }\n}\n\n// MARK: - MarkdownDescription Protocol\n\nextension ScriptCommand.Author: MarkdownDescriptionProtocol {\n  var markdownDescription: String {\n    if let name = name, let url = url {\n      return \"[\\(name)](\\(url))\"\n    } else if let name = name {\n      return name\n    } else if let url = url {\n      return url\n    }\n\n    return .empty\n  }\n\n  var sectionTitle: String {\n    .empty\n  }\n}\n\n// MARK: - Authors\n\nextension Array: MarkdownDescriptionProtocol where Element == ScriptCommand.Author {\n  var sectionTitle: String {\n    .empty\n  }\n\n  var markdownDescription: String {\n    var authors = String.empty\n\n    for author in self {\n      let separator = self.separator(for: author.name ?? .empty)\n      authors += separator + author.markdownDescription\n    }\n\n    return authors\n  }\n\n  func separator(for currentName: String) -> String {\n    if let firstAuthor = first, currentName == firstAuthor.name {\n      return .empty\n    } else if let lastAuthor = last, currentName == lastAuthor.name {\n      return Separator.and\n    }\n\n    return Separator.comma\n  }\n}\n\nextension ScriptCommand.Authors {\n  enum Separator {\n    static let and = \" and \"\n    static let comma = \", \"\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/ScriptCommand+Icon.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension ScriptCommand {\n  struct Icon: Codable {\n    let light: String?\n    let dark: String?\n\n    init(from decoder: Decoder) throws {\n      let container = try decoder.container(keyedBy: InputCodingKeys.self)\n\n      light = try container.decodeIfPresent(String.self, forKey: .icon)\n      dark = try container.decodeIfPresent(String.self, forKey: .iconDark)\n    }\n\n    func encode(to encoder: Encoder) throws {\n      var container = encoder.container(keyedBy: OutputCodingKeys.self)\n\n      try container.encode(light, forKey: .light)\n      try container.encode(dark, forKey: .dark)\n    }\n  }\n}\n\n// MARK: - Keys\n\nextension ScriptCommand.Icon {\n  enum InputCodingKeys: String, CodingKey {\n    case icon\n    case iconDark\n  }\n\n  enum OutputCodingKeys: String, CodingKey {\n    case light\n    case dark\n  }\n}\n\n// MARK: - HTML Render\n\nextension ScriptCommand.Icon {\n  private func htmlImageTag(for lightFilepath: String?, darkFilepath: String?, path: String) -> String {\n    if let iconLight = lightFilepath, let iconDark = darkFilepath {\n      var darkURL: String { iconDark.isValidURL ? iconDark : path + iconDark }\n      var lightURL: String { iconLight.isValidURL ? iconLight : path + iconLight }\n\n      // This is the way to make modern HTML change images based on the theme (light or dark) used by the user\n      return \"<picture><source srcset=\\\"\\(darkURL)\\\" media=\\\"(prefers-color-scheme: dark)\\\"><img src=\\\"\\(lightURL)\\\" width=\\\"20\\\" height=\\\"20\\\"></picture>\"\n    } else if let icon = lightFilepath {\n      var url: String { icon.isValidURL ? icon : path + icon }\n      return \"<img src=\\\"\\(url)\\\" width=\\\"20\\\" height=\\\"20\\\">\"\n    } else if let icon = darkFilepath {\n      var url: String { icon.isValidURL ? icon : path + icon }\n      return \"<img src=\\\"\\(url)\\\" width=\\\"20\\\" height=\\\"20\\\">\"\n    }\n\n    return .empty\n  }\n\n  func imageTag(with path: String) -> String {\n    if let iconLight = light, let iconDark = dark {\n      if iconLight.isEmoji && iconDark.isEmoji {\n        return iconLight\n      } else if iconLight.isImage && iconDark.isImage || iconLight.isValidURL && iconDark.isValidURL {\n        let tag = htmlImageTag(\n          for: iconLight,\n          darkFilepath: iconDark,\n          path: path\n        )\n        return tag\n      }\n    } else if let iconLight = light, iconLight.isEmoji {\n      return iconLight\n    } else if let iconDark = dark, iconDark.isEmoji {\n      return iconDark\n    } else if let icon = light, icon.isImage || icon.isValidURL {\n      let tag = htmlImageTag(\n        for: icon,\n        darkFilepath: nil,\n        path: path\n      )\n\n      return tag\n    } else if let icon = dark, icon.isImage || icon.isValidURL {\n      let tag = htmlImageTag(\n        for: nil,\n        darkFilepath: icon,\n        path: path\n      )\n\n      return tag\n    }\n\n    return .empty\n  }\n}\n\n// MARK: -\n\nprivate extension String {\n  var isImage: Bool {\n    hasSuffix(\".png\") || hasSuffix(\".jpeg\") || hasSuffix(\".jpg\") || hasSuffix(\".gif\")\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/ScriptCommand+Mode.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nextension ScriptCommand {\n  enum Mode: String, Codable {\n    case fullOutput\n    case compact\n    case silent\n    case inline\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Models/ScriptCommand.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\ntypealias ScriptCommands = [ScriptCommand]\n\nstruct ScriptCommand: Codable {\n  let identifier: String\n  let schemaVersion: Int\n  let title: String\n  var filename: String\n  let mode: Mode?\n  var packageName: String?\n  let icon: Icon?\n  let authors: [Author]?\n  let details: String?\n  let currentDirectoryPath: String?\n  let needsConfirmation: Bool?\n  let refreshTime: String?\n  let language: String\n  let isTemplate: Bool\n  let hasArguments: Bool\n  let createdAt: String\n  let updatedAt: String\n  var path: String\n\n  private(set) var isExecutable: Bool = false\n\n  enum CodingKeys: String, CodingKey {\n    case identifier\n    case schemaVersion\n    case title\n    case filename\n    case mode\n    case packageName\n    case icon\n    case authors\n    case details = \"description\"\n    case currentDirectoryPath\n    case needsConfirmation\n    case refreshTime\n    case language\n    case isTemplate\n    case hasArguments\n    case createdAt\n    case updatedAt\n    case path\n  }\n\n  var iconDescription: String {\n    guard let icon = self.icon else {\n      return .empty\n    }\n\n    let path = \"https://raw.githubusercontent.com/raycast/script-commands/master/commands/\\(self.path)\"\n\n    let tag = icon.imageTag(\n      with: path\n    )\n\n    return tag\n  }\n\n  var fullPath: String {\n    \"\\(path)\\(filename)\"\n  }\n\n  mutating func configure(isExecutable: Bool) {\n    self.isExecutable = isExecutable\n  }\n}\n\n// MARK: - Encode/Decode\n\nextension ScriptCommand {\n  init?(from dictionary: [String: Any]) {\n    if let scriptCommand: ScriptCommand = dictionary.encodeToStruct() {\n      self = scriptCommand\n    } else {\n      return nil\n    }\n  }\n\n  init(from decoder: Decoder) throws {\n    let container      = try decoder.container(keyedBy: CodingKeys.self)\n\n    // Required\n    self.schemaVersion = try container.decode(Int.self, forKey: .schemaVersion)\n    self.title         = try container.decode(String.self, forKey: .title)\n    self.language      = try container.decode(String.self, forKey: .language)\n    self.isTemplate    = try container.decode(Bool.self, forKey: .isTemplate)\n    self.hasArguments  = try container.decode(Bool.self, forKey: .hasArguments)\n    self.path          = try container.decode(String.self, forKey: .path)\n\n    let filename       = try container.decode(String.self, forKey: .filename)\n    let createdAt      = try container.decode(String.self, forKey: .createdAt)\n    let updatedAt      = try container.decode(String.self, forKey: .updatedAt)\n\n    self.filename  = filename\n    self.createdAt = createdAt\n    self.updatedAt  = updatedAt\n\n    do {\n      let value = \"\\(createdAt.description)\\(filename)\"\n      let identifier = try value.convertToMD5()\n\n      self.identifier = identifier\n    } catch let error as StringError {\n      fatalError(error.localizedDescription)\n    }\n\n    // Optionals\n    self.mode                   = try container.decodeIfPresent(Mode.self, forKey: .mode)\n    self.packageName            = try container.decodeIfPresent(String.self, forKey: .packageName)\n    self.icon                   = try container.decodeIfPresent(Icon.self, forKey: .icon)\n    self.details                = try container.decodeIfPresent(String.self, forKey: .details)\n    self.currentDirectoryPath   = try container.decodeIfPresent(String.self, forKey: .currentDirectoryPath)\n    self.needsConfirmation      = try container.decodeIfPresent(Bool.self, forKey: .needsConfirmation)\n    self.refreshTime            = try container.decodeIfPresent(String.self, forKey: .refreshTime)\n    self.authors                = try container.decodeIfPresent(Authors.self, forKey: .authors)\n  }\n\n  func encode(to encoder: Encoder) throws {\n    var container = encoder.container(keyedBy: CodingKeys.self)\n\n    try container.encode(identifier, forKey: .identifier)\n    try container.encode(schemaVersion, forKey: .schemaVersion)\n    try container.encode(title, forKey: .title)\n    try container.encode(filename, forKey: .filename)\n    try container.encode(mode, forKey: .mode)\n    try container.encode(packageName, forKey: .packageName)\n    try container.encode(icon, forKey: .icon)\n    try container.encode(details, forKey: .details)\n    try container.encode(currentDirectoryPath, forKey: .currentDirectoryPath)\n    try container.encode(authors, forKey: .authors)\n    try container.encode(needsConfirmation, forKey: .needsConfirmation)\n    try container.encode(refreshTime, forKey: .refreshTime)\n    try container.encode(language, forKey: .language)\n    try container.encode(isTemplate, forKey: .isTemplate)\n    try container.encode(hasArguments, forKey: .hasArguments)\n    try container.encode(createdAt, forKey: .createdAt)\n    try container.encode(updatedAt, forKey: .updatedAt)\n    try container.encode(path, forKey: .path)\n  }\n}\n\n// MARK: - Comparable\n\nextension ScriptCommand: Comparable {\n  static func < (lhs: ScriptCommand, rhs: ScriptCommand) -> Bool {\n    lhs.title < rhs.title\n  }\n\n  static func == (lhs: ScriptCommand, rhs: ScriptCommand) -> Bool {\n    lhs.title == rhs.title\n      && lhs.schemaVersion == rhs.schemaVersion\n      && lhs.authors == rhs.authors\n  }\n}\n\n// MARK: - MarkdownDescription Protocol\n\nextension ScriptCommand: MarkdownDescriptionProtocol {\n  var markdownDescription: String {\n    var content: String = .empty\n\n    var author = \"Raycast\"\n    var details = \"N/A\"\n\n    if let value = self.authors {\n      author = value.markdownDescription\n    }\n\n    if let value = self.details {\n      details = value.replacingOccurrences(of: \"|\", with: #\"\\|\"#)\n    }\n\n    let language = Language(self.language).markdownDescription\n    let scriptPath = \"\\(path)\\(filename)\"\n\n    let header = \"\"\"\n      | \\(iconDescription) | [\\(title)](\\(scriptPath)) | \\(details) | \\(author) | \\(hasArguments ? \"✅\" : \"\") | \\(isTemplate ? \"✅\" : \"\") | \\(language) |\n    \"\"\"\n\n    content += .newLine + header\n\n    return content\n  }\n\n  var sectionTitle: String {\n    .empty\n  }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Protocols/MarkdownDescriptionProtocol.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport Foundation\n\nprotocol MarkdownDescriptionProtocol {\n  var markdownDescription: String { get }\n  var sectionTitle: String { get }\n}\n"
  },
  {
    "path": "Tools/Toolkit/Sources/ToolkitLibrary/Typealiases/Identifier.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\ntypealias Identifier = String\ntypealias Identifiers = [Identifier]\n"
  },
  {
    "path": "Tools/Toolkit/Tests/LinuxMain.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport XCTest\n\nimport ToolkitLibraryTests\n\nvar tests = [XCTestCaseEntry]()\ntests += ToolkitLibraryTests.allTests()\nXCTMain(tests)\n"
  },
  {
    "path": "Tools/Toolkit/Tests/ToolkitLibraryTests/ToolkitLibraryTests.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport XCTest\nimport class Foundation.Bundle\n\nfinal class ToolkitLibraryTests: XCTestCase {\n  func testExample() throws {\n    let fooBinary = productsDirectory.appendingPathComponent(\"toolkit\")\n\n    let process = Process()\n    process.executableURL = fooBinary\n\n    let pipe = Pipe()\n    process.standardOutput = pipe\n\n    try process.run()\n    process.waitUntilExit()\n\n    let data = pipe.fileHandleForReading.readDataToEndOfFile()\n    let output = String(data: data, encoding: .utf8)\n\n    XCTAssertEqual(output, \"OVERVIEW: A tool to generate automatized documentation\\n\\nUSAGE: toolkit <subcommand>\\n\\nOPTIONS:\\n  -h, --help              Show help information.\\n\\nSUBCOMMANDS:\\n  generate-documentation  Generate the documentation in JSON and Markdown format\\n  version                 Print the current Toolkit version\\n\\n  See \\'toolkit help <subcommand>\\' for detailed help.\\n\")\n  }\n\n  /// Returns path to the built products directory.\n  var productsDirectory: URL {\n    #if os(macOS)\n    for bundle in Bundle.allBundles where bundle.bundlePath.hasSuffix(\".xctest\") {\n      return bundle.bundleURL.deletingLastPathComponent()\n    }\n    fatalError(\"couldn't find the products directory\")\n    #else\n    return Bundle.main.bundleURL\n    #endif\n  }\n\n  static var allTests = [\n    (\"testExample\", testExample),\n  ]\n}\n"
  },
  {
    "path": "Tools/Toolkit/Tests/ToolkitLibraryTests/XCTestManifests.swift",
    "content": "//\n//  MIT License\n//  Copyright (c) 2020-2021 Raycast. All rights reserved.\n//\n\nimport XCTest\n\n#if !canImport(ObjectiveC)\npublic func allTests() -> [XCTestCaseEntry] {\n  return [\n    testCase(ToolkitLibraryTests.allTests),\n  ]\n}\n#endif\n"
  },
  {
    "path": "Tools/Toolkit/integration.sh",
    "content": "#!/bin/bash\n\nfunction commit_documentation() {\n  if `git status | grep -q \"nothing to commit\"`; then\n    exit 0;\n  else\n    extensions=false\n    readme=false\n    \n    extensions_path=\"commands/extensions.json\"\n    readme_path=\"commands/README.md\"\n    \n    while read -r file; do\n      if [[ $file == $extensions_path ]]; then\n        extensions=true\n      fi\n      \n      if [[ $file == $readme_path ]]; then\n        readme=true\n      fi\n    done <<< \"$(git diff --name-only)\"\n    \n    if $extensions && $readme; then\n      git add $extensions_path $readme_path\n      git commit -m \"Update Script Commands documentation\"\n    fi\n    \n    exit 0;\n  fi\n}\n\nfunction commit_executable() {\n  if `git status | grep -q \"nothing to commit\"`; then\n    exit 0;\n  else\n    git add -u\n    git commit -m \"Set scripts as executable\"\n\n    exit 0;\n  fi\n}\n\nargument=$1\n\ngit config --local user.email \"bot@raycast.com\"\ngit config --local user.name \"Raycast Bot\"\n\nif [[ $argument = \"commit_documentation\" ]]; then\n  commit_documentation;\nelif [[ $argument = \"commit_executable\" ]]; then\n  commit_executable;\nfi\n"
  },
  {
    "path": "_enabled-commands/.gitignore",
    "content": "# Ignore directory contents\n*\n# Except for\n!.gitignore\n!README.md"
  },
  {
    "path": "_enabled-commands/README.md",
    "content": "# How to use this directory\n\nGrab script files you want to use from the repository and paste it here (rather than pointing directly to other repo folders). By doing this, you will avoid new unexpected scripts creeping in Raycast as community adds more. You also protect yourself from any potential folder renamings. All content in this directory will be ignored by git."
  },
  {
    "path": "commands/README.md",
    "content": "<!-- AUTO GENERATED FILE. DO NOT EDIT. -->\n<div align=\"center\">\n  <a href=\"https://github.com/raycast/script-commands\">\n    <img alt=\"GitHub contributors\" src=\"https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=202123&label=Script%20Commands&query=$.totalScriptCommands&url=https:%2F%2Fraw.githubusercontent.com%2Fraycast%2Fscript-commands%2Fmaster%2Fcommands%2Fextensions.json&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAABYCAIAAAD+96djAAAIC0lEQVR4nOybW2zb1hmADynqLsuWRFLOBVmTpqkVy5LlpkgfDGRdnSvcdSiKIUWHosO8lwDtw4Bge1pRYMAw9KXAgAxYMiTNGjRZt+5plxQIkCzpNjduZMmJnMRpt7WR7NgSJYqULFISNUQ8pikpKVLpkOwDP+QhUajj40//f3j+n0fEY1sfByYA4EZP4JuCKQJiioCYIiCmCIgpAmKKgJgiIKYIiCkCYoqAmCIgpgiIKQJiioCYIiDGi9jidIQ8bqNnYbSIkNv9h7HY+7HRXf39xs7ESBFbnc5To5Gg3d5vtf4uMhLu8xg4GSNF7BroJ202+e9eK3EmNvr0gGFxYRnw+Y362SmeL1Rrzwb8AMMAAHYc30+Sl3JMtlrVfzJGigAAJDguXRH2kQHowmJ5Phi8kmeWRVHnmegt4gmXa7vLlRYE5ZUUz+ertT0BPwZd4JNBejpfWFJdowO6itjssJ8bix3euGGGZdOV9d8zwXFtOXKQoi4yuayoX47oJ2Kzw/HuaHSz00ng+H6K+pjJ31PFf4Lj+Hp93O9T4mKCJC8zTE6v9UI/Ec8M9B/euNGy9plPBulrrXERLxbvVip7SVJ24SGIFwaDuuWIfiI+K68u8KVDNIUpLmi6LUfm+VJnjuizduq6RnxWLmcqwgQZkF0QOH6Aoq51rBeda+elnObrhbYiQm73bt/AQqmsvJLi+YVSaS9Fyjlia8bFbLH4ZaWiXJPgOLWvtdgpZrTMEQ1FbHU634tFX9wwmCxy/11dBQAMEMSugX6x0ahJjRFvn3wZgeOHaGpREAI22xanU/7D1+sei2W7GxZjDovlgMY5gml0LCDkcZ+KRmi7HQAgStKRuRsXcrlxv+/3o9GuxyzWalPJuasFFulMIVrVGttcrsBaHWHD8Z9sewzreUwvQZwYCYfcmtTsWon4y/LKVGJOlCQAwE2OfyWeaKAY1mu1nh2LaVGnalh9XmSYI3M3Uhz3cny2UKuhGlauU2NeL6oBZVCK2Oyw7yNJ9SsXcrnJq58itCDjJYhT0cgQ0r4WMhHyDvrX4Z37qRYXSDJCZjpfkBpwPK+VOBmN7HC7UA2ORsQTLtefnoptc7lsOH4sPPzShkEkw7ZxbnHx6PxNxcWg3f7BU2OocgSNCJ/V6iUIOCKG/WroyYOtcYGKD5fuvXX7DlDiopkjSNZONCI+YdnXEklubS3AMeyd4Z0auTidTr95+446R87ERnvvgyNbI6YL7A/iCcWFDcdf3rQR1eBtnE6nfzp/S1LFRe998O5FbHU6v9+6FiQ57sfJuUq93suEHpE/Li39YmE9R3rvg3cpIuRxnx0b/eXQk69u2qR+fbpwP0d41PdLGWUZkjl59wE50nUfvJuia4vDcSY2GrTbMQx7NuBPV4QUzyv/m64I11h2kqYzgvDnpXstb3Q6Xxzs/obyzMBAosh90VqnouqDdxMRbovFga+9EcPeDj0gLqY0yBGHxXI8Et7d+pmfTqePzt9ScsSK457WwHlEuomIbLU6w7IHaMou68CwPQF/oVpLcJxyzZeVyr8LbLnVRY8R8bBejtIHFyTp9RupK/l8FyN32Y/ICMIVhpmkabsFb6q4nyN8vR4vFpVryh0R0bsIpZfT2QdnxOq76fQ/mG4s9NSYWRbFT1l2P0XaLRbQlDHu992tVOb50sPegkSEHBedffAkx6nbXF+XnvYRV1n2cHy2qNpHvR0aalsvEPL35RW5rgcA9BHEe7HobnTPSnvdUM3zpVfis8Xquou3dmzXyMVH2ewb11PK/bKvub9G5QLBzvI6x7+WSCpxATDszR3bX0KRAp2cz2bVe0r5lolkZGQ9yyGP+2Q0MthsUgIApEbj57cWzmQy6msom23c7+v6R8wUWHkVOEiR7wzvXK3Xp5JzM2yx57kDxM3bHW7XB2NjXiu8jV9mmFdnk6gGb+MQRS2LAioLiDtUt0vllhxBhBXDjkfCzwUC6hf/urKC0AL6nmW8WFSvnb1jxbDfjAxPkOSxkeHvBDR8FoW+eXud4w9fi7OInmIfCw8/1+yD2nD8t5GR7wVpJMN2okkXe75UmkrOIcmRs5lFZe9QlSROsxpfqyddAADaZjvyrS191vUS6JM8e25xUX2NlyB+9vg2eZ8uc345+1E2q77m237/iehIVZJ+lJz7Z76g0Ww1FAEAeLq//0Qk7LVa5X9KjcbR+Zsfttbm4z7f8UjYIe/Tm88H37iROr/S4uK7QbpUq1/I5bSbqrZPwzOCcIlhng8G5W0PhmF7SbKtTv2iUrlfy1KUrXmNBcMO0VRGaOlx3CqV/tN8jKwdmp+PyIrVzjo13+pC6eUQa74myMBCqXSnXNZ0bmr0OCiyLIrThcLB1v5FpqOvNXO/lqXWY4ciPy+X1WcrNEWnEzNLgnAxl5sgSbl9JH/mXK02W2yJi4+Z/GSQll3wtdr7mYymh0PU6Hd0KCtWLzPMC8GgkiN7/O05ck8U5RypNRo/TCTR7h2/Gl3PUOWq1c4cKXSsFzMs+7eVlX9pcyDkYeh98nbpQT2+zj74/1a77zV1hwFnsZdF8VIuNxmkHWs9vn1koC1H9MeYQ+kP7IMzYjVpnAvDvq8xw7bUqaIkfb6q366hEyO/pqD0wSUAXr+e6roTjwRta41HIeRxewhCo0ODj043T8fQ8hXPQfTE+K87fkMwRUBMERBTBMQUATFFQEwREFMExBQBMUVATBEQUwTEFAExRUBMERBTBOT/AQAA//98wKt7wQJ9rAAAAABJRU5ErkJggg==&labelColor=202123\">\n  </a>\n  <a href=\"https://github.com/raycast/script-commands/graphs/contributors\">\n    <img alt=\"GitHub contributors\" src=\"https://img.shields.io/github/stars/raycast?style=for-the-badge\">\n  </a>\n  <a href=\"https://github.com/raycast/script-commands/stargazers\">\n    <img alt=\"GitHub Org's stars\" src=\"https://img.shields.io/github/contributors/raycast/script-commands?style=for-the-badge\">\n  </a>\n  <a href=\"https://twitter.com/raycastapp\">\n    <img alt=\"Twitter Follow\" src=\"https://img.shields.io/twitter/follow/raycastapp?style=for-the-badge\">\n  </a>\n</div>\n\n# Raycast Script Commands\n\n[Raycast](https://raycast.com) lets you control your tools with a few keystrokes\nand Script Commands makes it possible to execute scripts from anywhere on your desktop.\nThey are a great way to speed up every-day tasks such as converting data, opening bookmarks\nor triggering dev workflows.\n\nThis repository contains sample commands and documentation to write your own ones.\n\n### Categories\n\n- [Ai](#ai)\n  - [Gemini](#gemini)\n- [Apps](#apps)\n  - [Agenda](#agenda)\n  - [Amphetamine](#amphetamine)\n  - [Baremetrics](#baremetrics)\n  - [Bartender](#bartender)\n  - [Bear](#bear)\n  - [BusyCal](#busycal)\n  - [Chatgpt](#chatgpt)\n  - [Claude](#claude)\n  - [Cleanshot](#cleanshot)\n  - [Craft](#craft)\n  - [DND Me](#dnd-me)\n  - [Deepl](#deepl)\n  - [Devutils](#devutils)\n  - [Dictionary](#dictionary)\n  - [Downie](#downie)\n  - [Espanso](#espanso)\n  - [Eudic](#eudic)\n  - [Evernote](#evernote)\n  - [ExpressVPN](#expressvpn)\n  - [Fantastical](#fantastical)\n  - [Ferdi](#ferdi)\n  - [Find My](#find-my)\n  - [Focus](#focus)\n  - [GoodLinks](#goodlinks)\n  - [HazeOver](#hazeover)\n  - [Hyper](#hyper)\n  - [Lungo](#lungo)\n  - [Mail](#mail)\n  - [Medo](#medo)\n  - [MeetingBar](#meetingbar)\n  - [MenubarX](#menubarx)\n  - [Message](#Message)\n  - [Mullvad](#mullvad)\n  - [NotePlan3](#noteplan3)\n  - [Notes](#notes)\n  - [Obsidian](#obsidian)\n  - [One Thing](#one-thing)\n  - [OpenVPN](#openvpn)\n  - [PhpStorm](#phpstorm)\n  - [Plash](#plash)\n  - [Playground](#playground)\n  - [Pulse Secure](#pulse-secure)\n  - [Quip](#quip)\n  - [Raycast](#raycast)\n  - [Reminders](#reminders)\n  - [Safari](#safari)\n  - [Session](#session)\n  - [SideNotes](#sidenotes)\n  - [Sip](#sip)\n  - [Stickies](#stickies)\n  - [Sublime](#sublime)\n  - [Surfshark](#surfshark)\n  - [Tailscale](#tailscale)\n  - [Terminal Translate](#terminal-translate)\n  - [Things](#things)\n  - [Timing](#timing)\n  - [Todoist](#todoist)\n  - [Translate Shell](#translate-shell)\n  - [Trello](#trello)\n  - [TunnelBlick](#tunnelblick)\n  - [Viscosity](#viscosity)\n  - [WARP](#warp)\n  - [WebStorm](#webstorm)\n  - [Wikipedia](#wikipedia)\n  - [Y Pomodoro](#y-pomodoro)\n  - [iTerm](#iterm)\n  - [iconsur](#iconsur)\n- [Browsing](#browsing)\n- [Communication](#communication)\n  - [Cloudup](#cloudup)\n  - [DuckDuckGo Email Protection](#duckduckgo-email-protection)\n  - [Emojis](#emojis)\n  - [Gmail](#gmail)\n  - [Google Meet](#google-meet)\n  - [Mail](#mail)\n  - [Messenger](#messenger)\n  - [Slack](#slack)\n  - [Zoom](#zoom)\n- [Conversions](#conversions)\n  - [Change Case](#change-case)\n- [Culture](#culture)\n- [Dashboard](#dashboard)\n  - [Countdowns](#countdowns)\n  - [Firebase](#firebase)\n  - [Mood Meter](#mood-meter)\n  - [Open Weather](#open-weather)\n- [Dashboards](#dashboards)\n- [Developer Utils](#developer-utils)\n  - [Aws](#aws)\n  - [Brew](#brew)\n  - [Cloudflare](#cloudflare)\n  - [Docker](#docker)\n  - [Git](#git)\n  - [GitHub](#github)\n  - [GitLab](#gitlab)\n  - [Google](#google)\n  - [Ip](#ip)\n  - [Minikube](#minikube)\n  - [Sentry](#sentry)\n  - [Solana](#solana)\n  - [Vscode](#vscode)\n  - [Xcode](#xcode)\n- [Home](#home)\n  - [Elgato](#elgato)\n  - [Philips Hue](#philips-hue)\n- [Math](#math)\n- [Media](#media)\n  - [Apple Music](#apple-music)\n  - [Apple Tv](#apple-tv)\n  - [Cmus](#cmus)\n  - [Endel](#endel)\n  - [Lowfi](#lowfi)\n  - [Sonos](#sonos)\n  - [Speaker Setup](#speaker-setup)\n  - [Spotify](#spotify)\n  - [Tidal](#tidal)\n  - [foobar2000](#foobar2000)\n- [Navigation](#navigation)\n- [Productivity](#productivity)\n  - [Bitwarden](#bitwarden)\n  - [Imgur](#imgur)\n  - [Pomodoro](#pomodoro)\n  - [QPDF](#qpdf)\n  - [Writing](#writing)\n  - [macOCR](#macocr)\n  - [stopwatch](#stopwatch)\n  - [tesseract](#tesseract)\n- [Remote Control](#remote-control)\n  - [Ddc](#ddc)\n    - [Arm64](#arm64)\n    - [X86](#x86)\n  - [Denon AVR](#denon-avr)\n  - [LG TV](#lg-tv)\n  - [Samsung TV](#samsung-tv)\n- [System](#system)\n  - [Audio](#audio)\n  - [Magic Keyboard Switcher](#magic-keyboard-switcher)\n  - [VPN](#vpn)\n  - [Vpnutil](#vpnutil)\n- [Web Searches](#web-searches)\n  - [WordPress](#wordpress)\n\n## Ai\n\n#### Gemini\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Ask Gemini](ai/gemini/gemini.js) | Open Gemini in Chrome browser and submit a prompt with optional selected text as context | [Est7](https://github.com/est7) and [Nimo Beeren](https://github.com/nimobeeren) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n## Apps\n\n#### Agenda\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/agenda/images/agenda.png\" width=\"20\" height=\"20\"> | [Agenda Today Overview](apps/agenda/agenda-today.sh) | Opens Agenda - Today Overview | [Michael Ellis](https://github.com/mtellis2) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/agenda/images/agenda.png\" width=\"20\" height=\"20\"> | [Create New On the Agenda Note](apps/agenda/agenda-new-note.sh) | Creates New Note and adds it to On the Agenda | [Michael Ellis](https://github.com/mtellis2) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/agenda/images/agenda.png\" width=\"20\" height=\"20\"> | [On the Agenda Overview](apps/agenda/agenda-on-the-agenda.sh) | Opens Agenda - On the Agenda Overview | [Michael Ellis](https://github.com/mtellis2) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Amphetamine\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/amphetamine/images/amphetamine.png\" width=\"20\" height=\"20\"> | [End Session](apps/amphetamine/amphetamine-off.applescript) | Stop Current Amphetamine Session | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/amphetamine/images/amphetamine.png\" width=\"20\" height=\"20\"> | [Start Default Session](apps/amphetamine/amphetamine-on.applescript) | Start Default Amphetamine Session | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Baremetrics\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/baremetrics/images/baremetrics.png\" width=\"20\" height=\"20\"> | [Annual Recurring Revenue](apps/baremetrics/get-arr.sh) | Display Annual Recurring Revenue (ARR) | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/baremetrics/images/baremetrics.png\" width=\"20\" height=\"20\"> | [Average Revenue Per User](apps/baremetrics/get-arpu.sh) | Display Average revenue per user (ARPU) | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/baremetrics/images/baremetrics.png\" width=\"20\" height=\"20\"> | [Lifetime Value](apps/baremetrics/get-ltv.sh) | Display Lifetime Value (LTV) | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/baremetrics/images/baremetrics.png\" width=\"20\" height=\"20\"> | [Monthly Recurring Revenue](apps/baremetrics/get-mrr.sh) | Display Monthly Recurring Revenue (MRR) | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/baremetrics/images/baremetrics.png\" width=\"20\" height=\"20\"> | [Revenue](apps/baremetrics/simple-dashboard.sh) | Display Revenue Dashboard | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Bartender\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bartender/images/bartender-icon.png\" width=\"20\" height=\"20\"> | [Search Bartender](apps/bartender/bartender-search.applescript) | Perform a quick search of Menu Bar Items, in Bartender 4 | Raycast | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Bear\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Add Note](apps/bear/bear-add-note.sh) | Add a new note to Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Open Note](apps/bear/bear-open-note.sh) | Open the specified note in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Open Tag](apps/bear/bear-open-tag.sh) | Open the specified tag in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Open Today](apps/bear/bear-today.sh) | Open the Today section in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Open Todos](apps/bear/bear-todo.sh) | Open the Todo section in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/bear/images/bear-light.png\" width=\"20\" height=\"20\"></picture> | [Search](apps/bear/bear-search.sh) | Search notes by keyword and/or tag in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### BusyCal\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/busycal/images/busycal.png\" width=\"20\" height=\"20\"> | [Create Event/Task](apps/busycal/new-busycal-event-or-task.applescript) | Creates new events or tasks in BusyCal. | [Annie Ma](www.anniema.co) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Chatgpt\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/chatgpt/images/chatgpt.png\" width=\"20\" height=\"20\"> | [chatgpt](apps/chatgpt/chatgpt-open-safari.applescript) | Open chatgpt in safari | [gintonyc](https://raycast.com/gintonyc) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Claude\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ✨ | [Ask Claude](apps/claude/claude.js) | Open Claude in Chrome browser and submit a prompt | [Nimo Beeren](https://github.com/nimobeeren) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n#### Cleanshot\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/add-quick-access-overlay.png\" width=\"20\" height=\"20\"> | [Add Quick Access Overlay](apps/cleanshot/cleanshot-add-quick-access-overlay.sh) | Opens a new Quick Access Overlay with the specified image or video. | [CleanShot X](https://twitter.com/CleanShot_app) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/annotate.png\" width=\"20\" height=\"20\"> | [Annotate](apps/cleanshot/cleanshot-annotate.sh) | Opens specified file in Annotate. | [CleanShot X](https://twitter.com/CleanShot_app) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/capture-area.png\" width=\"20\" height=\"20\"> | [Capture Area](apps/cleanshot/cleanshot-capture-area.sh) | Take a screenshot of a specific area on your screen. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/capture-fullscreen.png\" width=\"20\" height=\"20\"> | [Capture Fullscreen](apps/cleanshot/cleanshot-capture-fullscreen.sh) | Take a screenshot of your screen. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/capture-previous-area.png\" width=\"20\" height=\"20\"> | [Capture Previous Area](apps/cleanshot/cleanshot-capture-previous-area.sh) | Take a screenshot of the previously specified area of your screen. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/capture-text.png\" width=\"20\" height=\"20\"> | [Capture Text](apps/cleanshot/cleanshot-capture-text.sh) | Opens Text Recognition (OCR) tool or extracts text from the specified file. | [CleanShot X](https://twitter.com/CleanShot_app) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/capture-window.png\" width=\"20\" height=\"20\"> | [Capture Window](apps/cleanshot/cleanshot-capture-window.sh) | Take a screenshot of a window. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/clipboard.png\" width=\"20\" height=\"20\"> | [Open from Clipboard](apps/cleanshot/cleanshot-open-from-clipboard.sh) | Open screenshot that is currently in the clipboard. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/pin.png\" width=\"20\" height=\"20\"> | [Pin to the Screen](apps/cleanshot/cleanshot-pin.sh) | Pin a screenshot to the screen. | [CleanShot X](https://twitter.com/CleanShot_app) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/record-screen.png\" width=\"20\" height=\"20\"> | [Record Screen](apps/cleanshot/cleanshot-record-screen.sh) | Start a screen recording and save it as a video or an optimized GIF file. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/record-screen-keystroke-pro.png\" width=\"20\" height=\"20\"> | [Record Screen With Keystroke Pro](apps/cleanshot/cleanshot-record-screen-with-keystroke-pro.sh) | Start a screen recording with keystrokes using the Keystroke Pro app and save it as a video or an optimized GIF file. | [Danylo Zalizchuk](https://raycast.com/danulqua) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/restore.png\" width=\"20\" height=\"20\"> | [Restore Recently Closed File](apps/cleanshot/cleanshot-restore.sh) | Restore the recently closed file. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/scrolling-capture.png\" width=\"20\" height=\"20\"> | [Scrolling Capture](apps/cleanshot/cleanshot-scrolling-capture.sh) | Capture any scrollable content. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/self-timer.png\" width=\"20\" height=\"20\"> | [Self-Timer](apps/cleanshot/cleanshot-self-timer.sh) | Take a screenshot after a specified delay to capture the perfect moment. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/cleanshot/./images/toggle-desktop-icons.png\" width=\"20\" height=\"20\"> | [Toggle Desktop Icons](apps/cleanshot/cleanshot-toggle-desktop-icons.sh) | Hide clutter on your Desktop. | [CleanShot X](https://twitter.com/CleanShot_app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Craft\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/craft/./images/craft.png\" width=\"20\" height=\"20\"> | [Create Doc](apps/craft/craft-create-doc.template.sh) | Creates a doc in Craft | [James Lyons](https://github.com/jamesjlyons) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/craft/./images/craft.png\" width=\"20\" height=\"20\"> | [Search in Workspace](apps/craft/craft-search-workspace.template.sh) | Searches in Workspace in Craft | [James Lyons](https://github.com/jamesjlyons) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### DND Me\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🔕 | [Start DND](apps/dnd-me/start-dnd-me.sh) | Starts DND via DND Me. The parameter has to be a menu item or slider equivalent: 15m, 30m, 1h, 2h, ..., 12h, next, next-hour, next-half-hour; it defaults to next. next-hour means the next 60m mark, next-half-hour means the next 30m mark and next means the first of the two. For example, if it's 9:22, next-hour means 10:00, next-half-hour means 9:30 and next means 9:30. | [Roland Leth](https://runtimesharks.com/projects/dnd-me) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔔 | [Stop DND](apps/dnd-me/stop-dnd-me.sh) | Stops DND via DND Me. | [Roland Leth](https://runtimesharks.com/projects/dnd-me) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Deepl\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/deepl/images/deepl.png\" width=\"20\" height=\"20\"> | [DeepL App Translate](apps/deepl/deepl-app-translate.applescript) | Translate text in DeepL for Mac. Features options to input from the clipboard as well as automatically copy translation results. | [Jono Hewitt](https://github.com/jonohewitt) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/deepl/images/deepl.png\" width=\"20\" height=\"20\"> | [DeepL Web Translate](apps/deepl/deepl-web-translate.sh) | Translate text on the DeepL website. Translates to a default language if no \"to\" argument is given. | [Jono Hewitt](https://github.com/jonohewitt) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Devutils\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Backslash Escape/Unescape](apps/devutils/backslash.sh) | Escape (or unescape) backslashes in your current clipboard string | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Base64 Image Encode/Decode](apps/devutils/base64image.sh) | Decode the Base64 string in clipboard to an image (if it’s decodable) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Base64 String Encode/Decode](apps/devutils/base64encode.sh) | Decode the Base64 string in clipboard (if it’s decodable) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [CSS Beautify/Minify](apps/devutils/cssformatter.sh) | Beautify or minify your current clipboard as CSS | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [CSV to JSON](apps/devutils/csv2json.sh) | Convert your current clipboard from CSV to JSON | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Cron Job Parser](apps/devutils/cronparser.sh) | Parse the cron job expression in clipboard (if it’s a valid cron expression) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [ERB Beautify/Minify](apps/devutils/erbformatter.sh) | Beautify or minify your current clipboard as ERB | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [HTML Beautify/Minify](apps/devutils/htmlformatter.sh) | Beautify or minify your current clipboard as HTML | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [HTML Entity Encode/Decode](apps/devutils/htmlencode.sh) | Escape (or unescape) the HTML entities your current clipboard string | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [HTML Preview](apps/devutils/htmlpreview.sh) | Show a HTML preview of your current clipboard string | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [HTML to JSX](apps/devutils/html2jsx.sh) | Convert the HTML string in clipboard to JSX | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Hash Generator](apps/devutils/hashing.sh) | Calculate the hash of your current clipboard string | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [JS Beautify/Minify](apps/devutils/jsformatter.sh) | Beautify or minify your current clipboard as JavaScript | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [JSON Format/Validate](apps/devutils/jsonformatter.sh) | Format the JSON string currently in your clipboard (if it’s a valid JSON) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [JSON to CSV](apps/devutils/json2csv.sh) | Convert your current clipboard from JSON to CSV | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [JSON to YAML](apps/devutils/json2yaml.sh) | Convert your current clipboard from JSON to YAML | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [JWT Debugger](apps/devutils/jwt.sh) | Decode and verify the current JWT token in your clipboard | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [LESS Beautify/Minify](apps/devutils/lessformatter.sh) | Beautify or minify your current clipboard as LESS | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Lorem Ipsum Generator](apps/devutils/loremipsum.sh) | Get some randomly generated lorem ipsum strings | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Markdown Preview](apps/devutils/markdownpreview.sh) | Preview the markdown string currently in your clipboard | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Number Base Converter](apps/devutils/numberbase.sh) | Convert numbers between bases (oct, hex, binary, etc.) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [QR Code Reader/Generator](apps/devutils/qrcode.sh) | Generate a QR code from your current clipboard string | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [RegExp Tester](apps/devutils/regextester.sh) | Test your regular expression with a string and inspect matches, groups, etc. | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [SCSS Beautify/Minify](apps/devutils/scssformatter.sh) | Beautify or minify your current clipboard as SCSS | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [SQL Formatter](apps/devutils/sqlformatter.sh) | Format the SQL string currently in your clipboard | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [String Case Converter](apps/devutils/stringcaseconverter.sh) | Convert a string in clipboard into various naming conventions | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [String Inspector](apps/devutils/stringinspect.sh) | Inspect your current clipboard string (length, words count, unicode, etc.) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Text Diff Checker](apps/devutils/textdiff.sh) | Compare two texts and find diff (per characters, words, lines, etc.) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [URL Encode/Decode](apps/devutils/urlencode.sh) | Decode the current URL string in your clipboard (if any) | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [URL Parser](apps/devutils/querystringparser.sh) | Parse the URL string currently in your clipboard | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [UUID/ULID Generate/Decode](apps/devutils/uuidtool.sh) | Decode the UUID in your clipboard (if any), or generate UUIDs | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [Unix Time Converter](apps/devutils/unixtime.sh) | Parse and display UNIX the timestamp string currently in your clipboard | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [XML Beautify/Minify](apps/devutils/xmlformatter.sh) | Beautify or minify your current clipboard as XML | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/devutils/images/devutils.png\" width=\"20\" height=\"20\"> | [YAML to JSON](apps/devutils/yaml2json.sh) | Convert your current clipboard from YAML to JSON | [DevUtils.app](https://devutils.app) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Dictionary\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Look up in Dictionary](apps/dictionary/look-up-in-dictionary.applescript) | Look up selected text in Dictionary | [yayiji](https://github.com/yayiji) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Downie\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/downie/images/downie.png\" width=\"20\" height=\"20\"> | [Download Video](apps/downie/download-video.sh) | Download video from Pasteboard link | [Clu Soh](https://twitter.com/designedbyclu) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Espanso\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Create Text Expansion](apps/espanso/espanso-create-expansion.sh) | Add a text expansion to expanso | [Max Stoiber](https://github.com/mxstbr) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Disable Espanso](apps/espanso/disable-espanso.sh) | N/A | [es183923](https://github.com/es183923) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Enable Espanso](apps/espanso/enable-espanso.sh) | N/A | [es183923](https://github.com/es183923) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Restart Espanso](apps/espanso/restart-espanso.sh) | N/A | [es183923](https://github.com/es183923) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Start Espanso](apps/espanso/start-espanso.sh) | N/A | [es183923](https://github.com/es183923) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/espanso/images/espanso.png\" width=\"20\" height=\"20\"> | [Stop Espanso](apps/espanso/stop-espanso.sh) | N/A | [es183923](https://github.com/es183923) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Eudic\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/eudic/./images/eudic.png\" width=\"20\" height=\"20\"> | [Look up Word](apps/eudic/look-up-in-eudic.applescript) | look up in eudic | [jingyi](https://jingyi.blog) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Evernote\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/evernote/./images/evernote.png\" width=\"20\" height=\"20\"> | [Create Evernote](apps/evernote/create-note.applescript) | Creates a new Evernote. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/evernote/./images/evernote.png\" width=\"20\" height=\"20\"> | [Create Evernote Paste Clipboard](apps/evernote/create-note-paste-clipboard.applescript) | Creates a new Evernote, pastes in the contents of the clipboard, and positions the cursor in the title area. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### ExpressVPN\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Connect](apps/expressvpn/expressvpn-connect.applescript) | N/A | [Amir Hossein SamadiPour](https://github.com/SamadiPour) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  |  | [Disconnect](apps/expressvpn/expressvpn-disconnect.applescript) | N/A | [Amir Hossein SamadiPour](https://github.com/SamadiPour) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  |  | [Reconnect](apps/expressvpn/expressvpn-reconnect.applescript) | N/A | [Amir Hossein SamadiPour](https://github.com/SamadiPour) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Fantastical\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/fantastical/./images/fantastical.png\" width=\"20\" height=\"20\"> | [Create Event](apps/fantastical/create-event.applescript) | Create an event in Fantastical | [Robert Cooper](https://github.com/robertcoopercode) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/fantastical/./images/fantastical.png\" width=\"20\" height=\"20\"> | [Create Task](apps/fantastical/create-todo-in-fantastical.applescript) | Speed up setting reminders for Fantastical by invoking this script. | [Vardan Sawhney](https://github.com/commai) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Ferdi\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/ferdi/images/ferdi.png\" width=\"20\" height=\"20\"> | [Open Service by Index](apps/ferdi/ferdi-open-service-by-index.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/ferdi/images/ferdi.png\" width=\"20\" height=\"20\"> | [Open Service by Name](apps/ferdi/ferdi-open-service-by-name.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Find My\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/find-my/images/find-my-icon.png\" width=\"20\" height=\"20\"> | [Find My Phone (Auto Sound)](apps/find-my/fmp.js) | N/A | Raycast |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n#### Focus\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Open Focus Preferences](apps/focus/focus-preferences.sh) | Open focus preferences. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Start 25 minutes Focus Session](apps/focus/focus-start-session-25.sh) | Start a 25 minutes focus session. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Start Custom Break](apps/focus/focus-start-custom-break.sh) | Start a custom break. If you don't enter any values, it uses the last break duration. | [Ernest Ojeh](https://github.com/namzo) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Start Custom Focus Session](apps/focus/focus-start-custom-session.sh) | Start a custom focus session. If you don't enter any values, it starts an untimed focus session. | [Ernest Ojeh](https://github.com/namzo) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Start Focus Session (Focus)](apps/focus/focus-start-session.sh) | Start an untimed focus session. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Stop Break (Unbreak)](apps/focus/focus-stop-break.sh) | Stop break and continues the current focus session. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Stop Focus Session (Unfocus)](apps/focus/focus-stop-session.sh) | Stop the current focus session. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Take 5 Minutes Break](apps/focus/focus-start-break-5.sh) | Take 5 minutes break. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/focus/images/focus-logo.png\" width=\"20\" height=\"20\"> | [Toggle Focus Session](apps/focus/focus-toggle-focus.sh) | Toggle between start session (untimed) and stop session. | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### GoodLinks\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Open Last Unread Link](apps/goodlinks/goodlinks-last-unread-link.sh) | Open the last unread link in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Open Link](apps/goodlinks/goodlinks-open-link.sh) | Open a link in the GoodLinks app | [Filip Chabik](https://github.com/hadret) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Open Random Unread Link](apps/goodlinks/goodlinks-random-unread-link.sh) | Open a random unread link in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Save Link](apps/goodlinks/goodlinks-save-link.sh) | Saves a new link to GoodLinks | [Filip Chabik](https://github.com/hadret) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Show Read List](apps/goodlinks/goodlinks-read-list.sh) | Show Read list in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Show Starred List](apps/goodlinks/goodlinks-starred-list.sh) | Show Starred list in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Show Tag](apps/goodlinks/goodlinks-tagged-links.sh) | Show links tagged with the specified tag in the GoodLinks app | [Filip Chabik](https://github.com/hadret) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Show Unread List](apps/goodlinks/goodlinks-unread-list.sh) | Show Unread list in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/goodlinks/images/goodlinks.png\" width=\"20\" height=\"20\"> | [Show Untagged List](apps/goodlinks/goodlinks-untagged-list.sh) | Show Untagged list in the GoodLinks app | [Filip Chabik](https://github.com/hadret) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### HazeOver\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/hazeover/images/hazeover.png\" width=\"20\" height=\"20\"> | [Set Intensity](apps/hazeover/hazeover-set-intensity.applescript) | Set dimming intensity of background windows. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/hazeover/images/hazeover.png\" width=\"20\" height=\"20\"> | [Toggle Dimming](apps/hazeover/hazeover-toggle-dimming.applescript) | Toggle dimming of all background windows. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Hyper\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/hyper/images/hyper.png\" width=\"20\" height=\"20\"> | [Run Shell Command](apps/hyper/hyper-run-shell-command.applescript) | Run a terminal using Hyper | [Eliot Hertenstein](https://github.com/eIiot) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Lungo\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/lungo/./images/lungo.png\" width=\"20\" height=\"20\"> | [Activate](apps/lungo/lungo-activate.sh) | Deactivate Lungo. | [Lungo](https://sindresorhus.com/lungo) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/lungo/./images/lungo.png\" width=\"20\" height=\"20\"> | [Deactivate](apps/lungo/lungo-deactivate.sh) | Deactivate Lungo. | [Lungo](https://sindresorhus.com/lungo) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/lungo/./images/lungo.png\" width=\"20\" height=\"20\"> | [Toggle](apps/lungo/lungo-toggle.sh) | Toggle Lungo. | [Lungo](https://sindresorhus.com/lungo) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Mail\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mail/./images/mail.png\" width=\"20\" height=\"20\"> | [CaptchaFromMail](apps/mail/copy-captcha-from-mail.py) | Copy the captcha from the emlx file. | [RealTong](https://raycast.com/RealTong) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 📧 | [Copy Foreground Mail Deeplink](apps/mail/copy-foreground-mail-deeplink.applescript) | Copies the foreground Mail deeplink | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Medo\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/medo/./images/medo.png\" width=\"20\" height=\"20\"> | [Add Task](apps/medo/add-task.sh) | Add a new task | [Aayush ](https://github.com/Aayush9029) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/medo/./images/medo.png\" width=\"20\" height=\"20\"> | [Medo Float](apps/medo/medo-float.sh) | Add a new task with priority  | [Aayush ](https://github.com/Aayush9029) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/medo/./images/medo.png\" width=\"20\" height=\"20\"> | [Medo Float Large](apps/medo/medo-float-large.sh) | Add a new task with priority  | [Aayush ](https://github.com/Aayush9029) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/medo/./images/medo.png\" width=\"20\" height=\"20\"> | [Medo Float Small](apps/medo/medo-float-small.sh) | Add a new task with priority  | [Aayush ](https://github.com/Aayush9029) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### MeetingBar\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/meetingbar/images/meetingbar.png\" width=\"20\" height=\"20\"> | [Create Meeting](apps/meetingbar/meetingbar-create-meeting.applescript) | Create a new meeting. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/meetingbar/images/meetingbar.png\" width=\"20\" height=\"20\"> | [Join Meeting](apps/meetingbar/meetingbar-join-meeting.applescript) | Join the ongoing or upcoming meeting. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### MenubarX\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/menubarx/images/menubarx_logo.png\" width=\"20\" height=\"20\"> | [Close Last Tab](apps/menubarx/close-last-menubarx-tab.sh) | Close last viewed tab in MenubarX | [Clu Soh](https://twitter.com/designedbyclu) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/menubarx/images/menubarx_logo.png\" width=\"20\" height=\"20\"> | [Open Tabs](apps/menubarx/open-tab-in-menubar.applescript) | Open X Tab in your menubar | [Clu Soh](https://twitter.com/designedbyclu) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/menubarx/images/menubarx_logo.png\" width=\"20\" height=\"20\"> | [Open in MenubarX](apps/menubarx/open-in-menubarx.sh) | Open Pasteboard link in MenubarX | [Clu Soh](https://twitter.com/designedbyclu) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Message\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/Message/images/Message.png\" width=\"20\" height=\"20\"> | [Copy Code](apps/Message/copycode.sh) | Copy verification code from a message. | [Fatpandac](https://github.com/Fatpandac) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Mullvad\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Connect](apps/mullvad/connect.sh) | Connect the Mullvad VPN tunnel using the most recent configuration settings. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Connect to Location](apps/mullvad/location.sh) | Connect the Mullvad VPN tunnel using the specified location. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Disconnect](apps/mullvad/disconnect.sh) | Disconnect from the Mullvad VPN tunnel. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Mullvad Status](apps/mullvad/status.sh) | Display the current status of the Mullvad VPN tunnel connection. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Reconnect](apps/mullvad/reconnect.sh) | Force the client to reconnect to the Mullvad VPN tunnel. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/mullvad/images/mullvad.png\" width=\"20\" height=\"20\"> | [Search Countries, Cities, and Hostnames](apps/mullvad/search.sh) | Search the list of available entities to which a Mullvad VPN tunnel connection can be made. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### NotePlan3\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/noteplan3/images/noteplan3.png\" width=\"20\" height=\"20\"> | [Append To Daily Note](apps/noteplan3/noteplan-append-daily-note.sh) | Append to daily note | [Göran Damberg](https://github.com/gdamberg) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/noteplan3/images/noteplan3.png\" width=\"20\" height=\"20\"> | [New Note From Clipboard](apps/noteplan3/noteplan-new-note-from-clipboard.sh) | Create a new note from clipboard | [Göran Damberg](https://github.com/gdamberg) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Notes\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/notes/./images/notes.png\" width=\"20\" height=\"20\"> | [Append Content From Clipboard](apps/notes/append-note-from-clipboard.applescript) | Script to append to an existing note content from clipboard. | [Ayoub Gharbi](https://github.com/ayoub-g) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/notes/./images/notes.png\" width=\"20\" height=\"20\"> | [Create Note](apps/notes/create-note.applescript) | Create a new Note  | [Vardan Sawhney](https://github.com/commai) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/notes/./images/notes.png\" width=\"20\" height=\"20\"> | [Create Note From Clipboard](apps/notes/create-note-from-clipboard.applescript) | Create Note From Clipboard | [Ayoub Gharbi](https://github.com/ayoub-g) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/notes/./images/notes.png\" width=\"20\" height=\"20\"> | [Open Note](apps/notes/open-note.applescript) | Open Note via its Title | [Vardan Sawhney](https://github.com/commai) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/notes/./images/notes.png\" width=\"20\" height=\"20\"> | [Search Note By Name](apps/notes/search-note-by-name.applescript) | This script searches for a note, given its exact name, or a substring, the search does not consider case | [Ayoub Gharbi](github.com/ayoub-g) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Obsidian\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/obsidian/./images/obsidian.png\" width=\"20\" height=\"20\"> | [Create Note](apps/obsidian/obsidian-create-note.template.sh) | Create a new note | [Yiyao Wei](https://github.com/HotThoughts) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/obsidian/./images/obsidian.png\" width=\"20\" height=\"20\"> | [Search in Vault](apps/obsidian/obsidian-search-vault.template.sh) | Search Obsidian Vault | [Yiyao Wei](https://github.com/HotThoughts) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### One Thing\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/one-thing/./images/one-thing.png\" width=\"20\" height=\"20\"> | [Clear Text](apps/one-thing/one-thing-clear-text.sh) | Clear the text shown in One Thing app. | [One Thing](https://sindresorhus.com/one-thing) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/one-thing/./images/one-thing.png\" width=\"20\" height=\"20\"> | [Set Text](apps/one-thing/one-thing-set-text.sh) | Set the text shown in One Thing app. | [One Thing](https://sindresorhus.com/one-thing) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### OpenVPN\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/openvpn/./images/openvpn.png\" width=\"20\" height=\"20\"> | [Connect OpenVPN](apps/openvpn/connect-openvpn.applescript) | Prepares OpenVPN Connect client to connect or reconnect. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/openvpn/./images/openvpn.png\" width=\"20\" height=\"20\"> | [Disconnect OpenVPN](apps/openvpn/disconnect-openvpn.applescript) | Disconnects the OpenVPN Connect client from VPN. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/openvpn/./images/openvpn.png\" width=\"20\" height=\"20\"> | [Quit OpenVPN](apps/openvpn/quit-openvpn.applescript) | Quits the OpenVPN Connect client. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### PhpStorm\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Update Recent Projects](apps/phpstorm/recent-projects.sh) | N/A | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Plash\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Add Website](apps/plash/plash-add-website.sh) | Add a website to Plash. | [Plash](https://github.com/sindresorhus/Plash) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Next Website](apps/plash/plash-next-website.sh) | Switch to the next website in the list in Plash. | [Plash](https://github.com/sindresorhus/Plash) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Previous Website](apps/plash/plash-previous-website.sh) | Switch to the previous website in the list in Plash. | [Plash](https://github.com/sindresorhus/Plash) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Reload Website](apps/plash/plash-reload-website.sh) | Reload the current website in Plash. | [Plash](https://github.com/sindresorhus/Plash) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Switch to Random Website](apps/plash/plash-random-website.sh) | Switch to a random website from the list of websites in Plash. | [Plash](https://github.com/sindresorhus/Plash) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/plash/./images/plash.png\" width=\"20\" height=\"20\"> | [Toggle Browsing Mode](apps/plash/plash-toggle-browser-mode.sh) | Toggle browsing mode in Plash. | [Plash](https://github.com/sindresorhus/Plash) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Playground\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🕊 | [Create Basic](apps/playground/open-new-playground.py) | Create and open a new basic Swift Playground | [Quentin Eude](https://github.com/qeude) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🕊 | [Create View Based](apps/playground/open-new-view-playground.py) | Create and open a new view based Swift Playground | [Quentin Eude](https://github.com/qeude) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Pulse Secure\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/pulse-secure/images/pulse-secure.png\" width=\"20\" height=\"20\"> | [Connect / Reconnect](apps/pulse-secure/pulse-secure-connect.applescript) | Connect to the given / default connection with the given / default username. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/pulse-secure/images/pulse-secure.png\" width=\"20\" height=\"20\"> | [Disconnect / Cancel](apps/pulse-secure/pulse-secure-disconnect.applescript) | Disconnect / cancel the active connection. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/pulse-secure/images/pulse-secure.png\" width=\"20\" height=\"20\"> | [Resume](apps/pulse-secure/pulse-secure-resume.applescript) | Resume the suspended connection. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/pulse-secure/images/pulse-secure.png\" width=\"20\" height=\"20\"> | [Suspend](apps/pulse-secure/pulse-secure-suspend.applescript) | Suspend the active connection. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Quip\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Set up Quip commands](apps/quip/set-up-quip-commands.py) | Create script commands for creating Quip documents, based on the configuration in quip_config.ini. | [diego_zamboni](https://raycast.com/diego_zamboni) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  |  | [{{commandtitle}}](apps/quip/quip-new.template.py) | Configure your Quip API token and other defaults in quip_config.ini | [zzamboni](https://raycast.com/zzamboni) | ✅ | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Raycast\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🎉 | [Celebrate](apps/raycast/celebrate.sh) | Set Confetti to run for a number of times and during intervals | [Fatpandac](https://github.com/Fatpandac) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Reminders\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/reminders/images/reminders.png\" width=\"20\" height=\"20\"> | [Add Reminder](apps/reminders/reminders-create-reminder.sh) | Add a new reminder. | [Andrei Nedelcu](https://dinosaurgame.net) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Safari\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Add Item to Reading List](apps/safari/safari-create-reading-list-item.applescript) | Add a new Reading List item with the given URL. Allows a custom title to be specified. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Clear Cache and Refresh Page](apps/safari/safari-clear-cache-reload.applescript) | This script clears cache and reloads the page of the frontmost Safari window. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Close All Tabs](apps/safari/safari-close-all-tabs.applescript) | Close all tabs in the frontmost window | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Close Duplicated Tabs](apps/safari/safari-close-duplicated-tabs.applescript) | Close tabs with the same URL. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Close Other Tabs](apps/safari/safari-close-other-tabs.applescript) | Close all tabs besides the currently active tab. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Close Tabs to the Left](apps/safari/safari-close-tabs-left.applescript) | Close all tabs to the left side of the currently active tab. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Close Tabs to the Right](apps/safari/safari-close-tabs-right.applescript) | Close all tabs to the right side of the currently active tab. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Download Current URL](apps/safari/safari-download-url.applescript) | Download the currently active tab's URL. | [Michael Bianco](https://github.com/iloveitaly) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Duplicate Tab](apps/safari/safari-duplicate-tab.applescript) | Duplicates and opens the currently active tab. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Open Bing with Edge User-Agent](apps/safari/safari-bing-edge-user-agent.applescript) | Open Bing in Safari with Edge User-Agent | [smxl](https://github.com/smxl) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Open Safari URL in Chrome](apps/safari/safari-current-page-url-in-chrome.applescript) | Open current Safari URL in new tab in Chrome | [Dave Lehman](https://github.com/dlehman) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/safari/images/safari.png\" width=\"20\" height=\"20\"> | [Open Safari URL in Firefox](apps/safari/safari-current-page-url-in-firefox.applescript) | Open current Safari URL in new tab in Firefox | [Dave Lehman](https://github.com/dlehman) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Session\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/session/images/session.png\" width=\"20\" height=\"20\"> | [Abandon Session](apps/session/session-abandon.sh) | Starts a focus session in Session app | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/session/images/session.png\" width=\"20\" height=\"20\"> | [Finish Session](apps/session/session-finish.sh) | Finishes a focus session in Session app | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/session/images/session.png\" width=\"20\" height=\"20\"> | [Pause Session](apps/session/session-pause.sh) | Starts a focus session in Session app | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/session/images/session.png\" width=\"20\" height=\"20\"> | [Start Previous Session](apps/session/session-start-previous.sh) | Starts a focus session in Session app with the previous intent and duration | [James Lyons](https://github.com/jamesjlyons) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/session/images/session.png\" width=\"20\" height=\"20\"> | [Start Session](apps/session/session-start-new.sh) | Starts a focus session in Session app | [James Lyons](https://github.com/jamesjlyons) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### SideNotes\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/sidenotes/images/sidenotes.png\" width=\"20\" height=\"20\"> | [SideNotes create](apps/sidenotes/sidenotes-create-note.applescript) | Create a new note within the selected or the first SideNotes folder. | [Marcel Bochtler](https://github.com/MarcelBochtler) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Sip\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/sip/./images/sip.png\" width=\"20\" height=\"20\"> | [ Add Color to History](apps/sip/sip-add-hex-color.sh) |  Add a color to your Sip history. | [Sip](https://twitter.com/sip_app/) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/sip/./images/sip.png\" width=\"20\" height=\"20\"> | [Check Contrast](apps/sip/sip-check-contrast-hex.sh) | Open Sip Contrast Checker. | [Sip](https://twitter.com/sip_app/) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/sip/./images/sip.png\" width=\"20\" height=\"20\"> | [Open Contrast Checker](apps/sip/sip-open-check-contrast.sh) | Open Sip Contrast Checker. | [Sip](https://twitter.com/sip_app/) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/sip/./images/sip.png\" width=\"20\" height=\"20\"> | [Show Color Picker](apps/sip/sip-show-picker.sh) | Pick a color value from your screen. | [Sip](https://twitter.com/sip_app/) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Stickies\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/stickies/images/stickies.png\" width=\"20\" height=\"20\"> | [New Floating Sticky Note](apps/stickies/new-floating-sticky.applescript) | This script creates a new floating note in the Apple Stickies application | [Annie Ma](http://www.anniema.co/) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Sublime\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://cdn.worldvectorlogo.com/logos/sublime-text.svg\" width=\"20\" height=\"20\"> | [Open with Sublime](apps/sublime/open-with-sublime.applescript) | Open currently focused directory in Sublime | [Rock Hu](https://twitter.com/0xRock) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Surfshark\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/surfshark/images/surfshark.png\" width=\"20\" height=\"20\"> | [Surfshark VPN Status](apps/surfshark/surfshark-vpn-status.sh) | Get Surfshark VPN status | [Jordi Clement](https://github.com/jordicl) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/surfshark/images/surfshark.png\" width=\"20\" height=\"20\"> | [VPN Connect](apps/surfshark/surfshark-vpn-start.sh) | Start Surfshark VPN connection | [Jordi Clement](https://github.com/jordicl) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/surfshark/images/surfshark.png\" width=\"20\" height=\"20\"> | [VPN Disconnect](apps/surfshark/surfshark-vpn-stop.sh) | Stop Surfshark VPN connection | [Jordi Clement](https://github.com/jordicl) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Tailscale\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-icon.png\" width=\"20\" height=\"20\"></picture> | [Connect](apps/tailscale/tailscale-connect.sh) | Connects to Tailscale | [Ross Zurowski](https://github.com/rosszurowski) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-icon.png\" width=\"20\" height=\"20\"></picture> | [Disconnect](apps/tailscale/tailscale-disconnect.sh) | Disconnects from Tailscale | [Ross Zurowski](https://github.com/rosszurowski) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-icon.png\" width=\"20\" height=\"20\"></picture> | [Get IP](apps/tailscale/tailscale-ip.sh) | Gets your private Tailscale IP | [Ross Zurowski](https://github.com/rosszurowski) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tailscale/./images/tailscale-icon.png\" width=\"20\" height=\"20\"></picture> | [Switch Account](apps/tailscale/tailscale-switch.sh) | Switches Tailscale networks | [Ross Zurowski](https://github.com/rosszurowski) and [Daniel Schoemer](https://github.com/quatauta) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Terminal Translate\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📖 | [Translate](apps/terminal-translate/translate.sh) | Translate word or sentence. | [Fatpandac](https://github.com/Fatpandac) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Things\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/things/images/things.png\" width=\"20\" height=\"20\"> | [Create To-Do](apps/things/things-create-todo.sh) | Create a new To-Do with title and optional deadline. | [Things](https://twitter.com/culturedcode/) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/things/images/things.png\" width=\"20\" height=\"20\"> | [Current To-Do](apps/things/things-current-todo.applescript) | Show your current To-Do to stay focused. | [Things](https://twitter.com/culturedcode/) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/things/images/things.png\" width=\"20\" height=\"20\"> | [Search To-Dos](apps/things/things-search-to-dos.sh) | Search To-Dos with a query. | [Things](https://twitter.com/culturedcode/) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/things/images/things.png\" width=\"20\" height=\"20\"> | [Today](apps/things/things-today.applescript) | Get an overview of your completed tasks for today. | [Things](https://twitter.com/culturedcode/) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Timing\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/timing/images/timing-logo.png\" width=\"20\" height=\"20\"> | [Start Timer](apps/timing/timing-start-timer.js) | Start a timer | [Landen Danyluk](https://github.com/landendanyluk) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/timing/images/timing-logo.png\" width=\"20\" height=\"20\"> | [Stop Timer](apps/timing/timing-stop-timer.js) | Stop the active timer | [Landen Danyluk](https://github.com/landendanyluk) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Todoist\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/todoist/images/todoist-logo.png\" width=\"20\" height=\"20\"> | [Create Task](apps/todoist/create-task.template.sh) | Create Task | [Faris Aziz](https://github.com/farisaziz12) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/todoist/images/todoist-logo.png\" width=\"20\" height=\"20\"> | [Get Tasks](apps/todoist/get-tasks.template.sh) | Gets All Todoist tasks | [Faris Aziz](https://github.com/farisaziz12) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Translate Shell\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🌍 | [Translate Shell](apps/translate-shell/translate-shell-language-pair.py) | Translate text using translate-shell. | [Marcel Bochtler](https://github.com/MarcelBochtler) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 📖 | [Translate to EN](apps/translate-shell/translate-to-en.sh) | Translate and copy brief translation to clipboard. | [tiancheng92](https://github.com/tiancheng92) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📖 | [Translate to ZH](apps/translate-shell/translate-to-zh.sh) | Translate and copy brief translation to clipboard. | [tiancheng92](https://github.com/tiancheng92) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Trello\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/trello/./images/logo.png\" width=\"20\" height=\"20\"> | [Create Card](apps/trello/create-trello-card.template.py) | Create a new Trello card | [Michael Francis](https://github.com/mikefrancis) | ✅ | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### TunnelBlick\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tunnelblick/images/tunnelblick.png\" width=\"20\" height=\"20\"> | [Tunnelblick: Connect](apps/tunnelblick/tunnelblick-connect.applescript) | Connect a VPN configuration. | [Achille Lacoin](https://github.com/pomdtr) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tunnelblick/images/tunnelblick.png\" width=\"20\" height=\"20\"> | [Tunnelblick: Connect All](apps/tunnelblick/tunnelblick-connect-all.applescript) | Connect all unconnected VPN configurations. | [Achille Lacoin](https://github.com/pomdtr) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tunnelblick/images/tunnelblick.png\" width=\"20\" height=\"20\"> | [Tunnelblick: Disconnect](apps/tunnelblick/tunnelblick-disconnect.applescript) | Disconnect a VPN configuration. | [Achille Lacoin](https://github.com/pomdtr) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/tunnelblick/images/tunnelblick.png\" width=\"20\" height=\"20\"> | [Tunnelblick: Disconnect All](apps/tunnelblick/tunnelblick-disconnect-all.applescript) | Disconnect all connected VPN configurations. | [Achille Lacoin](https://github.com/pomdtr) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Viscosity\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/viscosity/images/viscosity.png\" width=\"20\" height=\"20\"> | [Viscosity: Connect](apps/viscosity/viscosity-connect.applescript) | Connect a VPN viscosity configuration. | [Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)](https://github.com/lcardito) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/viscosity/images/viscosity.png\" width=\"20\" height=\"20\"> | [Viscosity: Connect All](apps/viscosity/viscosity-connect-all.applescript) | Connect all unconnected VPN configurations. | [Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)](https://github.com/lcardito) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/viscosity/images/viscosity.png\" width=\"20\" height=\"20\"> | [Viscosity: Disconnect](apps/viscosity/viscosity-disconnect.applescript) | Disconnect a VPN configuration. | [Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)](https://github.com/lcardito) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/viscosity/images/viscosity.png\" width=\"20\" height=\"20\"> | [Viscosity: Disconnect All](apps/viscosity/viscosity-disconnect-all.applescript) | Disconnect all connected VPN configurations. | [Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)](https://github.com/lcardito) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### WARP\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/warp/images/warp.png\" width=\"20\" height=\"20\"> | [Connect](apps/warp/warp-start.sh) | Create a connection to WARP | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/warp/images/warp.png\" width=\"20\" height=\"20\"> | [Disconnect](apps/warp/warp-stop.sh) | Disconnect from WARP | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/warp/images/warp.png\" width=\"20\" height=\"20\"> | [Reauthenticate](apps/warp/warp-reauth.sh) | Force WARP reauthentication | [Daniils Petrovs](https://github.com/danirukun) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/warp/images/warp.png\" width=\"20\" height=\"20\"> | [Toggle WARP](apps/warp/warp-toggle.sh) | Toggle Connection | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/warp/images/warp.png\" width=\"20\" height=\"20\"> | [WARP Status](apps/warp/warp-status.sh) | Check WARP connection | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### WebStorm\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/webstorm/images/webstorm.png\" width=\"20\" height=\"20\"> | [Open](apps/webstorm/open-workspace.template.sh) | Open WebStorm projects | [Daniel Stovv](https://github.com/stovv) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Wikipedia\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/wikipedia/images/wikipedia.png\" width=\"20\" height=\"20\"> | [Wikipedia Search](apps/wikipedia/wikipedia-search.py) | Search Wikipedia and display the result in Raycast | [Juan I. Serra](https://twitter.com/jiserra) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Y Pomodoro\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🍅 | [Pause](apps/y-pomodoro/pause.sh) | Pause active pomodoro timer using  [y-pomodoro](https://github.com/jesse-c/y-pomodoro) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Resume](apps/y-pomodoro/resume.sh) | Resume active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Show](apps/y-pomodoro/show.sh) | Show active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Start](apps/y-pomodoro/start.sh) | Start a pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Stop](apps/y-pomodoro/stop.sh) | Stop active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### iTerm\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🤖 | [Open profile](apps/iterm/iterm-open-profile-in-new-window.applescript) | N/A | [sunrisewestern](https://github.com/sunrisewestern) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/apps/iterm/images/iterm.png\" width=\"20\" height=\"20\"> | [Run Shell Command](apps/iterm/iterm-run-shell-command.applescript) | N/A | [Andrei Borisov](https://github.com/andreiborisov) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### iconsur\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🅱️ | [Change Application Icon](apps/iconsur/iconsur.sh) | Change App icons to match Big Sur | [StevenRCE0](https://github.com/StevenRCE0) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Browsing\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🐔 | [Convert Twitter to Nitter](browsing/convert-twitter-to-nitter.js) | Convert Twitter link to Nitter | [cSharp](https://github.com/noidwasavailable) |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🧭 | [Copy Current Page URL](browsing/safari-current-page-url.sh) | This script copies URL of currently opened page in Safari into clipboard. | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧭 | [Copy Current Page URL](browsing/chrome-current-page-url.sh) | This script copies URL of currently opened page in Google Chrome into clipboard. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧭 | [Copy Current Window URLs](browsing/safari-current-window-urls.applescript) | This script copies to clipboard all URLs from frontmost Safari window. | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/browsing/./images/shlink.png\" width=\"20\" height=\"20\"> | [Create Short URL](browsing/shlink-create-short-url.template.sh) | Create a short URL using Shlink | [Eliot Hertenstein](https://github.com/eIiot) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🥽 | [Current Website to Private Browser](browsing/to-private-browsing.sh) | Open the current site in a private browser | [raulanatol](https://github.com/raulanatol) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/browsing/images/outline.png\" width=\"20\" height=\"20\"> | [Go to Outline](browsing/go-to-outine.sh) | Open the website at Outline | [Ronan Rodrigo Nunes](https://ronanrodrigo.dev) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [New Browser Window](browsing/new-browser-window.sh) | Open new window in default browser | [Levi Nelson](https://github.com/LeviticusNelson) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📚 | [Open Multiple Websites on Safari](browsing/open-multiple-websites-on-safari.template.sh) | Open multiple websites on Safari using list of URLs | [Yasutaka Nishii](https://github.com/ystknsh) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Open in guest profile](browsing/open-in-guest-profile.sh) | Open current website in guest profile/mode | [JD Solanki](https://github.com/jd-solanki) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/browsing/images/chrome-icon.png\" width=\"20\" height=\"20\"> | [Open without CORS](browsing/open-chrome-without-cors.sh) | Open chrome with web security option disabled. | [Tahsin Yazkan](https://github.com/thsnyzkn) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/browsing/images/peekalink-logo.png\" width=\"20\" height=\"20\"> | [Peek a link](browsing/peekalink.template.sh) | Use [Peekalink.io](https://peekalink.io) API to peek specified URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🖼️ | [Screenshot Website](browsing/website-screenshots.sh) | Takes screenshots of the entered URL using [`pageres`](https://github.com/sindresorhus/pageres) and saves it to the Desktop. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Shorten URL From Clipboard](browsing/shorten-url.sh) | Shorten the URL in your Clipboard with Tiny URL. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/browsing/images/git-io.png\" width=\"20\" height=\"20\"> | [Shorten URL from GitHub](browsing/git-io.sh) | Shorten any github.com URL | [Astrit](https://github.com/astrit) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Shorten URL with Bitly](browsing/shorten-url-bitly.template.sh) | Transform the clipboard contents to a short Bitly URL | [Nitin Gupta](https://twitter.com/gniting) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Shorten URL with Emojis](browsing/short-url-emoji.sh) | Transform the clipboard contents to a short Emoji URL | [Samuel Henry](https://bne.sh) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📹 | [Youtube Shorts in video player](browsing/Youtube Shorts in video player.sh) | Opens current Youtube Shorts video in the normal video player by replacing \"/shorts/\" with \"/v/\" in the url. | [Kailash Yellareddy](https://github.com/kyellareddy) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n## Communication\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🔐 | [2FA from iMessages](communication/imessage-2fa.sh) | Get most recent two-factor authentication code from iMessages. | [Caleb Stauffer](https://github.com/crstauf) and [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📱 | [Call with iPhone](communication/call-with-iphone.sh) | Place a telephone call via your iPhone on Wi-Fi. | [Alexander JH Steffen](https://github.com/alexjsteffen) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔐 | [Generate Passphrase](communication/xkcdpass.sh) | Use [xkcdpass](https://github.com/redacted/XKCD-password-generator) to create a passphrase. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤡 | [Let Me Google That](communication/let-me-google-that.sh) | Let Me Google That For You | [Leo Fritsch](https://github.com/leofritsch) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🗣 | [Say](communication/say.sh) | Convert text to audible speech. | [Felipe Turcheti](https://felipeturcheti.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/images/doppler-logo.png\" width=\"20\" height=\"20\"> | [Share Secret from Clipboard](communication/share-secret-doppler.py) | Share secret securely using https://share.doppler.com/. | [Petr Nikolaev](https://github.com/PitNikola) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Cloudup\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/cloudup/images/cloudup-logo.png\" width=\"20\" height=\"20\"> | [Paste](communication/cloudup/cloudup-paste.sh) | Upload clipboard contents to [Cloudup](https://cloudup.com/). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/cloudup/images/cloudup-logo.png\" width=\"20\" height=\"20\"> | [Pick](communication/cloudup/cloudup-pick.sh) | Open file dialog and upload to [Cloudup](https://cloudup.com/). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/cloudup/images/cloudup-logo.png\" width=\"20\" height=\"20\"> | [Upload](communication/cloudup/cloudup-upload.sh) | Upload path or URL in clipboard to [Cloudup](https://cloudup.com/). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### DuckDuckGo Email Protection\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/duckduckgo-email-protection/images/duckduckgo_logo.png\" width=\"20\" height=\"20\"> | [Configure](communication/duckduckgo-email-protection/configure-@duck.com-script-command.applescript) | Use this script command to configure your @duck.com authorizationID | [Rediwed](github.com/Rediwed) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/duckduckgo-email-protection/images/duckduckgo_logo.png\" width=\"20\" height=\"20\"> | [Generate Unique Address](communication/duckduckgo-email-protection/generate-unique-email-address.applescript) | This script command generates a unique private @duck.com email address. | [Rediwed](github.com/Rediwed) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Emojis\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🎲 | [Random Emoji](communication/emojis/random-emoji.sh) | Copy a random emoji to the clipboard. | [Tomohiro Nishimura](https://github.com/Sixeight) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📙 | [Search Emojis](communication/emojis/emojis-search.sh) | Search for emojis related to input. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📙 | [Search and Copy First Related Emoji](communication/emojis/emoji-copy.sh) | Copy first emoji related to input. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Gmail\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/gmail/images/google-gmail-logo.png\" width=\"20\" height=\"20\"> | [Gmail](communication/gmail/google-gmail.sh) | Open gmail.com in the default browser | [Michael Aigner](https://github.com/tonka3000) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Google Meet\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/google-meet/images/logo.png\" width=\"20\" height=\"20\"> | [Open Google Meet](communication/google-meet/meet.sh) | Start a Google Meet session | [Mujib Azizi](https://github.com/mujibazizi) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Mail\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ✉️ | [Open Most Recent Email](communication/mail/open-most-recent-email.applescript) | Open the last received email in your inbox in Mail.app | [Ben Yoon](https://github.com/benyn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Messenger\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/messenger/images/messenger.png\" width=\"20\" height=\"20\"> | [Open Conversation](communication/messenger/messenger-open-conversation.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Slack\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ⏰ | [Add Reminder](communication/slack/add-slack-reminder.template.sh) | Create a Slack reminder | [Zeb Pykosz](https://github.com/zebapy) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Clear Slack DND](communication/slack/clear-slack-DND-status.sh) | Clear DND Status in Slack | [Sam Ching](https://github.com/samching) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧼 | [Clear Status](communication/slack/clear-slack-status.template.sh) | Clear your status in Slack. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Jump to...](communication/slack/slack-jump-to.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Launch Dev Mode](communication/slack/slack-dev-mode.sh) | Open Slack with the Developer Menu enabled. ⌘⌥I to access the Developer Menu. If you find it's not working, quit Slack and run this command again. | [Cody Carrell](https://raycast.com/sourcecody) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Open Workspace by Index](communication/slack/slack-open-workspace-by-index.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Open Workspace by Name](communication/slack/slack-open-workspace-by-name.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Send Message in Channel](communication/slack/slack-send-message.applescript) | This script posts a message text to a slack channel and sets active status (defaults to random good morning message in #general) | [Faris Aziz](https://github.com/farisaziz12) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Set DND Status](communication/slack/set-slack-DND-status.sh) | Set your DND status in Slack | [Sam Ching](https://github.com/samching) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Set Status in Slack to Spotify Song](communication/slack/set-slack-status-spotify.sh) | Set your status in Slack to a song currently playing in Spotify. | [alongat](https://github.com/alongat) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ☕️ | [Set Status to Coffee](communication/slack/set-slack-status.template.sh) | Set your status in Slack. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/slack/images/slack-logo.png\" width=\"20\" height=\"20\"> | [Set WFH Status in Slack](communication/slack/set-slack-wfh-status.sh) | Set your status in Slack to WFH or WFO depending on your WiFi | [alongat](https://github.com/alongat) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Zoom\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/zoom/images/zoom-logo.png\" width=\"20\" height=\"20\"> | [Leave Meeting](communication/zoom/leave-meeting.applescript) | Leaves Current Zoom meeting | [Faris Aziz](https://github.com/farisaziz12) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/zoom/images/zoom-logo.png\" width=\"20\" height=\"20\"> | [Rename Profile](communication/zoom/rename-profile.applescript) | Rename your profile in Zoom Meeting App (Mac Only) and cliclick. | [Leo Voon](https://github.com/leovoon) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/zoom/images/zoom-logo.png\" width=\"20\" height=\"20\"> | [Toggle Microphone](communication/zoom/toggle-mic.applescript) | Mute/Unmute your microphone in the current meeting | [Luigi Cardito](https://github.com/lcardito) and [Faris Aziz](https://github.com/farisaziz12) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/communication/zoom/images/zoom-logo.png\" width=\"20\" height=\"20\"> | [Toggle Video](communication/zoom/toggle-video.applescript) | Show/Hide your microphone in the current meeting | [Luigi Cardito](https://github.com/lcardito) and [Faris Aziz](https://github.com/farisaziz12) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n## Conversions\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📋 | [Clipboard to Markdown](conversions/clipboard-to-markdown.js) | Automatically take the content found in the clipboard and turn it into Markdown | [Alessandra Pereyra](https://github.com/alessandrapereyra) |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🎨 | [Color Conversion](conversions/color-conversion.sh) | Convert color formats (e.g. #FFEEFF -> rgba(255,238,255,1) | [quelhasu](https://github.com/quelhasu) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🗂 | [Column to Comma](conversions/column-to-comma.sh) | Converts column to comma separated list. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Convert Epoch to Human-Readable Date](conversions/epoch-to-human-date.sh) | Convert epoch to human-readable date. | [Siyuan Zhang](https://github.com/kastnerorz) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📋 | [Convert Google Docs Rich Text HTML to Markdown](conversions/google-docs-to-markdown.sh) | A script to take the HTML pastboard type filled by google docs and convert it to nicely formatted markdown | [Michael Bianco](https://github.com/iloveitaly) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Convert Human-Readable Date To Epoch](conversions/human-date-to-epoch.sh) | Convert human-readable date to timestamp epoch. | [Siyuan Zhang](https://github.com/kastnerorz) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔄 | [Convert Markdown to Telegram Format](conversions/markdown-to-telegram.py) | Convert Markdown formatting to Telegram format, excluding processing inside code blocks or quotes | [Maxim Borzov](https://github.com/borzov) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 📋 | [Convert Raw HTML to Rich Text on Clipboard](conversions/raw-html-to-rich-text-clipboard.sh) | This script will convert raw HTML on your clipboard to rich text. It requires pandoc to be installed on your system. | [Michael Bianco](https://github.com/iloveitaly) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📹 | [Create GIF from video](conversions/create-gif-from-video.py) | Create a GIF from video, by default it takes the last screen record video | [Quentin Eude](https://github.com/qeude) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🎨 | [Hex to RGB](conversions/hex-to-rgb.sh) | Convert hexadecimal color value to RGB value. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🎨 | [Hex to RGBA](conversions/hex-to-rgba.sh) | Convert hexadecimal color value to RGBA value. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧱 | [Markdown Table](conversions/create-markdown-table.js) | Create a markdown table template | [Ryan Nystrom](https://github.com/rnystrom) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 📋 | [OCR Image](conversions/clipboard-ocr.sh) | OCR Image from Clipboard | [xxchan](https://github.com/xxchan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📋 | [Paste and Match Style](conversions/paste-as-plain-text.applescript) | A script to click the \"Paste and Match Style\" menu item, even if it's disabled | [Michael Bianco](https://github.com/iloveitaly) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/images/qrcode.png\" width=\"20\" height=\"20\"> | [QR Code Generation](conversions/qrcode-generate.sh) | QR Code Generation | [wyhaya](https://github.com/wyhaya) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📝 | [Rich Text to Markdown](conversions/rich-text-clipboard-to-markdown.sh) | Convert rich text clipboard data to GitHub Flavored Markdown using Pandoc | [Adam Zethraeus](https://github.com/adam-zethraeus) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  |  | [Screenshot QR Code to Clipboard](conversions/qr-code-screenshot-to-text.sh) | Decode QR Code from screenshot to clipboard using https://qrserver.com/ | [Diego Lopes](https://github.com/Dihgg) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Simple Markdown Link Generator](conversions/inputs-to-markdown-link.sh) | Quickly and simply generate a markdown formatted link with your specified URL and title. | [atzzCokeK](https://github.com/atzzCokeK) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📝 | [Space Fixer](conversions/space-fixer.sh) | Add spaces between Chinese and English, number or symbols. | [RealTong](https://raycast.com/RealTong) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔠 | [Strikethrough Text](conversions/strikethrough.sh) | Converts given text (or clipboard if no argument) to t̶e̶x̶t̶ | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ✂️ | [Trim Newlines and Tabs](conversions/trim-newlines-tabs.sh) | Trim newlines and tabs from clipboard content. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🦸‍♀️ | [Unicode Superscript](conversions/unicode-superscript.sh) | Convert clipboards text to fake unicode superscript | [Adam Zethraeus](https://github.com/adam-zethraeus) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🕰 | [Unix Time Reader From Clipboard](conversions/unix-time-reader.sh) | Display Human-Readable Date from Unix Time in Clipboard | [Francis Feng](https://github.com/francisfeng) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌇 | [Vaporwave Text](conversions/vaporwave-text.sh) | Convert clipboard text to ｖａｐｏｒｗａｖｅ | [Adam Zethraeus](https://github.com/adam-zethraeus) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📅 | [What Day Is...](conversions/what-day-is.py) | Return the day of the week on which a particular date falls. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 👹 | [Zalgo Text](conversions/zalgo-text.swift) | Converts text to z̫̫̐a̳ͩl̓͂̀ͅg͔̚o̷̦̣͢ t̳͆ḛ̊͟ẍ̮̝́t̵̔ͯ͝ | [Adam Zethraeus](https://github.com/adam-zethraeus) | ✅ |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n\n#### Change Case\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/camelcase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/camelcase-light.png\" width=\"20\" height=\"20\"></picture> | [Camel Case](conversions/change-case/camelcase.py) | Change to clipboard text to camel case | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/kebabcase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/kebabcase-light.png\" width=\"20\" height=\"20\"></picture> | [Kebab Case](conversions/change-case/kebabcase.py) | Change to clipboard text to kebab case | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/lowercase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/lowercase-light.png\" width=\"20\" height=\"20\"></picture> | [Lowercase](conversions/change-case/lowercase.py) | Change clipboard text to lowercase | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/snakecase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/snakecase-light.png\" width=\"20\" height=\"20\"></picture> | [Snake Case](conversions/change-case/snakecase.py) | Change to clipboard text to snake case | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/titlecase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/titlecase-light.png\" width=\"20\" height=\"20\"></picture> | [Title Case](conversions/change-case/titlecase.py) | Change to clipboard text to title case | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/uppercase-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/conversions/change-case/./images/uppercase-light.png\" width=\"20\" height=\"20\"></picture> | [Uppercase](conversions/change-case/uppercase.py) | Change to clipboard text to uppercase | [Robert Cooper](https://github.com/robertcoopercode) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n## Culture\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🕌 | [Prayer Summary](culture/prayer-summary.template.sh) | Get the current and next prayer times for a specific city and country. | [Muneeb Ajaz](https://github.com/mianmuneebajaz) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🕌 | [Prayer Times](culture/prayer-times.sh) | Prayer Times grabbed from the aladhan.com. | [Emircan Erkul](https://emircanerkul.com) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Dashboard\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/bitcoin-logo.png\" width=\"20\" height=\"20\"> | [Bitcoin Price](dashboard/bitcoin-price-usd.sh) | Get current Bitcoin price from Coindesk. | [Tanguy Le Stradic](https://github.com/tanguyls) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💲 | [Check Usage of OpenAI API](dashboard/open-ai-usage.sh) | Get total usage of OpenAI API | [nagauta](https://github.com/nagauta) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💰 | [Crypto](dashboard/crypto-portfolio.py) | Gets crypto prices from Binance | [Manan Mehta](https://github.com/mehtamanan) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🌦️ | [Current Weather](dashboard/current-weather.sh) | Get current weather report from [wttr.in](https://wttr.in/). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/dogecoin-logo.png\" width=\"20\" height=\"20\"> | [DOGE Price](dashboard/doge.sh) | Checking DOGE coin price | [Clu Soh](https://github.com/designedbyclu) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/ethereum-logo.png\" width=\"20\" height=\"20\"> | [Ethereum Price](dashboard/ethereum-price-usd.sh) | Get current Ethereum price from CoinGecko. | [Clark Dinnison](https://github.com/cdinnison) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  |  | [Fear Index](dashboard/fear-index.sh) | Fear & Greed Index from CNN | [Astrit](https://github.com/astrit) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/precious-metals.png\" width=\"20\" height=\"20\"> | [Metals Price](dashboard/precious-metals.sh) | Retrieves the value of precious metals per 1 oz | [Stefan de Graaf](https://github.com/DBZFYAM) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/nextdns.png\" width=\"20\" height=\"20\"> | [NextDNS Status](dashboard/nextdns-status-check.py) | Check if this machine is using NextDNS. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🤖 | [SABnzbd Queue](dashboard/sabnzbd-queue-status.template.sh) | Show SABnzbd's queue status | [Jesse Claven](https://github.com/jesse-c) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/speedtest-logo.png\" width=\"20\" height=\"20\"> | [Speedtest](dashboard/speedtest.sh) | Test download and upload connection speed using [Speedtest](https://www.speedtest.net/apps/cli). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📈 | [Stocks](dashboard/stock-portfolio.rb) | Keep track of your stock portfolio. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | 📈 | [System Activity](dashboard/system-activity.sh) | N/A | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🚘 | [Tesla](dashboard/tesla.template.sh) | Get the status of your Tesla vehicle | [Mortada Sarheed](https://github.com/mSarheed) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/twitter.png\" width=\"20\" height=\"20\"> | [Twitter Statistics](dashboard/twitter-statistics.template.rb) | Shows the followers, favorites and friends count of your Twitter account. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | 🕐 | [World Time](dashboard/world-time.sh) | Show the time from elsewhere in the world | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Year Progress](dashboard/year-progress.sh) | See the year progress on your desktop. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/images/youtube.png\" width=\"20\" height=\"20\"> | [YouTube Statistics](dashboard/youtube-statistics.template.rb) | Shows YouTube Subscribers, Views and Videos | [Astrit](https://github.com/astrit) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n\n#### Countdowns\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🎅🏻 | [Countdown to Christmas](dashboard/countdowns/countdown-to-christmas.sh) | See how many days until Christmas. | [Valentin Chrétien](https://github.com/valentinchrt) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Countdown to Date](dashboard/countdowns/countdown-to-date.template.sh) | See how many days/hours until a specific date. | [Valentin Chrétien](https://github.com/valentinchrt) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Create Countdown](dashboard/countdowns/create-countdown.template.sh) | Create countdowns via Raycast. | [Valentin Chrétien](https://github.com/valentinchrt) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Firebase\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/firebase/images/firebase.png\" width=\"20\" height=\"20\"> | [Get Authorization Token](dashboard/firebase/firebase-authentication-get-token.template.sh) | Get token from Firebase Authentication service | [João Melo](https://github.com/joaopcm) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/dashboard/firebase/images/firebase.png\" width=\"20\" height=\"20\"> | [Get data from Firebase](dashboard/firebase/firebase-realtime-db-get-data.template.sh) | Get values from Firebase Realtime Database | [Marek Mašek](https://github.com/marekmasek) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Mood Meter\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ☕️ | [Add Mood](dashboard/mood-meter/add-mood.js) | Add mood value to current or specified date  | [Federico Miraglia](https://github.com/Mitra98t) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | ☕️ | [Display Mood Month](dashboard/mood-meter/display-mood-month.js) | Displays month mood table  | [Federico Miraglia](https://github.com/Mitra98t) |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | ☕️ | [Display Mood Year](dashboard/mood-meter/display-mood-year.js) | Displays year mood table  | [Federico Miraglia](https://github.com/Mitra98t) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n#### Open Weather\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ⛅️ | [Current Weather](dashboard/open-weather/weather-current.template.sh) | Get current weather from OpenWeather | [Marek Mašek](https://github.com/marekmasek) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⛅️ | [Weather Forecast](dashboard/open-weather/weather-forecast.template.sh) | Get weather forecast from OpenWeather | [Marek Mašek](https://github.com/marekmasek) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Dashboards\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 💾 | [Speed Test](dashboards/iperf-speed-test.template.sh) | Runs an iPerf Speed Test. | [Sam Wright](https://raycast.com/samywamy10) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Developer Utils\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🔑 | [Add SSH Keys (with Terminal)](developer-utils/add-ssh-keys.template.applescript) | Add one or multiple SSH keys to your SSH agent (with Terminal). | [Caleb Stauffer](https://github.com/crstauf) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🤖 | [Base Converter](developer-utils/base-converter.sh) | Utility to convert numbers between bases. Can be one number or a list of string-delimited numbers. | [Saimir S.](https://www.saimirsulaj.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔓 | [Base64 Decode](developer-utils/base64-decode-input.sh) | Decode the base64 string  | [Bin Hua](https://github.com/hzb) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔐 | [Base64 Encode](developer-utils/base64-encode-input.sh) | Encode any text data by using base64 | [Bin Hua](https://github.com/hzb) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Check Domain](developer-utils/check-domain.template.sh) | Check the availability of a domain with the Vercel API. | [Ted Spare](https://y.at/🤘🐊🗿🚀) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧹 | [Clear All Related Junk](developer-utils/clear_xcode.sh) | This script clears all Xcode related junk. | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧹 | [Clear Derived Data](developer-utils/clear-derived-data.sh) | Clear the derived data of Xcode. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱️ | [Copy Current Epoch Unix Timestamp](developer-utils/unix-timestamp.sh) | Copy the current epoch Unix timestamp. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📁 | [Copy Focused Finder Window Path](developer-utils/copy-focused-finder-window-path.sh) | Copies full path of the currently focused Finder window | [Vishal Telangre](https://github.com/vishaltelangre) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📝 | [Copy Lorem Ipsum](developer-utils/lorem-ipsum.sh) | Copy one paragraph of Lorem Ipsum to clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔑 | [Copy SSH Public Key](developer-utils/copy-ssh-public-key.sh) | Copying the default SSH public key to the clipboard | [Angelos Michalopoulos](https://github.com/miagg) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Count Characters Bash](developer-utils/count-characters.sh) | Counts the characters of either the clipboard or the passed argument | es183923 | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤐 | [Create .gitignore](developer-utils/generate-git-ignore.sh) | Generates a .gitignore file via https://gitignore.io | [Roland Leth](https://runtimesharks.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/./images/ray-so.png\" width=\"20\" height=\"20\"> | [Create Image from Code](developer-utils/create-image-from-code.sh) | Create beautiful images of your code with https://ray.so | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Decode Base64](developer-utils/decode-base64.sh) | Decodes clipboard content to Base64 and copies it again. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/jwt-logo.png\" width=\"20\" height=\"20\"> | [Decode JWT](developer-utils/decode-jwt.sh) | Decodes JSON web token from the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Decode URL](developer-utils/decode-url.sh) | Decodes clipboard content url and copies it again. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⌨️ | [Delete Current Line](developer-utils/delete-current-line.applescript) | This script deletes the line at cursor position. | [Annie Ma](http://www.anniema.co/) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🌍 | [Dig](developer-utils/dig.sh) | Perform a dig command with the specified options | Tommaso Panozzo | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Encode Base64](developer-utils/encode-base64.sh) | Encodes clipboard content to Base64 and copies it again. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Encode URL](developer-utils/encode-url.sh) | Encodes clipboard content url and copies it again. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ℹ️ | [Error Info](developer-utils/error-info.sh) | Get info about Apple API errors | [Ronan Rodrigo Nunes](https://ronanrodrigo.dev) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Escape String for Shell](developer-utils/escape-shell-chars.sh) | Escapes shell character string and copies it again. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/flutter.png\" width=\"20\" height=\"20\"> | [Flutter Create Project](developer-utils/flutter-create.sh) | Creates A Flutter Project from Raycast | [Kabilan VS](https://github.com/KABILAN235) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/swift.png\" width=\"20\" height=\"20\"> | [Format Swift](developer-utils/format-swift.sh) | Use [swiftformat](https://github.com/nicklockwood/SwiftFormat) to format clipboard content. | [Dean Moore](https://github.com/moored) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/genpasswd-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/genpasswd.png\" width=\"20\" height=\"20\"></picture> | [Generate Password](developer-utils/genpasswd.py) | Generates an iOS style password | [everdrone](https://github.com/everdrone) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🔐 | [Generate Password](developer-utils/generate-password.sh) | Generates a random password and copies it to the clipboard. | [Sven Hofmann](https://github.com/hofmannsven) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Generate ULID](developer-utils/generate-ulid.sh) | Generates a ULID and copies it to the clipboard. | [David Molinero](https://github.com/doktor500) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Generate UUID](developer-utils/generate-uuid.sh) | Generates a UUID and copies it to the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🕐 | [Get TTFB (Time to First Byte)](developer-utils/get-ttfb.sh) | Get the TTFB (Time to First Byte) of a website | [Angelos Michalopoulos](https://github.com/miagg) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧹 | [Ignore Package Folders](developer-utils/ignore-package-folders-time-machine.template.sh) | Ignore package folders (node_modules, Pods, etc) from Time Machine backups. They might not be big in size (altough they do add up), but they usually have tens of thousands of files, making backups slower than they should be. Many files are worse than big files when copying. You can also add a Spotlight comment to each file, to easily be able to exclude the same folders from Spotlight indexing (disabled by default). | [Roland Leth](https://runtimesharks.com) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Is It Up?](developer-utils/is-it-up.sh) | Check if a website is up | [Jesse Claven](https://github.com/jesse-c) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/go.png\" width=\"20\" height=\"20\"> | [JSON to Go Struct](developer-utils/json-to-go-struct.sh) | Convert the copied JSON into a golang structure. | [tiancheng92](https://github.com/tiancheng92) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🛠 | [Join Clipboard Lines by Delimiter](developer-utils/join-lines.sh) | Join multiple lines of text from the clipboard into a single line, separated by a specified delimiter. | [decaylala](https://github.com/decaylala) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Json Stringify Text](developer-utils/json-stringify-text.js) | Get JSON-formatted text | Senthil Prabhu |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🔐 | [MD5 Hash](developer-utils/md5-hash.sh) | Hashing any text data by using MD5  | [Bin Hua](https://github.com/hzb) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/microlink.png\" width=\"20\" height=\"20\"> | [Microlink API](developer-utils/microlink.sh) | Microlink API integration | [Kiko Beats](https://github.com/kikobeats) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Open Deep Link](developer-utils/open-link-simulator.applescript) | Opens a URL inside the currently booted iOS Simulator. Can be used to open deeplinks | [Tomás Martins](https://github.com/tfmart) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🌐 | [Ping](developer-utils/ping.sh) | Ping an IP address or URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Ping Monitor](developer-utils/ping-monitor.template.sh) | Ping an IP address or URL on an interval. | [Caleb Stauffer](https://github.com/crstauf) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Prettify JSON](developer-utils/prettify-json.sh) | Pretty prints the JSON currently in the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Print TLDR doc](developer-utils/tldr.sh) | Print the tldr documentation for a command | [Achille Lacoin](https://github.com/pomdtr) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/cheat.png\" width=\"20\" height=\"20\"> | [Query cheat.sh](developer-utils/cheat.sh) | Query the cheat.sh service (https://github.com/chubin/cheat.sh). You can change the color style in the script. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📱 | [Record Simulator](developer-utils/record-simulator.sh) | Records simulator to Downloads folder | [Maxim Krouk](https://github.com/maximkrouk) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/run-bash-command.png\" width=\"20\" height=\"20\"> | [Run Command](developer-utils/run-bash-command.sh) | Run arbitrary bash command and return output in Raycast. | [Boyang Xu](https://github.com/BoyangMichael) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🛠 | [Run Command On Front Finder Window](developer-utils/run-command-in-finder.sh) | Runs the specified command in the path of the frontmost Finder window. | [Wesley Martin](https://github.com/itsmewes) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/pa11y-logo.png\" width=\"20\" height=\"20\"> | [Run Pa11y](developer-utils/pa11y.sh) | Run [Pa11y](https://github.com/pa11y/pa11y) web accessibility tool on specified path or URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔐 | [SHA1 Hash](developer-utils/sha1-hash.sh) | Hashing any text data by using SHA1  | [Bin Hua](https://github.com/hzb) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/images/ia-logo.jpg\" width=\"20\" height=\"20\"> | [Save URL to Wayback Machine](developer-utils/wayback-machine-save.sh) | Save URL to [Wayback Machine](https://web.archive.org/). | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔎 | [Search Script Command](developer-utils/search-script-command.sh) | Search for Script Commands available in the Raycast repository | [Thiago Holanda](https://twitter.com/tholanda) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔐 | [Strong Password Generator](developer-utils/strong-password-generator.sh) | Generate a strong password of requested character length | [Nitin Gupta](https://twitter.com/gniting) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🕒 | [Time Between Dates](developer-utils/time-between-dates.js) | Given two dates returns the time between them in multiple units of measure. | [Federico Miraglia](https://github.com/Mitra98t) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🕒 | [Time Calculator](developer-utils/time-calculator.js) | Add or Subtract specified amount of time from given date. | [Federico Miraglia](https://github.com/Mitra98t) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🔒 | [Toggle SSH SOCKS Tunnel](developer-utils/toggle_ssh_proxy_tunnel.template.sh) | Toggles an SSH SOCKS proxy tunnel on and off. | [Andrii Barabash](https://github.com/AndriiBarabash) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔠 | [Transform Case](developer-utils/transform-case.sh) | Transform the case of clipboard content. Defaults to lower case if no conversion type is specified. | [Nitin Gupta](https://twitter.com/gniting) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ✂ | [Trim Git Commit Hash](developer-utils/trim-git-commit-hash.sh) | Trim full git commit hash down to seven characters. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Unshorten URL](developer-utils/unshorten-url.sh) | Unshortens clipboard content url and copies the result again. | [Nikita Galaiko](https://github.com/ngalaiko) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📖 | [View Scripting Dictionary](developer-utils/view-scripting-dictionary.sh) | Opens the Scripting Dictionary for the given application, defaulting to the active application if none is provided. | [Stephen Kaplan](https://github.com/SKaplanOfficial) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Whois](developer-utils/whois.sh) | Whois of URL. | [Caleb Stauffer](https://github.com/crstauf) and [Ronan Rodrigo Nunes](https://ronanrodrigo.dev) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Aws\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🤖 | [Find AWS Region by IP](developer-utils/aws/whatismyregion.sh) | Copies the AWS IPv4 to the clipboard. | [Oğuzhan Yılmaz](https://github.com/c1982) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/aws/images/amazon-s3.png\" width=\"20\" height=\"20\"> | [S3 Download](developer-utils/aws/amazon-s3-download.sh) | Download from Amazon S3 via URL | [Chris Cook](https://github.com/zirkelc) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/aws/images/aws-sso-util.png\" width=\"20\" height=\"20\"> | [Single Sign-On](developer-utils/aws/aws-sso-util.sh) | Login to AWS using aws-sso-util | [David Molinero](https://github.com/doktor500) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Brew\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🍺 | [Cask Upgrade](developer-utils/brew/brew-cask-upgrade.sh) | Updates brew and upgrades every outdated app | [LanikSJ](https://github.com/LanikSJ) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Doctor](developer-utils/brew/brew-doctor.sh) | Run Brew Doctor | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Install a package](developer-utils/brew/brew-install.sh) | Installs specified brew package. | [Alex Zotov](https://github.com/lex4hex) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Leaves](developer-utils/brew/brew-leaves.sh) | Show list of installed brew formulae that are not dependencies of other installed formula. | [owpac](https://github.com/Owpac) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [List](developer-utils/brew/brew-list.sh) | Show Brew List | [chengzhiqi](https://twitter.com/1872Fate) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Outdated List](developer-utils/brew/brew-outdated.sh) | Show list of outdated formulae | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Restart Service](developer-utils/brew/brew-services-restart.sh) | Restart Service in Brew | [es183923](github.com/es183923) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Services List](developer-utils/brew/brew-services-list.sh) | Show Brew Services List | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Start Service](developer-utils/brew/brew-services-start.sh) | Start Service in Brew | [Thiago Holanda](https://twitter.com/tholanda) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Stop Service](developer-utils/brew/brew-services-stop.sh) | Stop Service in Brew | [Thiago Holanda](https://twitter.com/tholanda) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Uninstall](developer-utils/brew/brew-uninstall-application.sh) | Uninstalls an Specified Application Using Homebrew | [StevenRCE0](https://github.com/StevenRCE0) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Update](developer-utils/brew/brew-update.sh) | Run Brew Update | [chengzhiqi](https://twitter.com/1872Fate) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍺 | [Upgrade](developer-utils/brew/brew-upgrade.sh) | Run Brew Upgrade | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Cloudflare\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/cloudflare/images/cloudflare-logo.png\" width=\"20\" height=\"20\"> | [Purge Cloudflare cache](developer-utils/cloudflare/purge-cloudflare-cache.template.sh) | Purge Cloudflare cache for zone. | [Caleb Stauffer](https://github.com/crstauf) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Docker\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🧹 | [Clean](developer-utils/docker/clean-docker.sh) | Script that cleans Docker images, volumes, and containers | Quentin Eude |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/docker/images/docker.png\" width=\"20\" height=\"20\"> | [List Containers](developer-utils/docker/docker-ps.sh) | List containers in Docker | Sebastian Kroll |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/docker/images/docker.png\" width=\"20\" height=\"20\"> | [List Images](developer-utils/docker/docker-images.sh) | List images in Docker | Sebastian Kroll |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ▶️ | [Run](developer-utils/docker/run-docker.sh) | Runs a Docker container | Fabián Delgado | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏹️ | [Stop](developer-utils/docker/stop-docker.sh) | Stops a Docker container | Fabián Delgado | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/docker/images/docker.png\" width=\"20\" height=\"20\"> | [System Prune](developer-utils/docker/docker-system-prune.sh) | Remove unused data (system prune) | Sebastian Kroll |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Git\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Clear Changes](developer-utils/git/git-clear-changes.sh) | Clear all changes | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Save Changes](developer-utils/git/git-save-changes.sh) | Commit all pending changes. If no commit message is provided, it will amend the changes. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Standup](developer-utils/git/git-standup.sh) | Lists your commits from the last 24 hours. Optionally specify since when, e.g. \"1 week\". | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Status](developer-utils/git/git-status.sh) | Shows the status of your Git repository. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Switch Branch](developer-utils/git/git-switch-branch.sh) | Switch to a new branch. If not name was provided, it checks out the default branch. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/git/./images/git.png\" width=\"20\" height=\"20\"> | [Sync Changes](developer-utils/git/git-sync-changes.sh) | Pulls, rebases and pushes your changes. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### GitHub\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Create GitHub Gist from Clipboard](developer-utils/github/create-github-gist.template.sh) | Create a GitHub Gist from clipboard contents and copy Gist URL. | [Caleb Stauffer](https://github.com/crstauf) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [GitHub Contributions](developer-utils/github/github-contributions.template.sh) | Show GitHub user contributions from the current year | [Astrit](https://github.com/astrit) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/./images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/./images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Open Commit History](developer-utils/github/github-open-commit-history.sh) | Opens the commit history of the filepath in the clipboard or the frontmost window. Alternatively can open the file view on GitHub. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Open Pull Requests](developer-utils/github/github-open-pull-requests.template.rb) | Display number of open pull requests | [Faye Sipiano](https://github.com/FSipiano) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Open Pull Requests page](developer-utils/github/github-open-pull-requests-page.sh) | Open your GitHub pull requests page | [Faye Sipiano](https://github.com/FSipiano) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⭐️ | [Repository Statistics](developer-utils/github/github-repository-stars.template.rb) | Show statistics of your GitHub repository. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | ⭐️ | [Repository Statistics](developer-utils/github/github-repository-stars_all_repos_template.rb) | Show statistics of your GitHub repositories. | [Valdir Junior](https://github.com/valdirjunior011 ) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Show Open Pull Requests](developer-utils/github/github-open-pull-requests-details.template.rb) | Display (detailed) GitHub pull requests | [Faye Sipiano](https://github.com/FSipiano) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Show Review Requests](developer-utils/github/github-review-requests.template.rb) | Display number of Pull Requests requesting your review | [Vince Picone](https://github.com/vpicone) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Unread Notifications](developer-utils/github/github-unread-notifications.template.sh) | Display (detailed) number of unread GitHub notifications. | [Caleb Stauffer](https://github.com/crstauf) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/github/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Visit a Repository, Pull Request, or Issue](developer-utils/github/open-gh-repo-pr-or-issue.sh) | Open a repository, pull request, or issue on GitHub | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### GitLab\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/gitlab/images/gitlab.png\" width=\"20\" height=\"20\"> | [Issues](developer-utils/gitlab/gitlab-issues.template.py) | Show issues from GitLab | [Michael Aigner](https://github.com/tonka3000) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/gitlab/images/gitlab.png\" width=\"20\" height=\"20\"> | [Merge Requests](developer-utils/gitlab/gitlab-mergerequests.template.py) | Show merge requests from GitLab | [Michael Aigner](https://github.com/tonka3000) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/gitlab/images/gitlab.png\" width=\"20\" height=\"20\"> | [To-Dos](developer-utils/gitlab/gitlab-todos.template.py) | Show todos from GitLab | [Michael Aigner](https://github.com/tonka3000) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Google\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/google/images/google-lighthouse-logo.png\" width=\"20\" height=\"20\"> | [Lighthouse](developer-utils/google/google-lighthouse.sh) | Open a [Lighthouse](https://developers.google.com/web/tools/lighthouse/) report of URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/google/images/google-psi-logo.png\" width=\"20\" height=\"20\"> | [PageSpeed Insights - Desktop](developer-utils/google/google-psi-desktop.sh) | Run a [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) analysis on desktop of URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/google/images/google-psi-logo.png\" width=\"20\" height=\"20\"> | [PageSpeed Insights - Mobile](developer-utils/google/google-psi-mobile.sh) | Run a [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) analysis on mobile of URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Ip\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🌐 | [External IPv4](developer-utils/ip/get-external-ip-v4.sh) | Copies the external IPv4 to the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [External IPv6](developer-utils/ip/get-external-ip-v6.sh) | Copies the external IPv6 to the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Local IPv4](developer-utils/ip/get-local-ip-v4.sh) | Copies the local IPv4 to the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Local IPv6](developer-utils/ip/get-local-ip-v6.sh) | Copies the local IPv6 to the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [URL IPv4](developer-utils/ip/get-url-ip-v4.sh) | Get IPv4 address of URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [URL IPv6](developer-utils/ip/get-url-ip-v6.sh) | Get IPv6 address of URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Minikube\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ⚙️ | [Config Set](developer-utils/minikube/minikube-config-set.sh) | Pause Minikube cluster | [Daniils Petrovs](https://danpetrov.xyz) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏸ | [Pause](developer-utils/minikube/minikube-pause.sh) | Pause Minikube cluster | [Daniils Petrovs](https://danpetrov.xyz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🚀 | [Start](developer-utils/minikube/minikube-start.sh) | Start Minikube cluster | [Daniils Petrovs](https://danpetrov.xyz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ℹ️ | [Status](developer-utils/minikube/minikube-status.sh) | Show Minikube cluster status | [Daniils Petrovs](https://danpetrov.xyz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Stop](developer-utils/minikube/minikube-stop.sh) | Stops a running Minikube cluster | [Daniils Petrovs](https://danpetrov.xyz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏸ | [Unpause](developer-utils/minikube/minikube-unpause.sh) | Pause Minikube cluster | [Daniils Petrovs](https://danpetrov.xyz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Sentry\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/sentry/images/sentry-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/sentry/images/sentry.png\" width=\"20\" height=\"20\"></picture> | [Unresolved Issues](developer-utils/sentry/sentry-unresolved-issues.template.py) | Show unresolved issues of the last 24 hours from Sentry. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/sentry/images/sentry-dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/sentry/images/sentry.png\" width=\"20\" height=\"20\"></picture> | [Unresolved Issues By Project](developer-utils/sentry/sentry-unresolved-issues-by-project.template.py) | Show unresolved issues in the last 24 hours (by project) from Sentry. | [Phil Salant](https://github.com/PSalant726) and [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Solana\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/solana/./images/solana-logo.png\" width=\"20\" height=\"20\"> | [Extract Transaction from Blink Response](developer-utils/solana/solana-tx-blink-extract.sh) | Extract transaction from Blink endpoint in clipboard and replaces with the transaction | [bjoerndotsol](https://github.com/bjoerndotsol) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/solana/./images/solana-logo.png\" width=\"20\" height=\"20\"> | [Open in Solana Inspector](developer-utils/solana/solana-tx-inspector.sh) | Extracts the message from a signed Solana transaction and opens Explorer's Inspector with it. | [bjoerndotsol](https://github.com/bjoerndotsol) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/solana/./images/solana-logo.png\" width=\"20\" height=\"20\"> | [View Solana Transaction](developer-utils/solana/solana-tx-details.sh) | Opens a Solana transaction in Solscan. Network: empty/mainnet, d/dev/devnet, t/test/testnet | [bjoerndotsol](https://github.com/bjoerndotsol) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Vscode\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/vscode/images/vscode.png\" width=\"20\" height=\"20\"> | [Open Directory](developer-utils/vscode/open-folder-in-vscode.applescript) | Opens current topmost directory in VS Code | [chohner](https://github.com/chohner) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/vscode/images/vscode.png\" width=\"20\" height=\"20\"> | [Open Project](developer-utils/vscode/open-project-in-vscode.sh) | Finds path to the given directory which must be a VS Code or Git project and opens it with VS Code | [Maksim Zemlyanikin](https://github.com/Maksimka101) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Xcode\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/xcode/images/xcode.png\" width=\"20\" height=\"20\"> | [Last Project](developer-utils/xcode/xcode-last-project.sh) | Open the last Xcode project  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/developer-utils/xcode/images/xcode.png\" width=\"20\" height=\"20\"> | [Recent Project](developer-utils/xcode/xcode-recent-project.sh) | Open recent Xcode project | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Home\n\n#### Elgato\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/home/elgato/images/elgato.png\" width=\"20\" height=\"20\"> | [Decrease Brightness](home/elgato/elgato-key-light-decrease-brightness.template.rb) | Decrease brightness of Elgato Key Light by 5%. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/home/elgato/images/elgato.png\" width=\"20\" height=\"20\"> | [Increase Brightness](home/elgato/elgato-key-light-increase-brightness.template.rb) | Increase brightness of Elgato Key Light by 5%. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/home/elgato/images/elgato.png\" width=\"20\" height=\"20\"> | [Turn Off](home/elgato/elgato-key-light-turn-off.template.rb) | Turn off Elgato Key Light. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/home/elgato/images/elgato.png\" width=\"20\" height=\"20\"> | [Turn On](home/elgato/elgato-key-light-turn-on.template.rb) | Turn on Elgato Key Light. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n\n#### Philips Hue\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 💡 | [Lights](home/philips-hue/hue-lights-inline.template.mjs) | Show inline summary of any Hue compatible lights. Choose to show on/off, brightness percentage, color temperature or hue, saturation, brightness values. Recommended to have already assigned names to lights in the Hue app. | [Jono Hewitt](https://github.com/jonohewitt) |  | ✅ | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 💡 | [Rooms](home/philips-hue/hue-rooms-inline.template.mjs) | Show inline summary about your rooms of Hue compatible lights. Choose to show the number of lights on out of the room total, or use more general terms such as \"All on\". Requires rooms to have already been set up in the Hue app. | [Jono Hewitt](https://github.com/jonohewitt) |  | ✅ | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 💡 | [Set Light Bulb](home/philips-hue/hue-bulb.template.mjs) | Set a specified or default individual color bulb to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a bulb on or off. | [Jono Hewitt](https://github.com/jonohewitt) | ✅ | ✅ | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 💡 | [Set Room Lights](home/philips-hue/hue-room.template.mjs) | Set a specified or default room of color bulbs to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a room on or off. | [Jono Hewitt](https://github.com/jonohewitt) | ✅ | ✅ | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n## Math\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Calculate CAGR Percentage](math/calculate-CAGR.sh) | Calculate the CAGR between \"from\" and \"to\" values over given \"years,\" then copy the result. | [Samuel Barton](https://github.com/samueldbarton) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📈 | [Calculate Growth %](math/calculate-growth.sh) | Calculate percentage increase between \"from\" and \"to\" values. | [Petr Nikolaev](https://github.com/pitnikola) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔢 | [Generate Random Number](math/random-number.sh) | Generate a number between a given range (inclusive) and then copy the value | [Matt Gleich](https://mattglei.ch) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🧮 | [LaTeX Calculator](math/latex-calculator.py) | Evaluate LaTeX expressions and get the product copied to your clipboard | [Matt Gleich](https://mattglei.ch) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/math/images/wolfram-alpha.png\" width=\"20\" height=\"20\"> | [Wolfram Alpha](math/wolfram-alpha.template.sh) | Use Wolfram Alpha to answer your query | [es183923](https://github.com/es183923) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  |  | [nCr: Calculate Combinations](math/calculate-combinations.js) | nCr: Calculate combinations | [cSharp](https://github.com/noidwasavailable) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n\n## Media\n\n#### Apple Music\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Apple Music Volume Down](media/apple-music/apple-music-volume-down.applescript) | N/A | [Juan I. Serra](https://github.com/jiserra) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Apple Music Volume Up](media/apple-music/apple-music-volume-up.applescript) | N/A | [Juan I. Serra](https://github.com/jiserra) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Current Track](media/apple-music/apple-music-current-track.applescript) | Show currently playing track in Music. | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Go to Artist in Apple Music](media/apple-music/apple-music-go-to-artist-page.sh) | Go to Artist page in the Apple Music App | [Jordi Clement](https://github.com/jordicl) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Hate Current Track](media/apple-music/apple-music-hate-current-track.applescript) | Let the algorithm know how you feel about the currently playing track. | [Bryan Schuetz](https://github.com/bryanschuetz) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Love Current Track](media/apple-music/apple-music-love-current-track.applescript) | Let the algorithm know how you feel about the currently playing track. | [Bryan Schuetz](https://github.com/bryanschuetz) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Next Track](media/apple-music/apple-music-next.applescript) | Next track in Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Pause](media/apple-music/apple-music-pause.applescript) | Pause Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Play](media/apple-music/apple-music-play.applescript) | Play Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Previous Track](media/apple-music/apple-music-previous.applescript) | Previous track in Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Search](media/apple-music/apple-music-search.applescript) | Search using the native UI | [StevenRCE0](https://github.com/StevenRCE0) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Set Volume](media/apple-music/apple-music-set-volume.applescript) | Set volume in Music. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Stop](media/apple-music/apple-music-stop.applescript) | Stop Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Toggle Repeat](media/apple-music/apple-music-repeat.applescript) | Toggle repeat setting in Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-music/images/apple-music-logo.png\" width=\"20\" height=\"20\"> | [Toggle Shuffle](media/apple-music/apple-music-shuffle.applescript) | Toggle shuffle setting in Music. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Apple Tv\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-tv/images/apple-tv-logo.png\" width=\"20\" height=\"20\"> | [Pause](media/apple-tv/apple-tv-pause.applescript) | Pause TV. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-tv/images/apple-tv-logo.png\" width=\"20\" height=\"20\"> | [Play](media/apple-tv/apple-tv-play.applescript) | Play TV. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-tv/images/apple-tv-logo.png\" width=\"20\" height=\"20\"> | [Play Movie](media/apple-tv/apple-tv-play-movie.applescript) | Play specified movie from library in TV. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-tv/images/apple-tv-logo.png\" width=\"20\" height=\"20\"> | [Set Volume](media/apple-tv/apple-tv-set-volume.applescript) | Set volume in TV. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/apple-tv/images/apple-tv-logo.png\" width=\"20\" height=\"20\"> | [Stop](media/apple-tv/apple-tv-stop.applescript) | Stop TV. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Cmus\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ℹ️ | [Current Track](media/cmus/track-info.sh) | Shows info on the current track if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏩ | [Next Track](media/cmus/next-track.sh) | Goes forward a track if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏪ | [Previous Track](media/cmus/previous-track.sh) | Goes back a track if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏯ | [Toggle Play/Pause](media/cmus/play-pause.sh) | Toggles the play/pause state if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔁 | [Toggle Repeat](media/cmus/toggle-repeat.sh) | Toggles the repeat option if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔀 | [Toggle Shuffle](media/cmus/toggle-shuffle.sh) | Toggles the shuffle option if cmus is running | [mmerle](https://github.com/mmerle) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Endel\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Deep Focus](media/endel/endel-deep-focus.sh) | Set deep focus mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Deep Work](media/endel/endel-scenarios-deepwork.sh) | Run Deep Work scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Focus](media/endel/endel-focus.sh) | Set focus mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Homework](media/endel/endel-scenarios-homework.sh) | Run Homework scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Lullaby](media/endel/endel-lullaby.sh) | Set AI lullaby mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Meditate](media/endel/endel-scenarios-meditate.sh) | Run Meditate scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Power Nap](media/endel/endel-scenarios-powernap.sh) | Run Power Nap scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Read](media/endel/endel-scenarios-read.sh) | Run Read scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Recovery](media/endel/endel-recovery.sh) | Set recovery mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Relax](media/endel/endel-relax.sh) | Set relax mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Self Care](media/endel/endel-scenarios-selfcare.sh) | Run Self Care scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Set Alarm](media/endel/endel-alarm.sh) | Set Alarm in Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Set Timer](media/endel/endel-timer.sh) | Set Timer in Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Sleep](media/endel/endel-sleep.sh) | Set focus mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Study](media/endel/endel-study.sh) | Set study mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Unwind](media/endel/endel-scenarios-unwind.sh) | Run Unwind scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Wiggly Wisdom](media/endel/endel-wisdom.sh) | Set wiggly wisdom mode at Endel  | [Sergey Korobyin](https://github.com/huangsemao) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Workout](media/endel/endel-scenarios-workout.sh) | Run Workout scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/endel/images/endel.png\" width=\"20\" height=\"20\"> | [Yoga](media/endel/endel-scenarios-yoga.sh) | Run Yoga scenario at Endel  | [Sergey Korobyin](https://github.com/huangsemao) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Lowfi\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  |  | [Lowfi](media/lowfi/lowfi.sh) | N/A | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Sonos\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/sonos/images/sonos-logo.png\" width=\"20\" height=\"20\"> | [Play Favorite](media/sonos/sonos-play-favorite.sh) | Play from Sonos favorites. | [David Blackman](https://github.com/whizziwig) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/sonos/images/sonos-logo.png\" width=\"20\" height=\"20\"> | [Set Volume](media/sonos/sonos-volume-set.sh) | Sets volume of Sonos. | [David Blackman](https://github.com/whizziwig) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/sonos/images/sonos-logo.png\" width=\"20\" height=\"20\"> | [Volume Down](media/sonos/sonos-volume-down.sh) | Raises volume of Sonos. | [David Blackman](https://github.com/whizziwig) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/sonos/images/sonos-logo.png\" width=\"20\" height=\"20\"> | [Volume Up](media/sonos/sonos-volume-up.sh) | Raises volume of Sonos. | [David Blackman](https://github.com/whizziwig) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Speaker Setup\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🔊 | [Speaker Setup](media/speaker-setup/speaker-setup.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Spotify\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/./images/spotify-logo.png\" width=\"20\" height=\"20\"> | [${commandName}](media/spotify/create-spotify-command.js) | Play ${commandName} on Spotify | [Nichlas Wærnes Andersen](https://twitter.com/nichlaswa) | ✅ |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Copy Current Playing Song URL](media/spotify/spotify-now-playing-url.applescript) | Get link to current Spotify playing song | [Jack LaFond](https://github.com/jacc) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Current Track](media/spotify/spotify-current-track.applescript) | Show currently playing track in Spotify. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Next Track](media/spotify/spotify-next-track.applescript) | Skips to the next track in Spotify. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Pause](media/spotify/spotify-pause.applescript) | Pause current track in Spotify. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Play](media/spotify/spotify-play.applescript) | Plays current track in Spotify. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Play Track or Playlist](media/spotify/spotify-play-playlist.template.applescript) | Play playlist or track in Spotify. | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Previous Track](media/spotify/spotify-previous-track.applescript) | Skips to the previous track in Spotify. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/spotify/images/spotify-logo.png\" width=\"20\" height=\"20\"> | [Toggle Play/Pause](media/spotify/spotify-play-pause.applescript) | Toggles play or pause of current track in Spotify. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Tidal\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/tidal/images/tidal-logo.png\" width=\"20\" height=\"20\"> | [Next Track](media/tidal/tidal-next-track.applescript) | Skip to the next track in Tidal. | [Charles Harries](https://github.com/charlesharries) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/tidal/images/tidal-logo.png\" width=\"20\" height=\"20\"> | [Pause](media/tidal/tidal-pause.applescript) | Pause the current track in Tidal. | [Charles Harries](https://github.com/charlesharries) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/tidal/images/tidal-logo.png\" width=\"20\" height=\"20\"> | [Play](media/tidal/tidal-play.applescript) | Play the current track in Tidal. | [Charles Harries](https://github.com/charlesharries) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/tidal/images/tidal-logo.png\" width=\"20\" height=\"20\"> | [Previous Track](media/tidal/tidal-previous-track.applescript) | Skip back to the previous track in Tidal. | [Charles Harries](https://github.com/charlesharries) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/tidal/images/tidal-logo.png\" width=\"20\" height=\"20\"> | [Toggle Play/Pause](media/tidal/tidal.applescript) | Play/Pause Tidal | [Cebrail AKTAS](https://github.com/AktasC) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### foobar2000\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/foobar2000/images/foobar2000.png\" width=\"20\" height=\"20\"> | [Next foobar2000](media/foobar2000/foobar2000-next.applescript) | Shortcuts to next foobar2000 for Mac v2.3.0 | [Jing Li](https://github.com/lixeon) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/foobar2000/images/foobar2000.png\" width=\"20\" height=\"20\"> | [Pause foobar2000](media/foobar2000/foobar2000-pause.applescript) | Shortcuts to pause foobar2000 for Mac v2.3.0 | [Jing Li](https://github.com/lixeon) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/media/foobar2000/images/foobar2000.png\" width=\"20\" height=\"20\"> | [Previous foobar2000](media/foobar2000/foobar2000-pervious.applescript) | Shortcuts to Previous foobar2000 for Mac v2.3.0 | [Jing Li](https://github.com/lixeon) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n## Navigation\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🫥 | [Hide Current Application](navigation/hide-application.applescript) | Easily hide your foremost application | [Chris Bailey](https://raycast.com/that70schris) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/justfocus.png\" width=\"20\" height=\"20\"> | [JustFocus](navigation/justfocus.applescript) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 📂 | [Open Applications](navigation/open-applications.sh) | Opens the Applications folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🖥 | [Open Clipboard URL on Desktop](navigation/open-desktop-url-from-clipboard.swift) | Opens the URL from the clipboard in the desktop app. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 📟 | [Open Current Finder Directory in Terminal](navigation/open-terminal-from-finder.applescript) | Open current Finder directory in Terminal | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/iterm-logo.png\" width=\"20\" height=\"20\"> | [Open Current Finder Directory in iTerm](navigation/open-iterm-from-finder.applescript) | Open current Finder directory in iTerm | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 📟 | [Open Current Terminal Directory in Finder](navigation/open-finder-from-terminal.applescript) | Open current Terminal directory in Finder | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/iterm-logo.png\" width=\"20\" height=\"20\"> | [Open Current iTerm Directory in Finder](navigation/open-finder-from-iterm.applescript) | Open current iTerm directory in Finder | [Kirill Gorbachyonok](https://github.com/japanese-goblinn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-desktop.png\" width=\"20\" height=\"20\"> | [Open Desktop](navigation/open-desktop.sh) | Opens the Desktop folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-documents.png\" width=\"20\" height=\"20\"> | [Open Documents](navigation/open-documents.sh) | Opens the Documents folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-downloads.png\" width=\"20\" height=\"20\"> | [Open Downloads](navigation/open-downloads.sh) | Opens the Downloads folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔍 | [Open Finder](navigation/open-finder.sh) | Open Finder at Home folder or argument location | [Afraz](https://github.com/afrazkhan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-home.png\" width=\"20\" height=\"20\"> | [Open Home](navigation/open-home.sh) | Opens the Home folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/./images/pixelmator-pro-2.0.png\" width=\"20\" height=\"20\"> | [Open Image From Clipboard](navigation/open-clipboard-in-pixelmator-pro.applescript) | Creates a new document in Pixelmator Pro from the image stored in your clipboard. | [Bryce Carr](https://github.com/bdcarr) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-downloads.png\" width=\"20\" height=\"20\"> | [Open Last Downloaded](navigation/open-last-downloaded.sh) | Opens the last file that was downloaded | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/folder-library.png\" width=\"20\" height=\"20\"> | [Open Library](navigation/open-library.sh) | Opens the Library folder in the Finder. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌐 | [Open URL From Clipboard](navigation/open-url-from-clipboard.sh) | Opens the URL in the clipboard. | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/quit.png\" width=\"20\" height=\"20\"> | [Quit Application](navigation/quit-application.applescript) | Quit the application. Edit the command to change the default values (Application: \"\", Force quit?: \"No\"). | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/restart.png\" width=\"20\" height=\"20\"> | [Restart Application](navigation/restart-application.applescript) | Restart the application. Edit the command to change the default values (Application: \"\", Force restart?: \"No\"). | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/dash.png\" width=\"20\" height=\"20\"> | [Search in Dash](navigation/search-in-dash.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/navigation/images/devdocs.png\" width=\"20\" height=\"20\"> | [Search in Devdocs](navigation/search-in-devdocs.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Productivity\n\n#### Bitwarden\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Bitwarden Status](productivity/bitwarden/status.sh) | Display the authentication and lock status of the user's Bitwarden session. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Copy First Matching Password](productivity/bitwarden/copy-first-matching-password.sh) | Search all items in a Bitwarden vault, and copy the password of the first search result to the clipboard. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Copy First Matching TOTP](productivity/bitwarden/copy-first-matching-totp.sh) | Search all items in a Bitwarden vault, and copy the TOTP of the first search result to the clipboard. | [Phil Salant](https://github.com/int3rrupt) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Create a Text Send](productivity/bitwarden/create-text-send.sh) | Create a new text-only Bitwarden Send. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Delete a Send](productivity/bitwarden/delete-send.sh) | Delete a Bitwarden Send. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Edit a Send](productivity/bitwarden/edit-send.sh) | Edit an existing Bitwarden Send. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [List All Text Sends](productivity/bitwarden/list-sends.sh) | List all Bitwarden text Sends created in the currently unlocked account. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Lock Session](productivity/bitwarden/lock.sh) | Lock a Bitwarden session. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Log In](productivity/bitwarden/log-in-apikey.template.sh) | Log in to Bitwarden using an API key. | [Marcel Bochtler](https://github.com/MarcelBochtler) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Log In](productivity/bitwarden/log-in.template.sh) | Log in to Bitwarden. | [Phil Salant](https://github.com/PSalant726) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Log Out](productivity/bitwarden/log-out.sh) | Log out of Bitwarden. | [Phil Salant](https://github.com/PSalant726) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Receive a Text Send](productivity/bitwarden/receive-text-send.sh) | View the content of a text-only Bitwarden Send. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Search Vault Items](productivity/bitwarden/search-vault-items.sh) | Search all items in a Bitwarden vault. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/productivity/bitwarden/images/bitwarden.png\" width=\"20\" height=\"20\"> | [Unlock Session](productivity/bitwarden/unlock.sh) | Unlock an authenticated Bitwarden session. | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Imgur\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📋 | [Clipboard to Imgur](productivity/imgur/imgur-upload-clipboard-image.template.sh) | Upload Image from your Clipboard and copy the image link to clipboard | [Fahim Faisal](https://github.com/i3p9) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📷 | [Screenshot and Imgur](productivity/imgur/screenshot-and-imgur.sh) | Opens default screenshot interface and immediately uploads and copies link to clipboard | [Fahim Faisal](https://github.com/i3p9) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ☁️ | [Upload Latest Screenshot to Imgur](productivity/imgur/imgur-upload-latest-screenshot.template.sh) | Upload your last screenshot to Imgur and copy the image link to clipboard | [Fahim Faisal](https://github.com/i3p9) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Pomodoro\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🍅 | [Start Timer](productivity/pomodoro/pomodoro-start-timer.sh) | Start a Pomodoro timer | [Thomas Paul Mann](https://github.com/thomaspaulmann) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Status](productivity/pomodoro/pomodoro-status.sh) | Status of a Pomodoro timer | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🍅 | [Stop Timer](productivity/pomodoro/pomodoro-stop-timer.sh) | Stop active Pomodoro timer | [Thomas Paul Mann](https://github.com/thomaspaulmann) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### QPDF\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🗜️ | [Compress PDF](productivity/qpdf/compress-pdf-qpdf.sh) | Compress selected PDF files. Note: This script requires 'qpdf' to be installed via Homebrew. | [Nicklas Jakobsen](https://github.com/nicklasjm) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Writing\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📖 | [Dictionary Lookup](productivity/writing/dictionary-lookup.swift) | Directly use macOS Dictionary | [Alessandra Pereyra](https://github.com/alessandrapereyra) | ✅ |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🤖 | [Word Count](productivity/writing/word-count.sh) | Counts the number of words of the text in the clipboard | [Benny Wong](https://bwong.net) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### macOCR\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📸 | [Run OCR](productivity/macocr/macocr-run-ocr.sh) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### stopwatch\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ⏱ | [Show Stopwatch Progress](productivity/stopwatch/stopwatch-progress.sh) | Status of active stopwatch | [Achille Lacoin](https://github.com/pomdtr) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Start Stopwatch](productivity/stopwatch/stopwatch-start.sh) | Start a stopwatch | [Achille Lacoin](https://github.com/pomdtr) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⏱ | [Stop Stopwatch](productivity/stopwatch/stopwatch-stop.sh) | Stop active stopwatch, copy total time | [Achille Lacoin](https://github.com/pomdtr) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### tesseract\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 🔍 | [OCR Screenshot](productivity/tesseract/tesseract-ocr.sh) | Tesseract OCR | [Diego Lopes](https://github.com/Dihgg) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Remote Control\n\n#### Arm64\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📺 | [Switch to DP](remote-control/ddc/arm64/screen-dp.sh) | This script will switch the external display screen to DP. | goodhyun |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📺 | [Switch to HDMI](remote-control/ddc/arm64/screen-hdmi.sh) | This script will switch the external display screen to HDMI. | goodhyun |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### X86\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📺 | [Switch to DP](remote-control/ddc/x86/screen-dp.sh) | This script will switch the external display screen to DP. | goodhyun |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📺 | [Switch to HDMI](remote-control/ddc/x86/screen-hdmi.sh) | This script will switch the external display screen to HDMI. | goodhyun |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Denon AVR\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/denon-avr/images/denon_logo.png\" width=\"20\" height=\"20\"> | [Configure](remote-control/denon-avr/configure.applescript) | Helperscript to configure Denon AVR Script Commands | [Rediwed](github.com/Rediwed) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/denon-avr/images/denon_logo.png\" width=\"20\" height=\"20\"> | [Power Off](remote-control/denon-avr/power-off.applescript) | Powers off a modern Denon AVR if it is currently powered on | [Rediwed](github.com/Rediwed) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/denon-avr/images/denon_logo.png\" width=\"20\" height=\"20\"> | [Power On](remote-control/denon-avr/power-on.applescript) | Powers on a modern Denon AVR if it is currently powered off | [Rediwed](github.com/Rediwed) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/denon-avr/images/denon_logo.png\" width=\"20\" height=\"20\"> | [Volume Down](remote-control/denon-avr/volume-down.applescript) | Decreases the volume of your Denon AVR by one unit | [Rediwed](github.com/Rediwed) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/denon-avr/images/denon_logo.png\" width=\"20\" height=\"20\"> | [Volume Up](remote-control/denon-avr/volume-up.applescript) | Increases the volume of your Denon AVR by one unit | [Rediwed](github.com/Rediwed) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### LG TV\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Authenticate](remote-control/lg-tv/authenticate.sh) | Authenticate the library. The TV has to be turned on. You have to provide the IP address of the TV and accept the connection on the TV. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Change Channel](remote-control/lg-tv/change-channel.sh) | Change the TV channel by its ID. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Change Input](remote-control/lg-tv/change-input.sh) | Change the input by its ID. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Change Sound Output](remote-control/lg-tv/change-sound-output.sh) | Change the sound output. Possible \"Output Type\" values: tv_speaker \\| external_optical \\| external_arc \\| external_speaker \\| lineout \\| headphone \\| tv_external_speaker \\| tv_speaker_headphone \\| bt_soundbar. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Change Volume](remote-control/lg-tv/change-volume.sh) | Change the volume level. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Close App](remote-control/lg-tv/close-app.sh) | Close the application by its ID. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Execute Command](remote-control/lg-tv/execute-command.sh) | Execute the given command on TV. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Fast Forward Media](remote-control/lg-tv/fast-forward-media.sh) | Fast forward the media. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [List Apps](remote-control/lg-tv/list-apps.sh) | Show the list of applications. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [List Channels](remote-control/lg-tv/list-channels.sh) | Show the list of TV channels. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [List Inputs](remote-control/lg-tv/list-inputs.sh) | Show the list of inputs. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [List Launch Points](remote-control/lg-tv/list-launch-points.sh) | Show the list of launch points. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [List Services](remote-control/lg-tv/list-services.sh) | Show the list of services. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Mute](remote-control/lg-tv/mute.sh) | Mute the TV. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Open App](remote-control/lg-tv/open-app.sh) | Open the application by its ID. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Open App With Payload](remote-control/lg-tv/open-app-with-payload.sh) | Open the application with the given payload. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Open Browser](remote-control/lg-tv/open-browser.sh) | Open the browser with the given URL. The URL has to start with \"http://\" or \"https://\" prefix. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Open Youtube (ID)](remote-control/lg-tv/open-youtube-id.sh) | Open Youtube with the given video ID. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Open Youtube (URL)](remote-control/lg-tv/open-youtube-url.sh) | Open Youtube with the given video URL. The URL has to start with \"http://\" or \"https://\" prefix. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Pause Media](remote-control/lg-tv/pause-media.sh) | Pause the media. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Play Media](remote-control/lg-tv/play-media.sh) | Play the media. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Rewind Media](remote-control/lg-tv/rewind-media.sh) | Rewind the media. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Scan](remote-control/lg-tv/scan.sh) | Scan to find the TV. The TV has to be turned on. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Send Notification](remote-control/lg-tv/send-notification.sh) | Send the notification and show it on the TV. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Send Notification With Icon](remote-control/lg-tv/send-notification-with-icon.sh) | Send the notification with the icon and show it on the TV. | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Audio Status](remote-control/lg-tv/show-audio-status.sh) | Show the audio status. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Audio Volume](remote-control/lg-tv/show-audio-volume.sh) | Show the audio volume. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Channel](remote-control/lg-tv/show-channel.sh) | Show information about the TV channel. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Config](remote-control/lg-tv/show-config.sh) | Show the configuration of the library. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Cursor Socket](remote-control/lg-tv/show-cursor-socket.sh) | Show the cursor socket. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Foreground App Info](remote-control/lg-tv/show-fg-app-info.sh) | Show information about the foreground application. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Picture Settings](remote-control/lg-tv/show-picture-settings.sh) | Show picture settings. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Power State](remote-control/lg-tv/show-power-state.sh) | Show the power state. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Software Info](remote-control/lg-tv/show-software-info.sh) | Show information about the software. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show Sound Output](remote-control/lg-tv/show-sound-output.sh) | Show the sound output. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Show TV Info](remote-control/lg-tv/show-tv-info.sh) | Show information about the TV. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Stop Media](remote-control/lg-tv/stop-media.sh) | Stop the media. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Switch To Next Channel](remote-control/lg-tv/switch-next-channel.sh) | Switch to the next TV channel. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Switch To Previous Channel](remote-control/lg-tv/switch-previous-channel.sh) | Switch to the previous TV channel. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn Off](remote-control/lg-tv/turn-off.sh) | Turn off the TV. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn Off 3D](remote-control/lg-tv/turn-off-3d.sh) | Turn off the 3D mode. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn Off Screen](remote-control/lg-tv/turn-off-screen.sh) | Turn off the screen. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn On](remote-control/lg-tv/turn-on.sh) | Turn on the TV. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn On 3D](remote-control/lg-tv/turn-on-3d.sh) | Turn on the 3D mode. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn On Screen](remote-control/lg-tv/turn-on-screen.sh) | Turn on the screen. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn Volume Down](remote-control/lg-tv/turn-volume-down.sh) | Turn the volume down. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Turn Volume Up](remote-control/lg-tv/turn-volume-up.sh) | Turn the volume up. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/lg-tv/images/lg.png\" width=\"20\" height=\"20\"> | [Unmute](remote-control/lg-tv/unmute.sh) | Unmute the TV. | [Jakub Lanski](https://github.com/jaklan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Samsung TV\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/samsung-tv/images/logo.png\" width=\"20\" height=\"20\"> | [Turn Off TV](remote-control/samsung-tv/turn-off.template.py) | Turns off a Samsung TV. | [Darryl Brooks](https://github.com/DarrylBrooks97) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/remote-control/samsung-tv/images/logo.png\" width=\"20\" height=\"20\"> | [Turn On TV](remote-control/samsung-tv/turn-on.template.py) | Turns on a Samsung TV. | [Darryl Brooks](https://github.com/DarrylBrooks97) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n## System\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 💻 | [Add Spacer to Dock](system/add-spacer-to-dock.sh) | Adds an invisible icon to the Dock as a separator. | [Alexandru Turcanu](https://github.com/Pondorasti) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔋 | [Battery Info](system/battery-info.sh) | Get Battery percentage, time remaining, charge status, charger wattage, total cycles etc. | [Fahim Faisal](https://github.com/i3p9) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ☀️ | [Brightness](system/brightness.sh) | Set system brightness | [Antonio Dal Sie](https://github.com/exodusanto) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🖥️ | [CPU Usage](system/inline-cpu-usage-percent.sh) | Display CPU usage percent | [Juan Luis Romero](https://github.com/JuanluR8) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ☕️ | [Caffeinate](system/caffeinate-status.swift) | Shows caffeinate status and time left if it's running | [Yan Smaliak](https://github.com/ysmaliak) |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | ☕️ | [Caffeinate](system/caffeinate-status.sh) | Shows caffeinate status | [Yan Smaliak](https://github.com/ysmaliak) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Capture Fullscreen to Clipboard](system/capture-fullscreen-to-clipboard.sh) | This script screenshots the entire screen and saves it to the clipboard. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Capture Fullscreen to Desktop](system/capture-fullscreen-to-desktop.sh) | This script screenshots the entire screen and saves it to the desktop. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Capture Screen Selection to Clipboard](system/capture-screen-selection-to-clipboard.sh) | This script screenshots the selected area and saves it to the clipboard. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💻 | [Capture Screen Selection to Desktop](system/capture-screen-selection-to-desktop.sh) | This script screenshots the selected area and saves it to the desktop. | [Aaron Miller](https://github.com/aaronhmiller) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔪 | [Close All Finder Windows](system/close-finder-windows.applescript) | Close all open Finder windows.  | [Alexander Steffen](https://github.com/alexjsteffen) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 📅 | [Copy Availability](system/copy-availability.swift) | Copies the calendar availability of today. | Raycast | ✅ |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  |  | [Copy Finder Selection to Clipboard](system/copy-selection-to-clipboard.applescript) | Copy contents of selected items in Finder to the clipboard. If there's more than one file selected, they will be combined and added to the clipboard. | [Felipe Turcheti](https://felipeturcheti.com) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 💁 | [Copy Last Download](system/copy-last-download.swift) | Copy the last downloaded file to the clipboard. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 📸 | [Copy Last Screenshot](system/copy-last-screenshot.swift) | Copies the last screenshot to the clipboard. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 📝 | [Copy Meeting Summary](system/meeting_summary_script.swift) | Copies a summary of today's meetings to the clipboard. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 📟 | [Copy Wi-Fi Password](system/wifi-password.sh) | Copy Wi-Fi password from current session | [Astrit Malsia](https://github.com/astrit) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📧 | [Create Email](system/new-email.sh) | Opens default email application, and creates a new email with the given inputs. | [Brandon Escamilla](https://github.com/brandonescamilla) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📄 | [Create New File](system/create-new-file.applescript) | Create files in the front window or desktop of the visit | [LokHsu](https://github.com/lokhsu) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/new-file.png\" width=\"20\" height=\"20\"> | [Create New File in Finder](system/create-new-file-in-finder.applescript) | Create New File in Finder is a script to make your Finder better.You can use this script to create a plain text file. | Jax0rz |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/custom-window-size.png\" width=\"20\" height=\"20\"> | [Custom Window Size](system/custom-window.applescript) | Resize and center the frontmost window to any custom size. | [Astrit](https://github.com/astrit) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/arc.png\" width=\"20\" height=\"20\"> | [Default to Arc](system/default-browser-arc.applescript) | Set Arc as the default browser. | [Marcos Sánchez-Dehesa](https://github.com/dehesa) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/chrome.png\" width=\"20\" height=\"20\"> | [Default to Chrome](system/default-browser-chrome.applescript) | Set Google Chrome as the default browser. | [Marcos Sánchez-Dehesa](https://github.com/dehesa) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/chrome-icon.png\" width=\"20\" height=\"20\"> | [Default to Chromium](system/default-browser-chromium.applescript) | Set Chromium as the default browser. | [Marcos Sánchez-Dehesa](https://github.com/dehesa) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/firefox.png\" width=\"20\" height=\"20\"> | [Default to Firefox](system/default-browser-firefox.applescript) | Set Firefox as the default browser. | [Marcos Sánchez-Dehesa](https://github.com/dehesa) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/safari.png\" width=\"20\" height=\"20\"> | [Default to Safari](system/default-browser-safari.applescript) | Set Safari as the default browser. | [Marcos Sánchez-Dehesa](https://github.com/dehesa) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🗑 | [Delete Selected Files](system/delete-selected-files.sh) | Move selected files in Finder to Trash | [Vicent Gozalbes](https://github.com/vigosan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ☕️ | [Disable Caffeinate](system/caffeinate-disable.sh) | Stops all caffeinate sessions | [Yan Smaliak](https://github.com/ysmaliak) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💾 | [Disk Free](system/disk-free.sh) | Show free space in your mounted disks | [Juan Luis Romero](https://github.com/JuanluR8) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💿 | [Disk Usage](system/disk-usage.sh) | Show disk usage for / (root) | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔕 | [Dismiss Notifications](system/dismiss-notifications.applescript) | Close all notification alerts staying on screen, e.g., Calendar notifications. | [benyn](github.com/benyn) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🔕 | [Do Not Disturb](system/do-not-disturb.sh) | Do Not Disturb | [Antonio Dal Sie](https://github.com/exodusanto) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Dock Position](system/dock-set-position.sh) | Set the position of the Dock in the screen | [Jelte Lagendijk](https://raycast.com/j3lte) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Dock Set Autohide](system/dock-set-autohide.sh) | Set the Dock autohide | [Jelte Lagendijk](https://raycast.com/j3lte) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📀 | [Eject All Disks](system/eject-all-disks.applescript) | Ejects all mounted disk images. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 📋 | [Empty Clipboard](system/empty-clipboard.sh) | Empty Clipboard | Raycast |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🗑 | [Empty Trash](system/empty-trash.applescript) | Empty the trash. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | ☕️ | [Enable Caffeinate](system/caffeinate-enable.sh) | Starts a caffeinated session | [Yan Smaliak](https://github.com/ysmaliak) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💨 | [Flush DNS](system/flush-dns.sh) | Flush DNS cache | [Felipe Turcheti](https://felipeturcheti.com) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔫 | [Kill AirDrop Processes](system/kill-airdrop.processes.sh) | Force kill all AirDrop processes | [Linus Salzmann](https://github.com/linus569) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ⚠️ | [Kill Running Process](system/kill-process.sh) | Force kill a running process | [Gustavo Santana](https://github.com/gumadeiras) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🚫 | [Kill a process on PORT](system/kill-a-process-on-port.sh) | Kill running processes on the given ports | [aaqifshafi](https://github.com/aaqifshafi) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📈 | [Largest CPU Process](system/largest-cpu-process.sh) | Report process with largest system CPU usage. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📈 | [Largest RAM Process](system/largest-ram-process.sh) | Report process with largest system RAM usage. | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔋 | [Low Power Mode](system/Low Power Mode.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/minimize-window.png\" width=\"20\" height=\"20\"> | [Minimize All Windows](system/minimize-all-windows.applescript) | This script minimizes all windows of currently running apps | [Ernest Ojeh](https://github.com/namzo) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🌵 | [Modify File Extension](system/modify-extension.sh) | Batch modify the file in the current directory or the specified extension of the selected file | [LokHsu](https://github.com/lokhsu) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🗑 | [Move Desktop to Trash](system/move-desktop-to-trash.applescript) | Empty the desktop. | [Seypopi](https://github.com/Seypopi) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/move-downloads-to-trash.png\" width=\"20\" height=\"20\"> | [Move Downloads to Trash](system/move-downloads-to-trash.applescript) | N/A | Jax0rz |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🛜 | [Network Info](system/Network Info.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🌐 | [Network Quality](system/network-quality.sh) | N/A | [Archie Lacoin](https://github.com/pomdtr) and [LanikSJ](https://github.com/LanikSJ) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📶 | [Network Status](system/network-status.sh) | Get current network connections. | [Alexandru Turcanu](https://github.com/Pondorasti) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🖼 | [OCR](system/ocr.swift) | Use macOS Vision API Identification pictures, if it contain a QR code, Copy the QR code content to the clipboard, If do not include QR codes, identify text content and supplement to clipboard | [zhe](https://github.com/wmszhe) |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🔑 | [One-Time Password](system/otp.sh) | Get One-Time Password (OTP) from Apple Password Manager | Angelos Michalopoulos | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📁 | [Open Folder](system/open-folder.sh) | Open a folder on macOS  | [Bin Hua](https://github.com/hzb) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📋 | [Open Image](system/open-image-from-clipboard.sh) | Open Image from Clipboard in Preview for OCR or other purposes. | [xxchan](https://github.com/xxchan) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💁‍♂️ | [Open Last Download](system/open-last-download.swift) | Opens the last downloaded file. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🗃 | [Open Selection With](system/open-selection-with.applescript) | Open selected items in Finder with the given application. | [Felipe Turcheti](https://felipeturcheti.com) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 💥 | [Quit All Applications](system/quit-all-apps.swift) | Quits all running applications except Finder and Raycast. | Raycast |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 💥 | [Quit app](system/quit-app.swift) | Quits an app, by name or process id. | [Roland Leth](https://runtimesharks.com) | ✅ |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🖼️ | [Refresh Wallpaper](system/wallpaper-refresh.applescript) | Apply a random image from the [wallpaper directory](https://support.apple.com/guide/mac-help/change-your-desktop-picture-mchlp3013/mac) for the main display's current [Space](https://support.apple.com/guide/mac-help/work-in-multiple-spaces-mh14112/mac). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 📂 | [Rename Video](system/rename-videos-pictures.py) | This is a simple Python script for recursively renaming video and picture files within a directory. Type the root directory's absolute path, and it will scan all the video and picture files in it and rename them according to the folder where they are located as the format `<folder_name>-<current_date (MMDD)>-<incremental_number>`. | [StepaniaH](https://github.com/StepaniaH) | ✅ |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🚀 | [Reset Launchpad](system/reset-launchpad.sh) | Resets the macOS Launchpad to its default state | [Zach Dawson](https://raycast.com/zdawz) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ♻️ | [Restart](system/restart.applescript) | Restarts computer. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 💀 | [Restart the Dock](system/restart-dock.sh) | Restart the Dock | [Jordi Clement](https://github.com/jordicl) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 💀 | [Restart the Finder](system/restart-finder.sh) | Restart the Finder | [Jordi Clement](https://github.com/jordicl) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔡 | [Running processes](system/list-processes.rb) | List running app showing their process id, CPU usage, name, and optionally the process path. | [Roland Leth](https://runtimesharks.com) | ✅ |  | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | 🎨 | [Sample Color](system/sample-color.swift) | Sample a color from anywhere on your screen. | [Jesse Claven](https://github.com/jesse-c) |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🤖 | [Save Image From Clipboard](system/save-image-from-clipboard.py) | Save Image From Clipboard | [Yufei Kang](kangyufei.net) and [LanikSJ](https://github.com/LanikSJ) |  |  | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n  | 🌀 | [Screen Saver](system/screensaver.applescript) | A script command to start your current screen saver. | [Valentin Chrétien](https://twitter.com/valentinchrt) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🧭 | [Set Frontmost App as Default Browser](system/default-browser-front-most-app.applescript) | Set Frontmost Web Browser as Default Browser. | [Yohanes Bandung Bondowoso](https://github.com/ybbond) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🛌 | [Shut Down](system/shutdown.applescript) | Shuts down computer. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 😴 | [Sleep](system/sleep.applescript) | Puts computer to sleep. | Raycast |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 😴 | [Sleep Timer](system/sleep-timer.applescript) | Put your Mac to sleep (in X minutes). | [AndriiBarabash](https://github.com/AndriiBarabash) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🧬 | [Toggle .DS_Store](system/toggle-ds-store.applescript) | A script command to enable and disable .DS_Store | [Astrit](https://github.com/astrit) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🔋 | [Toggle Battery Charging](system/toggle-battery-charging.sh) | Toggle charging the battery when it is plugged in. When turned off, it will always use the charger instead of the battery; when turned on, it will go to automatic mode (decide based on your settings and daily charging routine). | [Amir Hossein SamadiPour](https://github.com/SamadiPour) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/bluetooth.png\" width=\"20\" height=\"20\"> | [Toggle Bluetooth](system/bluetooth.template.applescript) | Toggle your Bluetooth connection. | [Vincent Dörig](https://github.com/vincentdoerig) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🖥 | [Toggle Desktop Icons](system/toggle-desktop-icons.applescript) | A script command to show and hide icons of Desktop folder | [Raycast](https://raycast.com) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🔄 | [Toggle Desktop Widgets](system/toggle-desktop-widget.sh) | N/A | [Federico Zivolo](https://github.com/FezVrasta) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🤖 | [Toggle Dock Autohide](system/dock-autohide-toggle.sh) | Toggle the Dock Autohide | [Jelte Lagendijk](https://raycast.com/j3lte) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 👓 | [Toggle Filename Extensions](system/toggle-filename-extensions.applescript) | Show or hide all filename extensions (like .txt, .png) | [Senthil Prabhu](https://github.com/senthilprabhut) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🖥 | [Toggle Flip Screen <display> to <degree>°](system/toggle-flip-screen.template.applescript) | Toggle flip (rotate) or revert the <display> to <degree>° | [Yohanes Bandung Bondowoso](https://github.com/ybbond) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 👓 | [Toggle Hidden Files](system/toggle-hidden-files.applescript) | Show and hide hidden files/folders which starts with \".\" (dot), i.e: .bash_rc, .ssh | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🐚 | [Toggle Lid Sleep](system/toggle-lid-sleep.sh) | Prevent sleep from closing laptop lid (clamshell mode) | [Ivan Rybalko](https://github.com/ivribalko) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🖱 | [Toggle Natural Scrolling](system/toggle-natural-scrolling.applescript) | Script Command to change natural trackpad/mouse scrolling setting. Reverting the setting value each time. | [Wiley Marques](https://twitter.com/wileymarques) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🖱 | [Toggle Natural Scrolling (macOS 15+)](system/toggle-natural-scrolling-macos15.applescript) | Toggle natural trackpad/mouse scrolling setting for macOS 15.6.1+ | [Raphael-KR](https://github.com/Raphael-KR) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🌘 | [Toggle Night Shift](system/nightshift.sh) | Toggle Night Shift mode (until tomorrow/sunrise). Required [nightlight](https://github.com/smudge/nightlight) | [BhEaN](https://github.com/bhean) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌗 | [Toggle System Appearance](system/toggle-system-appearance.applescript) | Script Command to switch between the system appearance, light and dark mode. | [Thiago Holanda](https://twitter.com/tholanda) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/wifi.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/images/wifi-dark.png\" width=\"20\" height=\"20\"></picture> | [Toggle Wi-Fi](system/wifi.template.applescript) | Toggle your Wi-Fi connection. | [Vincent Dörig](https://github.com/vincentdoerig) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 😴 | [Turn Off Do Not Disturb](system/dnd-off.sh) | Turn off \"do not disturb\" mode. Does [not work on Big Sur](https://github.com/sindresorhus/do-not-disturb-cli/issues/2). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 😴 | [Turn On Do Not Disturb](system/dnd-on.sh) | Turn on \"do not disturb\" mode. Does [not work on Big Sur](https://github.com/sindresorhus/do-not-disturb-cli/issues/2). | [Caleb Stauffer](https://github.com/crstauf) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📋 | [Type Clipboard](system/paste-clipboard.sh) | Takes your clipboard then types each character in the clipboard | [AlexGadd](https://raycast.com/AlexGadd) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🗑 | [Uninstall with AppCleaner](system/uninstall-with-appcleaner.applescript) | Uninstall applications with AppCleaner | [Felipe Turcheti](https://felipeturcheti.com) | ✅ |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | ♻️ | [Update Community Scripts](system/update-scripts-command.template.py) | Updates community Script Commands to their last available version from the GitHub repository. | [Quentin Eude](https://www.github.com/qeude) |  | ✅ | <img src=\"images/icon-python.png\" width=\"20\" height=\"20\" title=\"Python\"> |\n\n#### Audio\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | ⚡️ | [AirPods Battery Level](system/audio/airpodsbattery.sh) | Get the current battery status of your AirPods. | [Quentin Eude](https://www.github.com/qeude) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔈 | [Audio devices](system/audio/get-audio-devices.swift) | Lists all audio devices | [Roland Leth](https://runtimesharks.com) |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🔈 | [Audio devices](system/audio/get-selected-audio-device.swift) | Shows the selected audio devices for input and output | [Roland Leth](https://runtimesharks.com) |  |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🎧 | [Headphones Battery Level](system/audio/bluetooth-headphones-battery-level.template.sh) | Get the battery level of your bluetooth headphones | [Mortada Sarheed](https://github.com/mSarheed) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🎧 | [Reload CoreAudio](system/audio/reload-coreaudio.sh) | Reloads CoreAudio. | [Maxim Krouk](https://github.com/maximkrouk) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🎧 | [Set audio device](system/audio/set-audio-device.swift) | Sets the input (i), the output (o) or both (b) audio sources, based on name. If `both` is passed, but no input or output device is found with the given name, it will still try to set the other one. For example, if you're trying to set both to \"External mic\", which doesn't have an input source, it will still set the output to the mic; vice-versa for a speaker. | [Roland Leth](https://runtimesharks.com) | ✅ |  | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🔊 | [Switch Audio to <Device Name>](system/audio/audio-output-switch.template.applescript) | Switch audio output to desired device. | [mmerle](https://github.com/mmerle) |  | ✅ | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/audio/images/airpod.png\" width=\"20\" height=\"20\"> | [Toggle AirPods](system/audio/toggle-airpods.template.swift) | Toggle AirPods bluetooth device | [Nichlas W. Andersen](https://github.com/itsnwa) |  | ✅ | <img src=\"images/icon-swift.png\" width=\"20\" height=\"20\" title=\"Swift\"> |\n  | 🎙 | [Toggle Microphone](system/audio/toggle-mic.applescript) | Toggles microphone. | [Matthew Morek](https://github.com/matthewmorek) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | 🔔 | [Toggle Mute Notifcation Sounds](system/audio/toggle-mute-notification-sounds.applescript) | Toggles notification sounds. | [Annie Ma](http://www.anniema.co/) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n\n#### Magic Keyboard Switcher\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/system/magic-keyboard-switcher/images/logo.png\" width=\"20\" height=\"20\"> | [Magic Keyboard switcher](system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh) | Switch a single magic keyboard between computers | [blastik](https://github.com/blastik) |  | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### VPN\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📡 | [Connect](system/vpn/vpn-start.sh) | Start VPN connection. | [Alexandru Turcanu](https://github.com/Pondorasti) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📡 | [Disconnect](system/vpn/vpn-stop.sh) | Stop VPN connection. | [Alexandru Turcanu](https://github.com/Pondorasti) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📡 | [VPN Status](system/vpn/vpn-status.sh) | Stop VPN connection. | [Alexandru Turcanu](https://github.com/Pondorasti) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### Vpnutil\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📡 | [Start VPN](system/vpnutil/vpnutil-start.sh) | Start VPN connection. | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📡 | [Stop VPN](system/vpnutil/vpnutil-stop.sh) | Stop VPN connection | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📡 | [Toggle VPN](system/vpnutil/vpnutil-toggle.sh) | Toggle VPN connection | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📡 | [VPN Status](system/vpnutil/vpnutil-status.sh) | Check VPN connection | [Sergey Fuksman](https://github.com/fuksman) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Web Searches\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | 📦 | [Bundlephobia cost](web-searches/bundlephobia.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | ❓ | [Caniuse.com search](web-searches/caniuse.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌦 | [Check Weather](web-searches/check-weather.sh) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🚚 | [Clipboard to 17TRACK](web-searches/clipboard-to-17track.js) | Open 17TRACK with the tracking code found in the clipboard | [Alessandra Pereyra](https://github.com/alessandrapereyra) |  |  | <img src=\"images/icon-nodejs.png\" width=\"20\" height=\"20\" title=\"Node\"> |\n  | 🪙 | [CoinMarketCap Search](web-searches/search-coinmarketcap.sh) | Searches coinmarketcap currencies. | [Benedict Neo](https://github.com/benthecoder) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/hunter.png\" width=\"20\" height=\"20\"> | [Find Email Address With Hunter](web-searches/hunter.sh) | Find emails using hunter.io | [Tanguy Le Stradic](https://github.com/tanguyls) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📖 | [Find Paper](web-searches/doi.sh) | Parses and opens DOI links in your browser | [Razvan Azamfirei](https://github.com/razvanazamfirei) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📖 | [Find Paper](web-searches/doi-clipboard.sh) | Scans clipboard and opens DOI links in your browser | [Razvan Azamfirei](https://github.com/razvanazamfirei) |  |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/giphy.png\" width=\"20\" height=\"20\"> | [Giphy search](web-searches/giphy.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🌍 | [Google Translate](web-searches/google-translate.rb) | Translates via Google Translate | [Roland Leth](https://runtimesharks.com) | ✅ |  | <img src=\"images/icon-ruby.png\" width=\"20\" height=\"20\" title=\"Ruby\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/./images/duck-duck-go.png\" width=\"20\" height=\"20\"> | [I'm Feeling Ducky](web-searches/im-feeling-ducky.sh) | Open the first DuckDuckGo search result page for your query (also supports bang!) | [Achille Lacoin](https://github.com/pomdtr) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/wpengine-logo.png\" width=\"20\" height=\"20\"> | [Open WP Engine Install](web-searches/wpengine-install.sh) | Open specified [WP Engine](https://wpengine.com) install. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 📦 | [Open npm Package Repo](web-searches/repo.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/psql.png\" width=\"20\" height=\"20\"> | [PostgreSQL Documentation](web-searches/postgresql.sh) | Search PostgreSQL documentation | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/dart-logo.png\" width=\"20\" height=\"20\"> | [Pub.dev Search](web-searches/pub-search.sh) | Search [pub.dev](https://pub.dev/) for packages to build Dart and Flutter apps. | [Wade Garrett](https://wadegarrett.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/chosic.png\" width=\"20\" height=\"20\"> | [Search Genre in Chosic](web-searches/search-gender-in-chosic.applescript) | Find the current Spotify track's gender in Chosic | [quelhasu](https://github.com/quelhasu) |  |  | <img src=\"images/icon-applescript.png\" width=\"20\" height=\"20\" title=\"AppleScript\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/github-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/github-logo.png\" width=\"20\" height=\"20\"></picture> | [Search GitHub](web-searches/search-github.sh) | Search [GitHub](https://github.com). | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/go.png\" width=\"20\" height=\"20\"> | [Search Go Package Documentation](web-searches/pkg-go-dev.sh) | Search pkg.go.dev for package documentation | [Phil Salant](https://github.com/PSalant726) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/google-map.png\" width=\"20\" height=\"20\"> | [Search Google Maps](web-searches/google-maps.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/hacker-news.png\" width=\"20\" height=\"20\"> | [Search Hacker News](web-searches/search-hacker-news.sh) | Search Hacker News | [Shannon Matthews](https://github.com/s-oram) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/imdb.png\" width=\"20\" height=\"20\"> | [Search IMDB](web-searches/search-imdb.sh) | Search IMDB. | [Lucas Costa](https://github.com/lucasrcosta) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/linkedin.png\" width=\"20\" height=\"20\"> | [Search LinkedIn](web-searches/search-linkedin.sh) | Search LinkedIn | [Nitin Gupta](https://twitter.com/gniting) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/mozilla-developer-network.png\" width=\"20\" height=\"20\"> | [Search MDN (Mozilla Developer Network)](web-searches/mozilla-developer-network.sh) | N/A | [Jon Callahan](https://www.joncallahan.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/netflix-logo.png\" width=\"20\" height=\"20\"> | [Search Netflix](web-searches/search-netflix.sh) | Search Netflix. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/opensecrets.png\" width=\"20\" height=\"20\"> | [Search OpenSecrets.org](web-searches/opensecrets.sh) | N/A | [Daniel Sieradski](https://github.com/selfagency) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/php-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/php-logo.png\" width=\"20\" height=\"20\"></picture> | [Search PHP Docs](web-searches/search-php-docs.sh) | Search [PHP official documentation](https://www.php.net/docs.php). | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/python.png\" width=\"20\" height=\"20\"> | [Search Python 3 Documentation](web-searches/search-python3-docs.sh) | Search Python 3 Documentation | [Lucas Costa](https://github.com/lucasrcosta) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/pip.png\" width=\"20\" height=\"20\"> | [Search Python Package Index (PyPI)](web-searches/search-pypi.sh) | Search Python Package Index (PyPI) | [Lucas Costa](https://github.com/lucasrcosta) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/rust.png\" width=\"20\" height=\"20\"> | [Search Rust Documentation](web-searches/search-rust-docs.sh) | Search Rust documentation | [lemorage](https://raycast.com/lemorage) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/marketplace-logo.png\" width=\"20\" height=\"20\"> | [Search Script Command](web-searches/search-script-command-marketplace.sh) | Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https://scriptcommands.alexandru.so). | [Alexandru Turcanu](https://github.com/Pondorasti) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/./images/swift.png\" width=\"20\" height=\"20\"> | [Search Swift Code](web-searches/search-swift-github.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/unsplash-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/unsplash-logo.png\" width=\"20\" height=\"20\"></picture> | [Search Unsplash](web-searches/search-unsplash.sh) | Search [Unsplash](https://unsplash.com). | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/wpengine-logo.png\" width=\"20\" height=\"20\"> | [Search WP Engine Installs](web-searches/search-wpengine-installs.sh) | Search [WP Engine](https://wpengine.com) installs. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/cloudflare-logo.png\" width=\"20\" height=\"20\"> | [Search cdnjs](web-searches/search-cdnjs.sh) | Search [cdnjs.com](https://cdnjs.com/) for library. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/./images/cargo-logo.png\" width=\"20\" height=\"20\"> | [Search for Crate](web-searches/rust-crate.sh) | Search for a rust crate on crates.io | [Matthew Gleich](https://mattglei.ch) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/amazon.png\" width=\"20\" height=\"20\"> | [Search in Amazon](web-searches/amazon.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/app-store.png\" width=\"20\" height=\"20\"> | [Search in App Store](web-searches/app-store.sh) | Search in App Store app | [Andrei Borisov](https://github.com/andreiborisov) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/baidu.png\" width=\"20\" height=\"20\"> | [Search in Baidu](web-searches/search-in-baidu.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/bilibili.png\" width=\"20\" height=\"20\"> | [Search in Bilibili](web-searches/search-in-bilibili.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/crunchbase.png\" width=\"20\" height=\"20\"> | [Search in Crunchbase](web-searches/crunchbase.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/./images/ddbicon.png\" width=\"20\" height=\"20\"> | [Search in DnDBeyond.com](web-searches/search-in-dndbeyond.sh) | N/A | [Chris Koerner Zeller](https://github.com/ChessMess) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/duck-duck-go.png\" width=\"20\" height=\"20\"> | [Search in DuckDuckGo](web-searches/duck-duck-go.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/ecosia.png\" width=\"20\" height=\"20\"> | [Search in Ecosia](web-searches/ecosia.sh) | N/A | [Sasivarnan R](https://github.com/sasivarnan) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔎 | [Search in Emojipedia](web-searches/search-emojipedia.sh) | Search for emojis at emojipedia. | [Benedict Neo](https://github.com/benthecoder) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/figma.png\" width=\"20\" height=\"20\"> | [Search in Figma](web-searches/figma.sh) | Search files in Figma | [Tanguy Le Stradic](https://github.com/tanguyls) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/google.png\" width=\"20\" height=\"20\"> | [Search in Google](web-searches/google-search.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/jingdong.png\" width=\"20\" height=\"20\"> | [Search in Jingdong](web-searches/search-in-jingdong.sh) | N/A | [sunbufu](https://sunbufu.github.io/) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/kinopoisk.png\" width=\"20\" height=\"20\"> | [Search in Kinopoisk](web-searches/kinopoisk.sh) | N/A | [Andrei Borisov](https://github.com/andreiborisov) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/mdn_dark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/mdn_light.png\" width=\"20\" height=\"20\"></picture> | [Search in MDN (Mozilla) Docs by Topic](web-searches/mdn.sh) | Search in MDN (Mozilla) Docs by topic | [Jesse Traynham](https://github.com/traynham) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/taobao.png\" width=\"20\" height=\"20\"> | [Search in Taobao](web-searches/search-in-taobao.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/twitter.png\" width=\"20\" height=\"20\"> | [Search in Twitter](web-searches/twitter-search.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/wikipedia.png\" width=\"20\" height=\"20\"> | [Search in Wikipedia](web-searches/search-in-wikipedia.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/yandex.png\" width=\"20\" height=\"20\"> | [Search in Yandex](web-searches/yandex-search.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/youtube.png\" width=\"20\" height=\"20\"> | [Search in YouTube](web-searches/youtube.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/zhihu.png\" width=\"20\" height=\"20\"> | [Search in Zhihu](web-searches/search-in-zhihu.sh) | N/A | Jax0rz | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/arxiv.png\" width=\"20\" height=\"20\"> | [Search in arXiv](web-searches/arxiv.sh) | N/A | [Marco Varisco](https://github.com/mava) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/devhints.png\" width=\"20\" height=\"20\"> | [Search in devhints.io](web-searches/search-in-devhints.sh) | N/A | [Francois](https://github.com/AsterYujano) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://grep.app/favicon.ico\" width=\"20\" height=\"20\"> | [Search in grep.app](web-searches/grep-app-search.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/npmjs.png\" width=\"20\" height=\"20\"> | [Search npm Packages](web-searches/npmjs.sh) | N/A | Raycast | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/spi.png\" width=\"20\" height=\"20\"> | [Swift Package Index](web-searches/swift-package-index.sh) | Search for Swift packages in the Swift Package Index. | [The Swift Package Index](https://swiftpackageindex.com) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/baidu-translate.png\" width=\"20\" height=\"20\"> | [Translate with Baidu](web-searches/translate-with-baidu.template.sh) | N/A | [sunbufu](https://sunbufu.github.io/) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/google-translate.png\" width=\"20\" height=\"20\"> | [Translate with Google](web-searches/translate-with-google.template.sh) | N/A | [sunbufu](https://sunbufu.github.io/) | ✅ | ✅ | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🔗 | [Unfurl URL](web-searches/unfurl.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/ia-logo.jpg\" width=\"20\" height=\"20\"> | [Wayback Machine Search](web-searches/wayback-machine.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | 🐸 | [njt](web-searches/njt.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/images/npms.png\" width=\"20\" height=\"20\"> | [npms](web-searches/npms.sh) | N/A | [Zander Martineau](https://zander.wtf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n#### WordPress\n\n| Icon | Title | Description | Author | Args | Templ | Lang |\n| :--: | ----- | ----------- | :----: | :--: | :---: | :--: |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo.png\" width=\"20\" height=\"20\"></picture> | [Search WordPress Docs](web-searches/wordpress/search-wordpress-docs.sh) | Search [WordPress Developer documentation](https://developer.wordpress.org/reference/). | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo.png\" width=\"20\" height=\"20\"></picture> | [WordPress CLI Command](web-searches/wordpress/wordpress-cli-command.sh) | Open [WordPress CLI command reference](https://developer.wordpress.org/cli/commands/) for specified command. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo.png\" width=\"20\" height=\"20\"></picture> | [WordPress Classes Reference](web-searches/wordpress/wordpress-classes-reference.sh) | Open [WordPress classes reference](https://developer.wordpress.org/reference/classes/) for specified class. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo.png\" width=\"20\" height=\"20\"></picture> | [WordPress Functions Reference](web-searches/wordpress/wordpress-functions-reference.sh) | Open [WordPress functions reference](https://developer.wordpress.org/reference/functions/) for specified function. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n  | <picture><source srcset=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo-iconDark.png\" media=\"(prefers-color-scheme: dark)\"><img src=\"https://raw.githubusercontent.com/raycast/script-commands/master/commands/web-searches/wordpress/images/wordpress-logo.png\" width=\"20\" height=\"20\"></picture> | [WordPress Hooks Reference](web-searches/wordpress/wordpress-hooks-reference.sh) | Open [WordPress hooks reference](https://developer.wordpress.org/reference/hooks/) for specified hook. | [Caleb Stauffer](https://github.com/crstauf) | ✅ |  | <img src=\"images/icon-bash.png\" width=\"20\" height=\"20\" title=\"Bash\"> |\n\n## Community\n\nThis is a shared place and we're always looking for new Script Commands or other ways to improve Raycast.\nIf you have anything cool to show, please send us a pull request. If we screwed something up,\nplease report a bug. Join our\n[Slack community](https://www.raycast.com/community)\nto brainstorm ideas with like-minded folks."
  },
  {
    "path": "commands/ai/gemini/gemini.js",
    "content": "#!/usr/bin/env node\n\n// Dependencies:\n// This script requires the following software to be installed:\n// - `node` https://nodejs.org\n// - `chrome-cli` https://github.com/prasmussen/chrome-cli\n// Install via homebrew: `brew install node chrome-cli`\n\n// This script needs to run JavaScript in your browser, which requires your permission.\n// To do so, open Chrome and find the menu bar item:\n// View > Developer > Allow JavaScript from Apple Events\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Ask Gemini\n// @raycast.mode silent\n// @raycast.packageName Gemini\n\n// Optional parameters:\n// @raycast.icon ./images/icon-gemini.svg\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Selected Text\", \"optional\": true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Prompt\"}\n\n// Documentation:\n// @raycast.description Open Gemini in Chrome browser and submit a prompt with optional selected text as context\n// @raycast.author Est7\n// @raycast.authorURL https://github.com/est7\n\n// @raycast.author Nimo Beeren\n// @raycast.authorURL https://github.com/nimobeeren\n\nconst { execSync } = require(\"child_process\");\n\nconst selectedText = process.argv[2] || \"\"; // Get the text from \"Selected Text\" argument, or use an empty string if argument is empty.\nconst prompt = process.argv[3];\n\nprocess.env.OUTPUT_FORMAT = \"json\";\n\n/** Escape a string so that it can be used in JavaScript code when wrapped in double quotes. */\nfunction escapeJsString(str) {\n  return str.replaceAll(`\\\\`, `\\\\\\\\`).replaceAll(`\"`, `\\\\\"`);\n}\n\n/** Escape a string so that it can be used in a shell command when wrapped in single quotes. */\nfunction escapeShellString(str) {\n  return str.replaceAll(`'`, `'\"'\"'`);\n}\n\n// used to wait for Chrome to activate.\nfunction sleep(ms) {\n  const start = Date.now();\n  while (Date.now() - start < ms) {}\n}\n\n/**\n * Verifies that all required dependencies are installed.\n * Exits the process with an error message if any dependency is missing.\n */\nfunction checkDependencies() {\n  // Check if Google Chrome is installed\n  try {\n    execSync(\"osascript -e 'tell application \\\"Google Chrome\\\" to get version'\" , { stdio: \"ignore\" });\n  } catch {\n    try {\n      execSync(\"osascript -e 'tell application \\\"Chrome\\\" to get version'\" , { stdio: \"ignore\" });\n    } catch {\n      console.error(\"Google Chrome is required to run this script\");\n      process.exit(1);\n    }\n  }\n\n  // Check if chrome-cli is installed\n  try {\n    execSync(\"which chrome-cli\");\n  } catch {\n    console.error(\n      \"chrome-cli is required to run this script (https://github.com/prasmussen/chrome-cli)\"\n    );\n    process.exit(1);\n  }\n}\n\n// Verify all dependencies are installed\ncheckDependencies();\n\n// Bring Chrome to the foreground first.\ntry {\n  // Try to activate Chrome through AppleScript, supporting different possible application names.\n  execSync(\"osascript -e 'tell application \\\"Google Chrome\\\" to activate'\", {\n    stdio: \"ignore\",\n  });\n} catch (e) {\n  try {\n    // If the first naming method fails, try possible alternatives.\n    execSync(\"osascript -e 'tell application \\\"Chrome\\\" to activate'\", {\n      stdio: \"ignore\",\n    });\n  } catch (err) {\n    console.error(\n      \"Unable to activate Chrome browser, continue with other operations\",\n    );\n  }\n}\n\n// Give Chrome a little time to make sure it is activated\nsleep(300);\n\n// Find the Gemini tab if one is already open\nlet tabs = JSON.parse(execSync(\"chrome-cli list tabs\")).tabs;\nlet geminiTab = tabs.find((tab) =>\n  tab.url.startsWith(\"https://gemini.google.com/\"),\n);\n\n// If there is a Gemini tab open, get its info. Otherwise, open Gemini in a new window.\nlet geminiTabInfo;\nif (geminiTab) {\n  // Focus on existing tags, do not refresh the page\n  execSync(`chrome-cli activate -t ${geminiTab.id}`);\n  // Get tab info\n  geminiTabInfo = JSON.parse(execSync(`chrome-cli info -t ${geminiTab.id}`));\n} else {\n  // Open a Gemini session in a new tab, focus it and return the tab info\n  geminiTabInfo = JSON.parse(\n    execSync(\"chrome-cli open 'https://gemini.google.com/app'\"),\n  );\n}\n\n// Wait for the tab to be loaded, then execute the script\nlet interval = setInterval(() => {\n  if (geminiTabInfo.loading) {\n    geminiTabInfo = JSON.parse(\n      execSync(`chrome-cli info -t ${geminiTabInfo.id}`),\n    );\n  } else {\n    clearInterval(interval);\n    executeScript();\n  }\n}, 100);\n\nfunction executeScript() {\n  const script = async function (selectedText, prompt) {\n    // Wait for prompt element to be on the page\n    let promptElement;\n    await new Promise((resolve) => {\n      let interval = setInterval(() => {\n        promptElement = document.querySelector(\n          'div[aria-label=\"Enter a prompt here\"]',\n        );\n        if (promptElement) {\n          clearInterval(interval);\n          resolve();\n        }\n      }, 100);\n    });\n\n    // Prepare the final text\n    let finalText = \"\";\n    if (selectedText && selectedText.trim() !== \"\") {\n      finalText += `<file_content>${selectedText}</file_contents>\\n\\n${prompt}`;\n    } else {\n      finalText = prompt;\n    }\n\n    // Focus the input element first\n    promptElement.focus();\n\n    // Check if there's existing content\n    const hasExistingContent = promptElement.textContent.trim() !== \"\";\n\n    // Clear existing content if needed - safely without innerHTML\n    if (!hasExistingContent) {\n      // If empty, we'll just add our content\n      // No need to clear anything\n    } else {\n      // If we want to append to existing content, add a newline\n      // Create a new paragraph for separation\n      const selection = window.getSelection();\n      const range = document.createRange();\n\n      // Move cursor to the end of existing content\n      range.selectNodeContents(promptElement);\n      range.collapse(false); // false means collapse to end\n      selection.removeAllRanges();\n      selection.addRange(range);\n\n      // Insert two newlines to separate content\n      document.execCommand(\"insertText\", false, \"\\n\\n\");\n    }\n\n    // Insert the content using execCommand which is safer than innerHTML\n    // Split by newlines and insert with proper paragraph formatting\n    const paragraphs = finalText.split(\"\\n\");\n    paragraphs.forEach((paragraph, index) => {\n      if (index > 0) {\n        // Insert newline between paragraphs (not before the first one)\n        document.execCommand(\"insertText\", false, \"\\n\");\n      }\n\n      // Insert the paragraph text\n      document.execCommand(\"insertText\", false, paragraph || \"\\u200B\");\n    });\n\n    // Trigger input event to notify Gemini of changes\n    const inputEvent = new Event(\"input\", { bubbles: true });\n    promptElement.dispatchEvent(inputEvent);\n\n    // Ensure cursor is at the end and visible\n    const selection = window.getSelection();\n    const range = document.createRange();\n    range.selectNodeContents(promptElement);\n    range.collapse(false); // false means collapse to end\n    selection.removeAllRanges();\n    selection.addRange(range);\n\n    // Scroll to make cursor visible\n    promptElement.scrollTop = promptElement.scrollHeight;\n\n    // Additional scroll after a short delay to ensure visibility\n    setTimeout(() => {\n      promptElement.scrollTop = promptElement.scrollHeight;\n    }, 100);\n  };\n\n  const functionString = escapeShellString(script.toString());\n  const selectedTextString = escapeShellString(escapeJsString(selectedText));\n  const promptString = escapeShellString(escapeJsString(prompt));\n\n  execSync(\n    `chrome-cli execute '(${functionString})(\\\"${selectedTextString}\\\", \\\"${promptString}\\\")' -t ${geminiTabInfo.id}`,\n  );\n}\n"
  },
  {
    "path": "commands/apps/Message/copycode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Code\n# @raycast.mode silent\n# @raycast.packageName Messages\n\n# Optional parameters:\n# @raycast.icon images/Message.png\n\n# Documentation:\n# @raycast.description Copy verification code from a message.\n# @raycast.author Fatpandac\n# @raycast.authorURL https://github.com/Fatpandac\n\nUSERNAME=$(id -u -n)\n\nresult=$(sqlite3 /Users/$USERNAME/Library/Messages/chat.db 'SELECT text FROM message WHERE datetime(date/1000000000 + 978307200,\"unixepoch\",\"localtime\") > datetime(\"now\",\"localtime\",\"-60 second\") ORDER BY date DESC LIMIT 1;')\n\n#You can append another `keyword` into the list to support other language Messages.\nkeyword=(\"验证码\" \"code\");\nkeyword_regex=\"^(.*)(${keyword[*]/%/|})(.*)$\"\n\nif [ ! $result ]; then\n  echo \"No verification code received in the last 60 seconds!\"\n  exit 0;\nfi\n\nif [[ \"$result\" =~ \"$keyword_regex\" ]]; then\n  code=`echo $result | grep -o \"[0-9]\\{4,6\\}\"`;\n\n  echo \"$code\" | pbcopy;\n  echo \"$code code copied!\"\nfi\n\n"
  },
  {
    "path": "commands/apps/agenda/README.md",
    "content": "Use these scripts to quickly access your notes on [Agenda](https://agenda.com/).\n\n![Screenshot](images/screenshot.png)\n\n## Commands\n\n- **On the Agenda Overview**: Opens Agenda's On the Agenda Overview.\n- **Agenda Today Overview**: Opens Agenda's Today Overview.\n- **Create New On the Agenda Note**: Create a new note and add it to On the Agenda.\n"
  },
  {
    "path": "commands/apps/agenda/agenda-new-note.sh",
    "content": "#!/bin/bash\n\n# Note: Agenda required\n# Install via Mac App Store: https://apps.apple.com/us/app/agenda/id1287445660\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create New On the Agenda Note\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/agenda.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Project Title\", \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Note Text\", \"percentEncoded\": true, \"optional\": true }\n# @raycast.packageName Agenda\n\n# Documentation:\n# @raycast.description Creates New Note and adds it to On the Agenda\n# @raycast.author Michael Ellis\n# @raycast.authorURL https://github.com/mtellis2\n\n\nopen \"agenda://x-callback-url/create-note?project-title=$1&title=$2&text=$3&on-the-agenda=true&date=today\"\n\necho \"Created On the Agenda Note.\""
  },
  {
    "path": "commands/apps/agenda/agenda-on-the-agenda.sh",
    "content": "#!/bin/bash\n\n# Note: Agenda required\n# Install via Mac App Store: https://apps.apple.com/us/app/agenda/id1287445660\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title On the Agenda Overview\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/agenda.png\n# @raycast.packageName Agenda\n\n# Documentation:\n# @raycast.description Opens Agenda - On the Agenda Overview\n# @raycast.author Michael Ellis\n# @raycast.authorURL https://github.com/mtellis2\n\n\nopen \"agenda://x-callback-url/on-the-agenda\"\n\necho \"Opened On the Agenda Notes.\""
  },
  {
    "path": "commands/apps/agenda/agenda-today.sh",
    "content": "#!/bin/bash\n\n# Note: Agenda required\n# Install via Mac App Store: https://apps.apple.com/us/app/agenda/id1287445660\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Agenda Today Overview\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/agenda.png\n# @raycast.packageName Agenda\n\n# Documentation:\n# @raycast.description Opens Agenda - Today Overview\n# @raycast.author Michael Ellis\n# @raycast.authorURL https://github.com/mtellis2\n\n\nopen \"agenda://x-callback-url/today\"\n\necho \"Opened Today's Notes.\""
  },
  {
    "path": "commands/apps/amphetamine/amphetamine-off.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install Amphetamine via Mac App Store: https://apps.apple.com/us/app/amphetamine/id937984704\n\n# @raycast.title End Session\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n# @raycast.description Stop Current Amphetamine Session\n\n# @raycast.icon images/amphetamine.png\n# @raycast.mode silent\n# @raycast.packageName Amphetamine\n# @raycast.schemaVersion 1\n\ntell application \"Amphetamine\" to end session\n\nlog \"Ended current session\"\n"
  },
  {
    "path": "commands/apps/amphetamine/amphetamine-on.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install Amphetamine via Mac App Store: https://apps.apple.com/us/app/amphetamine/id937984704\n\n# @raycast.title Start Default Session\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n# @raycast.description Start Default Amphetamine Session\n\n# @raycast.icon images/amphetamine.png\n# @raycast.mode silent\n# @raycast.packageName Amphetamine\n# @raycast.schemaVersion 1\n\ntell application \"Amphetamine\" to start new session\n\nlog \"Started default session\"\n"
  },
  {
    "path": "commands/apps/baremetrics/get-arpu.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function below).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Average Revenue Per User\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon images/baremetrics.png\n# @raycast.packageName Baremetrics\n\n# Documentation:\n# @raycast.description Display Average revenue per user (ARPU)\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Go to Settings > API (https://app.baremetrics.com/settings/api)\n# 2. Copy your Live API Key\n# 3. Insert your API token below\n\nAPI_TOKEN=''\n\nDATE=`gdate -d yesterday '+%Y-%m-%d'`\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nARPU_BEFORE=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/arpu?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nARPU=$(echo \"$ARPU_BEFORE * 0.01\" | bc -l)\nprintf \"€%'.0f\\n\" $ARPU"
  },
  {
    "path": "commands/apps/baremetrics/get-arr.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function below).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Annual Recurring Revenue\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon images/baremetrics.png\n# @raycast.packageName Baremetrics\n\n# Documentation:\n# @raycast.description Display Annual Recurring Revenue (ARR)\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Go to Settings > API (https://app.baremetrics.com/settings/api)\n# 2. Copy your Live API Key\n# 3. Insert your API token below\n\nAPI_TOKEN=''\n\nDATE=`gdate -d yesterday '+%Y-%m-%d'`\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nARR_BEFORE=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/arr?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nARR=$(echo \"$ARR_BEFORE * 0.01\" | bc -l)\nprintf \"€%'.0f\\n\" $ARR"
  },
  {
    "path": "commands/apps/baremetrics/get-ltv.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function below).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Lifetime Value\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon images/baremetrics.png\n# @raycast.packageName Baremetrics\n\n# Documentation:\n# @raycast.description Display Lifetime Value (LTV)\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Go to Settings > API (https://app.baremetrics.com/settings/api)\n# 2. Copy your Live API Key\n# 3. Insert your API token below\n\nAPI_TOKEN=''\n\nDATE=`gdate -d yesterday '+%Y-%m-%d'`\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nLTV_BEFORE=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/ltv?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nLTV=$(echo \"$LTV_BEFORE * 0.01\" | bc -l)\nprintf \"€%'.0f\\n\" $LTV"
  },
  {
    "path": "commands/apps/baremetrics/get-mrr.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function below).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Monthly Recurring Revenue\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon images/baremetrics.png\n# @raycast.packageName Baremetrics\n\n# Documentation:\n# @raycast.description Display Monthly Recurring Revenue (MRR)\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Go to Settings > API (https://app.baremetrics.com/settings/api)\n# 2. Copy your Live API Key\n# 3. Insert your API token below\n\nAPI_TOKEN=''\n\nDATE=`gdate -d yesterday '+%Y-%m-%d'`\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nMRR_BEFORE=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/mrr?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nMRR=$(echo \"$MRR_BEFORE * 0.01\" | bc -l)\nprintf \"€%'.0f\\n\" $MRR"
  },
  {
    "path": "commands/apps/baremetrics/simple-dashboard.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function below).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Revenue\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon images/baremetrics.png\n# @raycast.packageName Baremetrics\n\n# Documentation:\n# @raycast.description Display Revenue Dashboard\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Go to Settings > API (https://app.baremetrics.com/settings/api)\n# 2. Copy your Live API Key\n# 3. Insert your API token below\n\nAPI_TOKEN=''\n\nDATE=`gdate -d today '+%Y-%m-%d'`\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nROUGH_MRR=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/mrr?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nCLEANED_MRR=$(echo \"$ROUGH_MRR * 0.01\" | bc -l)\nMRR=$(printf \"€%'.0f\\n\" $CLEANED_MRR)\n\nROUGH_ARR=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/arr?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nCLEANED_ARR=$(echo \"$ROUGH_ARR * 0.01\" | bc -l)\nARR=$(printf \"€%'.0f\\n\" $CLEANED_ARR)\n\nROUGH_LTV=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/ltv?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nCLEANED_LTV=$(echo \"$ROUGH_LTV * 0.01\" | bc -l)\nLTV=$(printf \"€%'.0f\\n\" $CLEANED_LTV)\n\nROUGH_ARPU=$(curl -s GET \\\n     --header 'Accept: application/json' \\\n     --header \"Authorization: Bearer ${API_TOKEN}\" \\\n     --url \"https://api.baremetrics.com/v1/metrics/arpu?start_date=${DATE}&end_date=${DATE}\" \\\n     | jq '.metrics[0].value')\n\nCLEANED_ARPU=$(echo \"$ROUGH_ARPU * 0.01\" | bc -l)\nARPU=$(printf \"€%'.0f\\n\" $CLEANED_ARPU)\n\n# Display Revenue Dashboard\necho \"MRR: $MRR | ARR: $ARR | LTV: $LTV | ARPU: $ARPU\""
  },
  {
    "path": "commands/apps/bartender/bartender-search.applescript",
    "content": "#!/usr/bin/osascript\n\n# Note: Bartender 4 required\n# Install from https://www.macbartender.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Bartender\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/bartender-icon.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Menu Bar Item Name\" }\n# @raycast.packageName Bartender.app\n\n# Documentation:\n# @raycast.description Perform a quick search of Menu Bar Items, in Bartender 4\n\non run argv\n\ttell application \"Bartender 4\"\n\t    quick search with argv\n\tend tell\nend run\t\t\t"
  },
  {
    "path": "commands/apps/bear/bear-add-note.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Add Note\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Add a new note to Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Content\", \"optional\": true, \"percentEncoded\": true}\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Use Clipboard?\", \"optional\": true, \"percentEncoded\": true}\n\nopen \"bear://x-callback-url/create?title=${1}&clipboard=${3}&text=${2}\"\n\necho \"Note created!\"\n"
  },
  {
    "path": "commands/apps/bear/bear-open-note.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Open Note\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Open the specified note in Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true}\n\nopen \"bear://x-callback-url/open-note?title=${1}\"\n"
  },
  {
    "path": "commands/apps/bear/bear-open-tag.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Open Tag\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Open the specified tag in Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Tag\", \"percentEncoded\": true}\n\nopen \"bear://x-callback-url/open-tag?name=${1}\"\n"
  },
  {
    "path": "commands/apps/bear/bear-search.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Search\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Search notes by keyword and/or tag in Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Term\", \"optional\": true, \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Tag\", \"optional\": true, \"percentEncoded\": true}\n\nif [ ! -z \"$1\" ]; then\n  if [ ! -z \"$2\" ]; then\n    open \"bear://x-callback-url/search?term=${1}&tag=${2}\"\n  else\n    open \"bear://x-callback-url/search?term=${1}\"\n  fi\nelse\n  if [ ! -z \"$2\" ]; then\n    open \"bear://x-callback-url/search?tag=${2}\"\n  else\n    open \"bear://\"\n  fi\nfi\n"
  },
  {
    "path": "commands/apps/bear/bear-today.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Open Today\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Open the Today section in Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search Query\", \"optional\": true, \"percentEncoded\": true}\n\nopen \"bear://x-callback-url/today?search=${1}\"\n"
  },
  {
    "path": "commands/apps/bear/bear-todo.sh",
    "content": "#!/bin/bash\n\n# Install Bear via Mac App Store: https://apps.apple.com/us/app/bear/id1091189122\n\n# @raycast.title Open Todos\n# @raycast.author Tanay Nistala\n# @raycast.authorURL https://github.com/tanaynistala\n# @raycast.description Open the Todo section in Bear.\n#\n# @raycast.icon images/bear-light.png\n# @raycast.iconDark images/bear-dark.png\n#\n# @raycast.mode silent\n# @raycast.packageName Bear\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search Query\", \"optional\": true, \"percentEncoded\": true}\n\nopen \"bear://x-callback-url/todo?search=${1}\"\n"
  },
  {
    "path": "commands/apps/busycal/new-busycal-event-or-task.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires `BusyCal` installed: https://www.busymac.com/busycal/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Event/Task\n# @raycast.mode compact\n# @raycast.packageName BusyCal\n\n# Optional parameters:\n# @raycast.icon images/busycal.png\n# @raycast.argument1 { \"type\": \"dropdown\", \"placeholder\": \"type\", \"data\" : [{\"title\" : \"event\", \"value\": \"event\"}, {\"title\" : \"task\", \"value\": \"task\"}], \"optional\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"entry\", \"percentEncoded\": true}\n\n# Documentation:\n# @raycast.description Creates new events or tasks in BusyCal.\n# @raycast.author Annie Ma\n# @raycast.authorURL www.anniema.co\n\non run argv\n\tset query2 to (item 2 of argv)\n\ttell application \"BusyCal\"\n\t\tactivate\n\t\tif (item 1 of argv = \"event\") then open location \"busycalevent://new/\" & query2\n\t\tif (item 1 of argv = \"task\") then open location \"busycalevent://new/-\" & query2\n\tend tell\nend run"
  },
  {
    "path": "commands/apps/chatgpt/chatgpt-open-safari.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title chatgpt\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/chatgpt.png\n# @raycast.packageName Chatgpt Util\n\n# Documentation:\n# @raycast.description Open chatgpt in safari\n# @raycast.author gintonyc\n# @raycast.authorURL https://raycast.com/gintonyc\n\n\ntell application \"Safari\"\n\tset targetURLPrefix to \"https://chat.openai.com\"\n\tset foundTab to false\n\t\n\trepeat with aWindow in windows\n\t\trepeat with aTab in (tabs of aWindow)\n\t\t\tset tabURL to URL of aTab\n\t\t\tif tabURL starts with targetURLPrefix then\n\t\t\t\tset foundTab to true\n\t\t\t\tset current tab of aWindow to aTab\n\t\t\t\texit repeat\n\t\t\tend if\n\t\tend repeat\n\t\tif foundTab then exit repeat\n\tend repeat\n\t\n\tif not foundTab then\n\t\tmake new document with properties {URL:targetURLPrefix}\n\tend if\n\tactivate\nend tell"
  },
  {
    "path": "commands/apps/claude/claude.js",
    "content": "#!/usr/bin/env node\n\n// Dependencies:\n// This script requires the following software to be installed:\n// - `node` https://nodejs.org\n// - `chrome-cli` https://github.com/prasmussen/chrome-cli\n// Install via homebrew: `brew install node chrome-cli`\n\n// This script needs to run JavaScript in your browser, which requires your permission.\n// To do so, open Chrome and find the menu bar item:\n// View > Developer > Allow JavaScript from Apple Events\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Ask Claude\n// @raycast.mode silent\n// @raycast.packageName Claude\n\n// Optional parameters:\n// @raycast.icon ✨\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Prompt\"}\n\n// Documentation:\n// @raycast.description Open Claude in Chrome browser and submit a prompt\n// @raycast.author Nimo Beeren\n// @raycast.authorURL https://github.com/nimobeeren\n\nconst { execSync } = require(\"child_process\");\n\nconst prompt = process.argv[2];\n\nprocess.env.OUTPUT_FORMAT = \"json\";\n\n/** Escape a string so that it can be used in JavaScript code when wrapped in double quotes. */\nfunction escapeJsString(str) {\n  return str.replaceAll(`\\\\`, `\\\\\\\\`).replaceAll(`\"`, `\\\\\"`);\n}\n\n/** Escape a string so that it can be used in a shell command when wrapped in single quotes. */\nfunction escapeShellString(str) {\n  return str.replaceAll(`'`, `'\"'\"'`);\n}\n\ntry {\n  execSync(\"which chrome-cli\");\n} catch {\n  console.error(\n    \"chrome-cli is required to run this script (https://github.com/prasmussen/chrome-cli)\"\n  );\n  process.exit(1);\n}\n\n// Find the Claude tab if one is already open\nlet tabs = JSON.parse(execSync(\"chrome-cli list tabs\")).tabs;\nlet claudeTab = tabs.find((tab) => tab.url.startsWith(\"https://claude.ai/\"));\n\n// If there is a Claude tab open, get its info. Otherwise, open Claude in a new\n// window.\nlet claudeTabInfo;\nif (claudeTab) {\n  // Open a new Claude session in the existing tab and focus it\n  execSync(`chrome-cli open 'https://claude.ai/new' -t ${claudeTab.id}`);\n  // Get tab info\n  claudeTabInfo = JSON.parse(execSync(`chrome-cli info -t ${claudeTab.id}`));\n} else {\n  // Open a Claude session in a new tab, focus it and return the tab info\n  claudeTabInfo = JSON.parse(\n    execSync(\"chrome-cli open 'https://claude.ai/new'\")\n  );\n}\n\n// Wait for the tab to be loaded, then execute the script\nlet interval = setInterval(() => {\n  if (claudeTabInfo.loading) {\n    claudeTabInfo = JSON.parse(\n      execSync(`chrome-cli info -t ${claudeTabInfo.id}`)\n    );\n  } else {\n    clearInterval(interval);\n    executeScript();\n  }\n}, 100);\n\nfunction executeScript() {\n  const script = async function (prompt) {\n    // Wait for prompt element to be on the page\n    let promptElement;\n    await new Promise((resolve) => {\n      let interval = setInterval(() => {\n        promptElement = document.querySelector(\n          '[aria-label=\"Write your prompt to Claude\"] > div'\n        );\n        if (promptElement) {\n          clearInterval(interval);\n          resolve();\n        }\n      }, 100);\n    });\n\n    // Set the prompt\n    const p = document.createElement(\"p\");\n    p.textContent = prompt;\n    promptElement.replaceChildren(p);\n\n    // Wait for submit button to be on the page\n    let submitButton;\n    await new Promise((resolve) => {\n      let interval = setInterval(() => {\n        submitButton = document.querySelector('[aria-label=\"Send Message\"]');\n        if (submitButton) {\n          clearInterval(interval);\n          resolve();\n        }\n      }, 100);\n    });\n\n    // Submit the prompt\n    submitButton.click();\n  };\n\n  const functionString = escapeShellString(script.toString());\n  const promptString = escapeShellString(escapeJsString(prompt));\n\n  execSync(\n    `chrome-cli execute '(${functionString})(\"${promptString}\")' -t ${claudeTabInfo.id}`\n  );\n}\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-add-quick-access-overlay.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.8.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Quick Access Overlay\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/add-quick-access-overlay.png\n# @raycast.packageName CleanShot X\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Filepath\" }\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Opens a new Quick Access Overlay with the specified image or video.\n\nopen \"cleanshot://add-quick-access-overlay?filepath=$1\""
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-annotate.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.8.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Annotate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/annotate.png\n# @raycast.packageName CleanShot X\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Filepath\", \"optional\": true }\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Opens specified file in Annotate.\n\nif [[ -z \"$1\" ]]\nthen \n  open \"cleanshot://open-annotate\"\nelse\n  open \"cleanshot://open-annotate?filepath=$1\"\nfi"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-capture-area.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Area\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/capture-area.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Take a screenshot of a specific area on your screen.\n\nopen \"cleanshot://capture-area\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-capture-fullscreen.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Fullscreen\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/capture-fullscreen.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Take a screenshot of your screen.\n\nopen \"cleanshot://capture-fullscreen\"\n\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-capture-previous-area.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Previous Area\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/capture-previous-area.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Take a screenshot of the previously specified area of your screen.\n\nopen \"cleanshot://capture-previous-area\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-capture-text.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.8.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Text\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/capture-text.png\n# @raycast.packageName CleanShot X\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Filepath\", \"optional\": true }\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Opens Text Recognition (OCR) tool or extracts text from the specified file.\n\nif [[ -z \"$1\" ]]\nthen \n  open \"cleanshot://capture-text\"\nelse\n  open \"cleanshot://capture-text?filepath=$1\"\nfi"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-capture-window.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Window\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/capture-window.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Take a screenshot of a window.\n\nopen \"cleanshot://capture-window\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-open-from-clipboard.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open from Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/clipboard.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Open screenshot that is currently in the clipboard.\n\nopen \"cleanshot://open-from-clipboard\""
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-pin.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pin to the Screen\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/pin.png\n# @raycast.packageName CleanShot X\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Filepath\", \"optional\": true }\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Pin a screenshot to the screen.\n\nif [[ -z \"$1\" ]]\nthen \n  open \"cleanshot://pin\"\nelse\n  open \"cleanshot://pin?filepath=$1\"\nfi"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-record-screen-with-keystroke-pro.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X required\n# Install from https://cleanshot.com\n#\n# Keystroke Pro required\n# Install from https://apps.apple.com/app/id1572206224?ct=ixeau\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Record Screen With Keystroke Pro\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/record-screen-keystroke-pro.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author Danylo Zalizchuk\n# @raycast.authorURL https://raycast.com/danulqua\n# @raycast.description Start a screen recording with keystrokes using the Keystroke Pro app and save it as a video or an optimized GIF file.\n\nopen \"/Applications/Keystroke Pro.app\"\nopen \"cleanshot://record-screen\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-record-screen.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Record Screen\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/record-screen.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Start a screen recording and save it as a video or an optimized GIF file.\n\nopen \"cleanshot://record-screen\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-restore.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restore Recently Closed File\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/restore.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Restore the recently closed file.\n\nopen \"cleanshot://restore-recently-closed\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-scrolling-capture.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Scrolling Capture\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/scrolling-capture.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Capture any scrollable content.\n\nopen \"cleanshot://scrolling-capture\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-self-timer.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Self-Timer\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/self-timer.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Take a screenshot after a specified delay to capture the perfect moment.\n\nopen \"cleanshot://self-timer\"\n"
  },
  {
    "path": "commands/apps/cleanshot/cleanshot-toggle-desktop-icons.sh",
    "content": "#!/bin/bash\n\n# Note: CleanShot X v3.5.1 required\n# Install from https://cleanshot.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Desktop Icons\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/toggle-desktop-icons.png\n# @raycast.packageName CleanShot X\n\n# Documentation:\n# @raycast.author CleanShot X\n# @raycast.authorURL https://twitter.com/CleanShot_app\n# @raycast.description Hide clutter on your Desktop.\n\nopen \"cleanshot://toggle-desktop-icons\"\n"
  },
  {
    "path": "commands/apps/craft/craft-create-doc.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `Craft v1.2.6` installed: https://www.craft.do/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Doc\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/craft.png\n# @raycast.packageName Craft\n\n# @Documentation:\n# @raycast.description Creates a doc in Craft\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"optional\": false, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Content (Markdown)\", \"optional\": true, \"percentEncoded\": true }\n\n# Configuration:\n# To retrieve your Craft space_id, do the following:\n# 1. Go to the space in Craft you'd like to use\n# 2. Open or create a doc\n# 3. Right click on a block of content in your doc and click on Copy Deeplink. Your space_id will be in the URL.\nSPACE_ID=\"\"\n\nopen \"craftdocs://createdocument?spaceId=$SPACE_ID&title=${1}&content=${2}&folderId=\"\n"
  },
  {
    "path": "commands/apps/craft/craft-search-workspace.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `Craft v1.2.6` installed: https://www.craft.do/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Workspace\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/craft.png\n# @raycast.packageName Craft\n\n# @Documentation:\n# @raycast.description Searches in Workspace in Craft\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"optional\": false, \"percentEncoded\": true }\n\n# Configuration:\n# To retrieve your Craft space_id, do the following:\n# 1. Go to the space in Craft you'd like to use\n# 2. Open or create a doc\n# 3. Right click on a block of content in your doc and click on Copy Deeplink. Your space_id will be in the URL.\nSPACE_ID=\"\"\n\nopen \"craftdocs://opensearch?spaceId=$SPACE_ID&query=${1}\"\n"
  },
  {
    "path": "commands/apps/deepl/deepl-app-translate.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires DeepL to be installed: https://deepl.com/app\n# Tested with DeepL for Mac Version 3.1.133440\n\n# Once installed, DeepL will run in the background even if you quit the app from the dock\n# This script will work as long as the DeepL icon is visible in the menu bar in the top right\n# Configuration options are available in the script below\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title DeepL App Translate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/deepl.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"optional\": true }\n# @raycast.packageName Apps\n\n# Documentation:\n# @raycast.description Translate text in DeepL for Mac. Features options to input from the clipboard as well as automatically copy translation results.\n# @raycast.author Jono Hewitt\n# @raycast.authorURL https://github.com/jonohewitt\n\non run translate\n\t\n\t### Configuration: ###\n    \n\t-- Choose whether to use the clipboard as the input if no input argument is entered in Raycast:\n    set useClipboardAsInput to false\n\n\t-- Choose whether the translation result should be automatically copied to the clipboard:\n\tset copyResultToClipboard to false\n\t\n\t### End of configuration ###\n\n    do shell script \"open -a DeepL\"\n\t\n\tset inputText to \"\"\n\t\n\tif item 1 of translate is \"\" then\n\t\tif useClipboardAsInput is true\n\t\t\tset inputText to the clipboard\n\t\tend if\n\telse\n\t\tset inputText to item 1 of translate\n\tend if\n\t\n\ttell application \"System Events\"\n\t\tset value of text area 1 of group 3 of group 1 of group 1 of UI Element 1 of scroll area 1 of group 1 of group 1 of window \"DeepL\" of process \"DeepL\" to inputText\n\tend tell\n\t\n\tif copyResultToClipboard is true then\n\t\tset translation to \"\"\n\t\tset timeoutSeconds to 10.0\n\t\tset endDate to (current date) + timeoutSeconds\n\t\t\n\t\ttell application \"System Events\"\n\t\t\trepeat until translation is not \"\"\n\n\t\t\t\tif exists of text area 1 of group 6 of group 3 of group 1 of UI Element 1 of scroll area 1 of group 1 of group 1 of window \"DeepL\" of process \"DeepL\"\n\t\t\t\t\tset translation to value of text area 1 of group 6 of group 3 of group 1 of UI Element 1 of scroll area 1 of group 1 of group 1 of window \"DeepL\" of process \"DeepL\"\n\t\t\t\tend if\n\n\t\t\t\tif ((current date) > endDate) then\n\t\t\t\t\texit repeat\n\t\t\t\tend if\n\t\t\t\tdelay 0.2\n\t\t\tend repeat\n\t\tend tell\n\t\t\n\t\tif translation is not \"\"\n\t\t\tset the clipboard to translation\n\t\tend if\n\tend if\n\t\nend run"
  },
  {
    "path": "commands/apps/deepl/deepl-web-translate.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title DeepL Web Translate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/deepl.png\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"percentEncoded\": true, \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"to\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"from\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Translate text on the DeepL website. Translates to a default language if no \"to\" argument is given.\n# @raycast.author Jono Hewitt\n# @raycast.authorURL https://github.com/jonohewitt\n\n### Language codes:\n\n# Bulgarian: bg\n# Chinese simplified: zh\n# Czech: cs\n# Danish: da\n# Dutch: nl\n# English (American and British): en\n# Estonian: et\n# Finnish: fi\n# German: de\n# Greek: el\n# Hungarian: hu\n# Italian: it\n# Japanese: ja\n# Latvian: lv\n# Lithuanian: lt\n# Polish: pl\n# Portuguese (Brazilian and Portuguese): pt\n# Romanian: ro\n# Russian: ru\n# Slovak: sk\n# Slovenian: sl\n# Spanish: es\n# Swedish: sv\n\n# It's not usually necessary to specify a \"from\" language as DeepL will auto-detect it, however on very short inputs it can be helpful\n\n# You can enter no inputs just to bring up the DeepL website\n\n# Configure your default language code here:\ndefaultLang=\"en\"\n\ninputText=$1\ntoLang=$2\nfromLang=$3\n\nif [ -z $2 ]; then\n   toLang=$defaultLang\nfi\n\nif [ -z $3 ]; then\n   fromLang=$defaultLang\nfi\n\nopen \"https://www.deepl.com/translator#$fromLang/$toLang/$inputText\"\n"
  },
  {
    "path": "commands/apps/devutils/backslash.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Backslash Escape/Unescape\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Escape (or unescape) backslashes in your current clipboard string\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://backslash?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/base64encode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Base64 String Encode/Decode\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Decode the Base64 string in clipboard (if it’s decodable)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://base64encode?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/base64image.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Base64 Image Encode/Decode\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Decode the Base64 string in clipboard to an image (if it’s decodable)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://base64image?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/cronparser.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Cron Job Parser\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Parse the cron job expression in clipboard (if it’s a valid cron expression)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://cronparser?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/cssformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title CSS Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as CSS\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://cssformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/csv2json.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title CSV to JSON\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert your current clipboard from CSV to JSON\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://csv2json?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/erbformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title ERB Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as ERB\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://erbformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/hashing.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Hash Generator\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Calculate the hash of your current clipboard string\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://hashing?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/html2jsx.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title HTML to JSX\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert the HTML string in clipboard to JSX\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://html2jsx?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/htmlencode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title HTML Entity Encode/Decode\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Escape (or unescape) the HTML entities your current clipboard string\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://htmlencode?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/htmlformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title HTML Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as HTML\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://htmlformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/htmlpreview.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title HTML Preview\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Show a HTML preview of your current clipboard string\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://htmlpreview?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/jsformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title JS Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as JavaScript\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://jsformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/json2csv.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title JSON to CSV\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert your current clipboard from JSON to CSV\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://json2csv?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/json2yaml.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title JSON to YAML\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert your current clipboard from JSON to YAML\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://json2yaml?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/jsonformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title JSON Format/Validate\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Format the JSON string currently in your clipboard (if it’s a valid JSON)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://jsonformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/jwt.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title JWT Debugger\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Decode and verify the current JWT token in your clipboard\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://jwt?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/lessformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title LESS Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as LESS\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://lessformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/loremipsum.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Lorem Ipsum Generator\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Get some randomly generated lorem ipsum strings\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://loremipsum?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/markdownpreview.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Markdown Preview\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Preview the markdown string currently in your clipboard\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://markdownpreview?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/numberbase.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Number Base Converter\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert numbers between bases (oct, hex, binary, etc.)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://numberbase?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/qrcode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title QR Code Reader/Generator\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Generate a QR code from your current clipboard string\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://qrcode?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/querystringparser.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title URL Parser\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Parse the URL string currently in your clipboard\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://querystringparser?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/regextester.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title RegExp Tester\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Test your regular expression with a string and inspect matches, groups, etc.\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://regextester?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/scssformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title SCSS Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as SCSS\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://scssformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/sqlformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title SQL Formatter\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Format the SQL string currently in your clipboard\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://sqlformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/stringcaseconverter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title String Case Converter\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert a string in clipboard into various naming conventions\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://stringcaseconverter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/stringinspect.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title String Inspector\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Inspect your current clipboard string (length, words count, unicode, etc.)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://stringinspect?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/textdiff.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Text Diff Checker\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Compare two texts and find diff (per characters, words, lines, etc.)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://textdiff?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/unixtime.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title Unix Time Converter\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Parse and display UNIX the timestamp string currently in your clipboard\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://unixtime?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/urlencode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title URL Encode/Decode\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Decode the current URL string in your clipboard (if any)\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://urlencode?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/uuidtool.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title UUID/ULID Generate/Decode\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Decode the UUID in your clipboard (if any), or generate UUIDs\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://uuidtool?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/xmlformatter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title XML Beautify/Minify\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Beautify or minify your current clipboard as XML\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://xmlformatter?clipboard\n"
  },
  {
    "path": "commands/apps/devutils/yaml2json.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.icon images/devutils.png\n# @raycast.title YAML to JSON\n# @raycast.mode silent\n# @raycast.packageName DevUtils.app\n\n# Documentation:\n# @raycast.description Convert your current clipboard from YAML to JSON\n# @raycast.author DevUtils.app\n# @raycast.authorURL https://devutils.app\n\nopen devutils://yaml2json?clipboard\n"
  },
  {
    "path": "commands/apps/dictionary/look-up-in-dictionary.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Look up in Dictionary\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/dictionary.icns\n# @raycast.packageName Dictionary\n\n# Documentation:\n# @raycast.description Look up selected text in Dictionary\n# @raycast.author yayiji\n# @raycast.authorURL https://github.com/yayiji\n\ntell application \"System Events\"\n    keystroke \"c\" using {command down}\n    delay 0.1\n    do shell script \"open dict://\" & the clipboard\nend\n\n"
  },
  {
    "path": "commands/apps/dnd-me/start-dnd-me.sh",
    "content": "#!/bin/bash\n\n# Install DND Me from https://runtimesharks.com/projects/dnd-me?ref=producthunt\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start DND\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔕\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Duration\", \"optional\": true }\n# @raycast.packageName DND Me\n\n# Documentation:\n# @raycast.description Starts DND via DND Me. The parameter has to be a menu item or slider equivalent: 15m, 30m, 1h, 2h, ..., 12h, next, next-hour, next-half-hour; it defaults to next. next-hour means the next 60m mark, next-half-hour means the next 30m mark and next means the first of the two. For example, if it's 9:22, next-hour means 10:00, next-half-hour means 9:30 and next means 9:30.\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com/projects/dnd-me\n\nduration=$1\n\nif [[ -z \"$1\" ]]\nthen\n  duration=next\nfi\n\nopen \"dndme://start-dnd/$duration\"\n\necho \"DND on\"\n"
  },
  {
    "path": "commands/apps/dnd-me/stop-dnd-me.sh",
    "content": "#!/bin/bash\n\n# Install DND Me from https://runtimesharks.com/projects/dnd-me?ref=producthunt\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop DND\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔔\n# @raycast.packageName DND Me\n\n# Documentation:\n# @raycast.description Stops DND via DND Me.\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com/projects/dnd-me\n\nopen \"dndme://stop-dnd\"\n\necho \"DND off\"\n"
  },
  {
    "path": "commands/apps/downie/download-video.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Download Video\n# @raycast.mode silent\n# Optional parameters:\n# @raycast.icon images/downie.png\n# @raycast.packageName Downie\n\n# Documentation:\n# @raycast.description Download video from Pasteboard link\n# @raycast.author Clu Soh\n# @raycast.authorURL https://twitter.com/designedbyclu\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\npasteboard=$(pbpaste)\n\nif [[ $pasteboard =~ $regex ]]\nthen \n    open \"downie://XUOpenLink?url=$pasteboard\"\n    echo \"Downloading in Downie\"\nelse\n    echo \"Seem like is not a URL you copied\"\nfi\n    \n\n\n\n"
  },
  {
    "path": "commands/apps/espanso/disable-espanso.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disable Espanso\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n\n# Documentation:\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\nespanso cmd disable\n"
  },
  {
    "path": "commands/apps/espanso/enable-espanso.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Enable Espanso\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n\n# Documentation:\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\nespanso cmd enable\n"
  },
  {
    "path": "commands/apps/espanso/espanso-create-expansion.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Text Expansion\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \":shortcut\", \"optional\": false }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Text\", \"optional\": false }\n\n# Documentation:\n# @raycast.description Add a text expansion to expanso\n# @raycast.author Max Stoiber\n# @raycast.authorURL https://github.com/mxstbr\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\necho \"  - trigger: \\\"$1\\\"\n    replace: \\\"$2\\\"\" >> ~/Library/Preferences/espanso/default.yml\n\nespanso restart\n"
  },
  {
    "path": "commands/apps/espanso/restart-espanso.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart Espanso\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n\n# Documentation:\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\nespanso restart\n"
  },
  {
    "path": "commands/apps/espanso/start-espanso.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Espanso\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n\n# Documentation:\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\nespanso start\n"
  },
  {
    "path": "commands/apps/espanso/stop-espanso.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `espanso` cli installed: https://espanso.org/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Espanso\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/espanso.png\n# @raycast.packageName Espanso\n\n# Documentation:\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\nif ! command -v espanso &> /dev/null; then\n      echo \"espanso is required (https://espanso.org/install).\";\n      exit 1;\nfi\n\nespanso stop\n"
  },
  {
    "path": "commands/apps/eudic/look-up-in-eudic.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: Eudic required\n# Install via Mac App Store: https://apps.apple.com/app/id402380914\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Look up Word\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/eudic.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"word\" }\n# @raycast.packageName Eudic\n\n# Documentation:\n# @raycast.description look up in eudic\n# @raycast.author jingyi\n# @raycast.authorURL https://jingyi.blog\n\non run argv\n    # FIXME known issue of Eudic. Force open it\n    do shell script \"open -b com.eusoft.eudic\"\n    do shell script \"open -b com.eusoft.eudic\"\n    tell application id \"com.eusoft.eudic\"\n        activate\n        show dic with word (item 1 of argv)\n    end tell\nend run\n"
  },
  {
    "path": "commands/apps/evernote/create-note-paste-clipboard.applescript",
    "content": "#!/usr/bin/osascript\n\n# Assumption: Evernote running (launching and waiting not great UX)\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Evernote Paste Clipboard\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ./images/evernote.png\n# @raycast.packageName Evernote\n#\n# Documentation:\n# @raycast.description Creates a new Evernote, pastes in the contents of the clipboard, and positions the cursor in the title area.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\ntell application \"System Events\"\n  tell process \"Evernote\"\n    set frontmost to true\n    click menu item \"New Note\" of menu \"File\" of menu bar 1\n    delay 2 --needed b/c Electron apps slow\n    click menu item \"Paste\" of menu \"Edit\" of menu bar 1\n    delay 1\n    tell application \"System Events\" to key code 48 using shift down -- shift-tab (move cursor to Title area)\n  end tell\nend tell\ndo shell script \"echo New Evernote created\"\n"
  },
  {
    "path": "commands/apps/evernote/create-note.applescript",
    "content": "#!/usr/bin/osascript\n\n# Assumption: Evernote running (launching and waiting not great UX)\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Evernote\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ./images/evernote.png\n# @raycast.packageName Evernote\n#\n# Documentation:\n# @raycast.description Creates a new Evernote.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\ntell application \"System Events\"\n  tell process \"Evernote\"\n    set frontmost to true\n    click menu item \"New Note\" of menu \"File\" of menu bar 1\n  end tell\nend tell\ndo shell script \"echo New Evernote created\"\n"
  },
  {
    "path": "commands/apps/expressvpn/expressvpn-connect.applescript",
    "content": "#!/usr/bin/osascript\n\n# You need ExpressVPN for this script: https://www.expressvpn.com/latest#mac\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/expressvpn_logo.svg\n# @raycast.packageName ExpressVPN\n\n# Documentation:\n# @raycast.author Amir Hossein SamadiPour\n# @raycast.authorURL https://github.com/SamadiPour\n\ntell application \"ExpressVPN\"\n\tif state = \"connected\" then\n\t\tdo shell script \"echo Already Connected.\"\n\telse if state = \"connecting\" then\n\t\tdo shell script \"echo Please wait. Connecting...\"\n\telse if state = \"ready\" then\n\t\tconnect\n\tend if\nend tell\n"
  },
  {
    "path": "commands/apps/expressvpn/expressvpn-disconnect.applescript",
    "content": "#!/usr/bin/osascript\n\n# You need ExpressVPN for this script: https://www.expressvpn.com/latest#mac\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/expressvpn_logo.svg\n# @raycast.packageName ExpressVPN\n\n# Documentation:\n# @raycast.author Amir Hossein SamadiPour\n# @raycast.authorURL https://github.com/SamadiPour\n\ntell application \"ExpressVPN\"\n\tif state = \"connected\" or state = \"connecting\" then\n\t\tdisconnect\n\telse if state = \"ready\" then\n\t\tdo shell script \"echo Already Disconnected...\"\n\tend if\nend tell\n"
  },
  {
    "path": "commands/apps/expressvpn/expressvpn-reconnect.applescript",
    "content": "#!/usr/bin/osascript\n\n# You need ExpressVPN for this script: https://www.expressvpn.com/latest#mac\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Reconnect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/expressvpn_logo.svg\n# @raycast.packageName ExpressVPN\n\n# Documentation:\n# @raycast.author Amir Hossein SamadiPour\n# @raycast.authorURL https://github.com/SamadiPour\n\ntell application \"ExpressVPN\"\n\tif state = \"connected\" and not (state = \"connecting\") then\n\t\tdisconnect\n\t\tdelay 0.5\n\t\tconnect\n\telse if state = \"ready\" then\n\t\tconnect\n\tend if\nend tell\ndo shell script \"echo Reconnecting...\"\n"
  },
  {
    "path": "commands/apps/fantastical/create-event.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install Fantastical via the Mac App Store: https://apps.apple.com/us/app/fantastical-calendar-tasks/id975937182\n\n# @raycast.title Create Event\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Create an event in Fantastical\n# @raycast.schemaVersion 1\n\n# @raycast.icon ./images/fantastical.png\n# @raycast.mode silent\n# @raycast.packageName Fantastical\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\" }\n\non run argv \n  tell application \"Fantastical\"\n    parse sentence of (item 1 of argv)\n  end tell\nend run"
  },
  {
    "path": "commands/apps/fantastical/create-todo-in-fantastical.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install Fantastical via the Mac App Store: https://apps.apple.com/us/app/fantastical-calendar-tasks/id975937182\n\n# @raycast.title Create Task\n# @raycast.author Vardan Sawhney\n# @raycast.authorURL https://github.com/commai\n# @raycast.description Speed up setting reminders for Fantastical by invoking this script.\n# @raycast.schemaVersion 1\n\n# @raycast.icon ./images/fantastical.png\n# @raycast.mode silent\n# @raycast.packageName Fantastical\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Task to complete\" }\n\n\non run argv\n\ttell application \"Fantastical\"\n\t\tparse sentence \"todo today \" & (item 1 of argv)\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/ferdi/ferdi-open-service-by-index.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Ferdi to be installed: https://getferdi.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Service by Index\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/ferdi.png\n# @raycast.packageName Ferdi\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Index\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the keystroke (used only when Ferdi needs to be initialized)\n\tset keystrokeDelay to 5\n\n\t### End of configuration ###\n\n\tif item 1 of argv = \"\" then\n\t\tset serviceIndex to 1\n\telse\n\t\tset serviceIndex to item 1 of argv\n\tend if\n\n\tif application \"Ferdi\" is running then\n\t\tdo shell script \"open -a Ferdi\"\n\telse\n\t\tdo shell script \"open -a Ferdi\"\n\t\tdelay keystrokeDelay\n\tend if\n\n\ttell application \"System Events\" to keystroke serviceIndex using command down\n\nend run\n"
  },
  {
    "path": "commands/apps/ferdi/ferdi-open-service-by-name.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Ferdi to be installed: https://getferdi.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Service by Name\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/ferdi.png\n# @raycast.packageName Ferdi\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the click (used only when Ferdi needs to be initialized)\n\tset clickDelay to 5\n\n\t### End of configuration ###\n\n\tif application \"Ferdi\" is running then\n\t\tdo shell script \"open -a Ferdi\"\n\telse\n\t\tdo shell script \"open -a Ferdi\"\n\t\tdelay clickDelay\n\tend if\n\n\ttell application \"System Events\" to tell process \"Ferdi\"\n\t\tif item 1 of argv = \"\" then\n\t\t\tclick menu item 7 of menu 1 of menu bar item \"Services\" of menu bar 1\n\t\telse\n\t\t\tset serviceNames to name of menu items of menu 1 of menu bar item \"Services\" of menu bar 1\n\t\t\tset serviceNames to items 7 through -1 of serviceNames\n\n\t\t\trepeat with serviceName in serviceNames\n\t\t\t\tif serviceName contains item 1 of argv then\n\t\t\t\t\tclick menu item serviceName of menu 1 of menu bar item \"Services\" of menu bar 1\n\t\t\t\t\texit repeat\n\t\t\t\tend if\n\t\t\tend repeat\n\t\tend if\n\tend tell\n\nend run\n"
  },
  {
    "path": "commands/apps/find-my/README.md",
    "content": "# Find My Phone Raycast\n\nI lose my phone often, so I made this.\n\nThis is a Node.js script that uses Playwright to automate iCloud Find My and trigger a sound on your Apple device. It's perfect for people like me who misplace their phones and want a quick, automated way to make them ring—with Raycast.\n\n## Usage\n\n```sh\ngit clone https://github.com/vsvaidya27/fmp-raycast\ncd fmp-raycast\nnpm install\ncp .env.example .env\n# Edit .env with your real credentials\nchmod +x fmp.js\n```\n\n### Add to Raycast\n\n1. Open Raycast and go to **Extensions**.\n2. Click **Add**.\n3. Select **Add Script Directory**.\n4. Choose the `fmp-raycast` directory you just cloned.\n5. Set fmp as your alias for calling the script.\n\nNow you can trigger the script directly from Raycast!\n\n## How it works\n\n- Automates login to iCloud Find My using Playwright\n- Selects your device by name\n- Triggers the \"Play Sound\" feature to help you locate your device\n\n**Note:** You'll need to provide your iCloud credentials and device name in the `.env` file. Sometimes a 2FA check may pop up, but usually they allow you to bypass this and manual intervention is not neccesary (since you often need the very thing you are trying to find for 2FA).\n\n---\n\n## 🛠 Troubleshooting\n\n### If you get the error `env: node: No such file or directory`\n\nRaycast uses a limited shell environment, so it may not find your Node.js install.\n\nTo fix it:\n\n1. Run this in Terminal to find your full Node path:\n   ```bash\n   which node\n   ```\n2. Edit the top of `fmp.js`:\n   Replace:\n   ```sh\n   #!/usr/bin/env node\n   ```\n   With:\n   ```sh\n   #!/full/path/to/node\n   ```\n"
  },
  {
    "path": "commands/apps/find-my/fmp.js",
    "content": "#!/usr/bin/env node\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Find My Phone (Auto Sound)\n// @raycast.mode silent\n// @raycast.packageName FindMy\n// @raycast.icon images/find-my-icon.png\n\nrequire('dotenv').config();\nconst { chromium } = require('playwright');\n\n(async () => {\n  const browser = await chromium.launch({ headless: false });\n  const page = await browser.newPage();\n\n  // 1. Go to iCloud Find Devices\n  await page.goto('https://www.icloud.com/find');\n\n  // 2. Click \"Sign In\"\n  await page.waitForSelector('text=Sign In', { timeout: 20000 });\n  await page.click('text=Sign In');\n\n  // 3. Wait for the Apple login iframe to appear\n  const frameLocator = page.frameLocator('iframe[name=\"aid-auth-widget\"]');\n\n  // 4. Wait for the email/phone input inside the iframe\n  await frameLocator.getByRole('textbox', { name: 'Email or Phone Number' }).waitFor({ timeout: 20000 });\n\n  // 5. Fill in the email/phone\n  await frameLocator.getByRole('textbox', { name: 'Email or Phone Number' }).fill(process.env.ICLOUD_EMAIL);\n\n  // 6. Click the right-arrow button\n  await frameLocator.getByRole('button').first().click();\n\n  // 7. Wait for the \"Continue with Password\" button to appear, then click it\n  await frameLocator.getByRole('button', { name: /Continue with Password/i }).waitFor({ timeout: 20000 });\n  await frameLocator.getByRole('button', { name: /Continue with Password/i }).click();\n\n  // 8. Wait for password input\n  await frameLocator.getByRole('textbox', { name: 'Password' }).waitFor({ timeout: 20000 });\n  await frameLocator.getByRole('textbox', { name: 'Password' }).fill(process.env.ICLOUD_PASSWORD);\n\n  // 9. Click the arrow button to continue\n  await frameLocator.getByRole('button').first().click();\n\n  // 10. Wait for 2FA if needed; Hopefully not because this kinda defeats the purpose of automation even though its prob for the best security-wise :(\n  console.log('If prompted, please complete 2FA in the browser window. :(');\n\n  // 12. Click on your iPhone using the precise selector inside the second iframe\n  await page.locator('iframe').nth(1).contentFrame().getByTitle(process.env.DEVICE).getByTestId('show-device-name').click();\n\n  // 13. Wait for the device details panel to load\n  await page.waitForTimeout(2000);\n\n  // 14. Click the \"Play Sound\" button\n  await page.locator('iframe').nth(1).contentFrame().getByRole('button', { name: 'Play Sound' }).click();\n\n  console.log('✅ Play Sound triggered for ' + process.env.DEVICE + '!');\n  await browser.close();\n})();\n\n"
  },
  {
    "path": "commands/apps/find-my/package.json",
    "content": "{\n  \"name\": \"findmyraycast\",\n  \"version\": \"1.0.0\",\n  \"main\": \"fmp.js\",\n  \"scripts\": {\n    \"start\": \"node fmp.js\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"description\": \"\",\n  \"dependencies\": {\n    \"dotenv\": \"^16.5.0\",\n    \"playwright\": \"^1.52.0\"\n  }\n}\n"
  },
  {
    "path": "commands/apps/focus/focus-preferences.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Focus Preferences\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Open focus preferences.\n\nopen \"focus://preferences\""
  },
  {
    "path": "commands/apps/focus/focus-start-break-5.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Take 5 Minutes Break\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Take 5 minutes break.\n\nopen \"focus://break?minutes=5\""
  },
  {
    "path": "commands/apps/focus/focus-start-custom-break.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Custom Break\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Start a custom break. If you don't enter any values, it uses the last break duration.\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"optional\": true, \"percentEncoded\": true }\n\nopen \"focus://break?minutes=${1}\""
  },
  {
    "path": "commands/apps/focus/focus-start-custom-session.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Custom Focus Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Start a custom focus session. If you don't enter any values, it starts an untimed focus session.\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Hours\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"optional\": true, \"percentEncoded\": true  }\n\nopen \"focus://focus?hours=${1}&minutes=${2}\""
  },
  {
    "path": "commands/apps/focus/focus-start-session-25.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start 25 minutes Focus Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Start a 25 minutes focus session.\n\nopen \"focus://focus?minutes=25\""
  },
  {
    "path": "commands/apps/focus/focus-start-session.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Focus Session (Focus)\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Start an untimed focus session.\n\nopen \"focus://focus\""
  },
  {
    "path": "commands/apps/focus/focus-stop-break.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Break (Unbreak)\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Stop break and continues the current focus session.\n\nopen \"focus://unbreak\""
  },
  {
    "path": "commands/apps/focus/focus-stop-session.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Focus Session (Unfocus)\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Stop the current focus session.\n\nopen \"focus://unfocus\""
  },
  {
    "path": "commands/apps/focus/focus-toggle-focus.sh",
    "content": "#!/bin/bash\n\n# Note: Focus required\n# Install from: https://heyfocus.com\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Focus Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/focus-logo.png\n# @raycast.packageName Focus\n\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description Toggle between start session (untimed) and stop session.\n\nopen \"focus://toggle\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-last-unread-link.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Last Unread Link\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Open the last unread link in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/last\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-open-link.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Link\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Open a link in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\", \"percentEncoded\": true}\n\nopen \"goodlinks://x-callback-url/open?url=${1}\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-random-unread-link.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Random Unread Link\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Open a random unread link in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/random\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-read-list.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Read List\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Show Read list in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/read\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-save-link.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Save Link\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Saves a new link to GoodLinks\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\", \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Tags\", \"optional\": true, \"percentEncoded\": true}\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Title\", \"optional\": true, \"percentEncoded\": true}\n\nopen \"goodlinks://x-callback-url/save?url=${1}&tags=${2}&title=${3}&quick=1\"\n\necho \"Link saved!\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-starred-list.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Starred List\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Show Starred list in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/starred\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-tagged-links.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Tag\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Show links tagged with the specified tag in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"name\", \"percentEncoded\": true}\n\nopen \"goodlinks://x-callback-url/tag?name=${1}\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-unread-list.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Unread List\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Show Unread list in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/unread\""
  },
  {
    "path": "commands/apps/goodlinks/goodlinks-untagged-list.sh",
    "content": "#!/bin/bash\n\n# Install GoodLinks via Mac App Store: https://apps.apple.com/app/id1474335294\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Untagged List\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/goodlinks.png\n# @raycast.packageName GoodLinks\n\n# Documentation:\n# @raycast.description Show Untagged list in the GoodLinks app\n# @raycast.author Filip Chabik\n# @raycast.authorURL https://github.com/hadret\n\nopen \"goodlinks://x-callback-url/untagged\""
  },
  {
    "path": "commands/apps/hazeover/hazeover-set-intensity.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install HazeOver via Mac App Store: https://apps.apple.com/gb/app/hazeover-distraction-dimmer/id430798174\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Intensity\n# @raycast.mode silent\n# @raycast.packageName HazeOver\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Intensity (0-100)\" }\n\n# Optional parameters:\n# @raycast.icon images/hazeover.png\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Set dimming intensity of background windows.\n\non run argv \n  tell application \"HazeOver\"\n    set newIntensity to item 1 of argv as integer\n    \n    if newIntensity < 0 then\n      newIntensity = 0\n    else if newIntensity > 100 then\n      newIntensity = 100\n    end if\n    \n    set intensity to newIntensity\n\n    log \"Set intensity to \" & newIntensity & \"%\"\n  end tell\nend run"
  },
  {
    "path": "commands/apps/hazeover/hazeover-toggle-dimming.applescript",
    "content": "#!/usr/bin/osascript\n\n# Install HazeOver via Mac App Store: https://apps.apple.com/gb/app/hazeover-distraction-dimmer/id430798174\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Dimming\n# @raycast.mode silent\n# @raycast.packageName HazeOver\n\n# Optional parameters:\n# @raycast.icon images/hazeover.png\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Toggle dimming of all background windows.\n\ntell application \"HazeOver\"\n  set enabled to not enabled\n\n  if enabled then\n    log \"Enabled dimming\"\n  else\n    log \"Disabled dimming\"\n  end if\nend tell\n"
  },
  {
    "path": "commands/apps/hyper/hyper-run-shell-command.applescript",
    "content": "#!/usr/bin/osascript\n\n# Note: Hyper required\n# Install via Hyper.is: https://hyper.is/\n\n# Dependency: This script requires `hyperalfred` (https://github.com/gjuchault/hyperalfred)\n# Install via Hyper: `hyper i hyperalfred`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run Shell Command\n# @raycast.mode silent\n# @raycast.packageName Hyper\n\n# Optional parameters:\n# @raycast.icon images/hyper.png\n# @raycast.currentDirectoryPath ~\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command\" }\n\n# Documentation:\n# @raycast.description Run a terminal using Hyper\n# @raycast.author Eliot Hertenstein\n# @raycast.authorURL https://github.com/eIiot\n\non run argv\n  write_to_file( (item 1 of argv) , \"./.hyper_plugins/hyperalfred.txt\", false)\n  try\n    tell application \"Hyper\" to activate\n  on error e\n    log \"Hyper is required (https://hyper.is)\"\n    -- return false\n  end try\nend run\n\non write_to_file(this_data, target_file, append_data)\n  try\n    tell application \"System Events\" to exists file target_file\n    if not the result then do shell script \"> \" & quoted form of target_file\n    set the open_target_file to open for access target_file with write permission\n    if append_data is false then set eof of the open_target_file to 0\n    write this_data to the open_target_file starting at eof\n    close access the open_target_file\n    return true\n  on error e\n    try\n      log \"hyperalfred is required (https://github.com/gjuchault/hyperalfred).\"\n      close access target_file\n    end try\n    return false\n  end try\nend write_to_file"
  },
  {
    "path": "commands/apps/iconsur/iconsur.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires iconsur (https://github.com/rikumi/iconsur)\n# Install via Homebrew: `brew install iconsur`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Change Application Icon\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🅱️\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Application\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Root Password\", \"secure\": true, \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Use Local Icon (y)\" , \"optional\": true }\n# @raycast.packageName iconsur\n\n# Documentation:\n# @raycast.description Change App icons to match Big Sur\n# @raycast.author StevenRCE0\n# @raycast.authorURL https://github.com/StevenRCE0\n\n# Test iconsur\nt=$(which iconsur)\nif [ -z \"$t\" ]; then\n    echo \"Iconsur not found, install using brew install iconsur\"\n    exit 1\nfi\n\n# Workaround for the error message\nexec 2>/dev/null\n\n# Test file\nappPath=\"\"\nif [ -d \"/Applications/$1.app\" ]; then\n    appPath=\"/Applications/$1.app\"\nelif [ -d \"$HOME/Applications/$1.app\" ]; then\n    appPath=\"$HOME/Applications/$1.app\"\nelse\n    echo \"Application not found, make sure it's in Applications folder\"\n    exit 2\nfi\n\nloc=\"\"; omit=0\nif [ -z $3 ] && [ $2 = \"y\" -o $2 = \"Y\" ]; then\n    loc=\"-l\"\n    omit=1\nfi\nif [ $omit -eq 0 ] && [ $3 = \"y\" -o $3 = \"Y\" ]; then\n    loc=\"-l\"\nfi\n\n\nif [ $2 ] && [ $omit -eq 0 ]; then\n    echo $2|sudo -S iconsur set \"$appPath\" $loc\n    if [ ${PIPESTATUS[1]} -eq 1 ]; then\n        echo \"Password incorrect\"\n        exit 2\n    fi\nelse\n    iconsur set \"$appPath\" $loc 1>/dev/null\n    if [ ${PIPESTATUS[0]} -eq 1 ]; then\n        echo \"It didn't work, try again with password\"\n        exit 2\n    fi\nfi\n\necho \"Icon changed successfully\"\n"
  },
  {
    "path": "commands/apps/iterm/iterm-open-profile-in-new-window.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires iTerm (https://iterm2.com)\n# Install via Homebrew: `brew install --cask iterm2`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open profile\n# @raycast.packageName iTerm\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Placeholder\" }\n\n# Documentation:\n# @raycast.author sunrisewestern\n# @raycast.authorURL https://github.com/sunrisewestern\n\non is_running(appName)\n\ttell application \"System Events\" to (name of processes) contains appName\nend is_running\n\non run {argv}\n\tset iTermRunning to is_running(\"iTerm2\")\n\ttell application \"iTerm\"\n\t\tactivate\n\t\tif not (iTermRunning) then\n\t\t\tdelay 0.5\n\t\t\tclose the current window\n\t\tend if\n\t\tcreate window with profile argv\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/iterm/iterm-run-shell-command.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires iTerm (https://iterm2.com)\n# Install via Homebrew: `brew install --cask iterm2`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run Shell Command\n# @raycast.mode silent\n# @raycast.packageName iTerm\n\n# Optional parameters:\n# @raycast.icon images/iterm.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"shell command\" }\n\n# Documentation\n# @raycast.author Andrei Borisov\n# @raycast.authorURL https://github.com/andreiborisov\n\n-- Set this property to true to open in a new window instead of a new tab\nproperty open_in_new_window : false\n\n-- Handlers\non new_window()\n\ttell application \"iTerm\" to create window with default profile\nend new_window\n\non new_tab()\n\ttell application \"iTerm\" to tell the first window to create tab with default profile\nend new_tab\n\non call_forward()\n\ttell application \"iTerm\" to activate\nend call_forward\n\non is_running()\n\tapplication \"iTerm\" is running\nend is_running\n\non is_processing()\n\ttell application \"iTerm\" to tell the first window to tell current session to get is processing\nend is_processing\n\non has_windows()\n\tif not is_running() then return false\n\tif windows of application \"iTerm\" is {} then return false\n\ttrue\nend has_windows\n\non send_text(custom_text)\n\ttell application \"iTerm\" to tell the first window to tell current session to write text custom_text\nend send_text\n\n-- Main\non run argv\n\tif has_windows() then\n\t\t-- Open the command in the current session unless it has a running command, e.g., ssh or top\n\t\tif is_processing() then\n\t\t\tif open_in_new_window then\n\t\t\t\tnew_window()\n\t\t\telse\n\t\t\t\tnew_tab()\n\t\t\tend if\n\t\tend if\n\telse\n\t\t-- If iTerm is not running and we tell it to create a new window, we get two\n\t\t-- One from opening the application, and the other from the command\n\t\tif is_running() then\n\t\t\tnew_window()\n\t\telse\n\t\t\tcall_forward()\n\t\tend if\n\tend if\n\n\t-- Make sure a window exists before we continue, or the write may fail\n\trepeat until has_windows()\n\t\tdelay 0.01\n\tend repeat\n\n\tsend_text(argv)\n\tcall_forward()\nend run\n"
  },
  {
    "path": "commands/apps/lungo/lungo-activate.sh",
    "content": "#!/bin/bash\n\n# Note: Lungo v2.0.4 required\n# Install via Mac App Store: https://apps.apple.com/app/id1263070803\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Activate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/lungo.png\n# @raycast.packageName Lungo\n\n# Documentation:\n# @raycast.author Lungo\n# @raycast.authorURL https://sindresorhus.com/lungo\n# @raycast.description Deactivate Lungo.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"hours\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"minutes\", \"optional\": true, \"percentEncoded\": true }\n\nopen --background \"lungo:activate?hours=$1&minutes=$2\"\n"
  },
  {
    "path": "commands/apps/lungo/lungo-deactivate.sh",
    "content": "#!/bin/bash\n\n# Note: Lungo v2.0.4 required\n# Install via Mac App Store: https://apps.apple.com/app/id1263070803\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Deactivate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/lungo.png\n# @raycast.packageName Lungo\n\n# Documentation:\n# @raycast.author Lungo\n# @raycast.authorURL https://sindresorhus.com/lungo\n# @raycast.description Deactivate Lungo.\n\nopen --background lungo:deactivate\n"
  },
  {
    "path": "commands/apps/lungo/lungo-toggle.sh",
    "content": "#!/bin/bash\n\n# Note: Lungo v2.0.4 required\n# Install via Mac App Store: https://apps.apple.com/app/id1263070803\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/lungo.png\n# @raycast.packageName Lungo\n\n# Documentation:\n# @raycast.author Lungo\n# @raycast.authorURL https://sindresorhus.com/lungo\n# @raycast.description Toggle Lungo.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"hours\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"minutes\", \"optional\": true, \"percentEncoded\": true }\n\nopen --background \"lungo:toggle?hours=$1&minutes=$2\"\n"
  },
  {
    "path": "commands/apps/mail/copy-captcha-from-mail.py",
    "content": "#!/usr/bin/env python3\n\n# Copy the verification code from Mail.\n#\n# Dependency: This script requires the `emlx` package.\n# Install it via `pip install emlx`.\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title CaptchaFromMail\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/mail.png\n# @raycast.packageName Mail\n\n# Documentation:\n# @raycast.description Copy the captcha from the emlx file.\n# @raycast.author RealTong\n# @raycast.authorURL https://raycast.com/RealTong\n\nimport os\nimport re\nimport pyperclip\nimport emlx\n\n\ndef extract_captcha_from_emlx(emlx_path):\n    if emlx_file is None or os.path.exists(emlx_file) is False:\n        print(\"Mail not found\")\n        return\n    email = emlx.read(emlx_path)\n    headers = email.headers\n    content = email.html\n    subject = headers[\"Subject\"]\n    captcha_match_keyword = [\n        \"验证码\",\n        \"动态密码\",\n        \"代码\",\n        \"确认\",\n        \"码\",\n        \"verification\",\n        \"code\",\n        \"confirm\",\n    ]\n    content_pattern = r\"\\b[0-9]{6}\\b\"\n    subject_pattern = r\"\\b[a-zA-Z0-9]{6}\\b\"\n    # 判断内容中是否包含验证码关键字, 只有包含关键字的邮件才会查找验证码\n    for keyword in captcha_match_keyword:\n        if keyword in subject:\n            if re.search(subject_pattern, subject):\n                captcha = re.search(subject_pattern, subject).group()\n                pyperclip.copy(captcha)\n                print(\"Verification code successfully copied to clipboard:\", captcha)\n                return\n            if re.search(content_pattern, content):\n                captcha = re.search(content_pattern, content).group()\n                pyperclip.copy(captcha)\n                print(\"Verification code successfully copied to clipboard:\", captcha)\n                return\n            else:\n                print(\"Verification code not found\")\n        else:\n            print(\"Not a verification code email\")\n\n\ndef get_latest_emlx_file(folder):\n    latest_emlx_file = None\n    latest_mod_time = 0\n    for root, dirs, files in os.walk(folder):\n        for file in files:\n            if file.endswith(\".emlx\"):\n                file_path = os.path.join(root, file)\n                mod_time = os.path.getmtime(file_path)\n                if mod_time > latest_mod_time:\n                    latest_mod_time = mod_time\n                    latest_emlx_file = file_path\n\n    return latest_emlx_file\n\n\nif __name__ == \"__main__\":\n    try:\n        import emlx\n\n        os.listdir(f\"/\")\n    except ImportError:\n        print(\"emlx not installed, please run 'pip install emlx' to install it\")\n        exit(1)\n    except OSError:\n        print(\n            \"Currently there is no Full Disk Access permission， please grant Full Disk Access permission to the terminal in System Preferences > Security & Privacy > Privacy > Full Disk Access.\"\n        )\n        exit(1)\n    mail_path = f\"{os.path.expanduser('~')}/Library/Mail/V10/\"\n    emlx_file = get_latest_emlx_file(mail_path)\n    extract_captcha_from_emlx(emlx_file)\n"
  },
  {
    "path": "commands/apps/mail/copy-foreground-mail-deeplink.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Foreground Mail Deeplink\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📧\n# @raycast.packageName Mail\n\n# Documentation:\n# @raycast.description Copies the foreground Mail deeplink\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\ntell application \"System Events\"\n\tset frontmostApp to name of application processes whose frontmost is true\nend tell\n\n# https://apple.stackexchange.com/questions/122630/applescript-comparing-variable-to-string-is-failing/122631#122631\nif frontmostApp as string is equal to \"Mail\" then\n\t# https://daringfireball.net/2007/12/message_urls_leopard_mail\n\ttell application \"Mail\"\n\t\tset _sel to get selection\n\t\tset _links to {}\n\t\trepeat with _msg in _sel\n\t\t\tset _messageURL to \"message://%3c\" & _msg's message id & \"%3e\"\n\t\t\tset end of _links to _messageURL\n\t\tend repeat\n\t\tset AppleScript's text item delimiters to return\n\t\tset the clipboard to (_links as string)\n\n\t\tlog \"Copied email deeplink\"\n\tend tell\nelse\n\tlog \"Foreground app was \" & frontmostApp & \", not Mail\"\nend if\n"
  },
  {
    "path": "commands/apps/medo/add-task.sh",
    "content": "#!/bin/bash\n\n# Note: Medo v1.0 required\n# Install via Github Repo: https://github.com/Aayush9029/Medo\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Task\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/medo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Priority\", \"default\": \"low\",\"optional\": true}\n# @raycast.packageName Medo\n\n# Documentation:\n# @raycast.description Add a new task\n# @raycast.author Aayush \n# @raycast.authorURL https://github.com/Aayush9029\n\nopen \"medo://add-task?title=$1&p=$2\"\n"
  },
  {
    "path": "commands/apps/medo/medo-float-large.sh",
    "content": "#!/bin/bash\n\n# Note: Medo v1.0 required\n# Install via Github Repo: https://github.com/Aayush9029/Medo\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Medo Float Large\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/medo.png\n# @raycast.packageName Medo\n\n# Documentation:\n# @raycast.description Add a new task with priority \n# @raycast.author Aayush \n# @raycast.authorURL https://github.com/Aayush9029\n\nopen \"medo://show-large\"\n"
  },
  {
    "path": "commands/apps/medo/medo-float-small.sh",
    "content": "#!/bin/bash\n\n# Note: Medo v1.0 required\n# Install via Github Repo: https://github.com/Aayush9029/Medo\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Medo Float Small\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/medo.png\n# @raycast.packageName Medo\n\n# Documentation:\n# @raycast.description Add a new task with priority \n# @raycast.author Aayush \n# @raycast.authorURL https://github.com/Aayush9029\n\nopen \"medo://show-small\"\n"
  },
  {
    "path": "commands/apps/medo/medo-float.sh",
    "content": "#!/bin/bash\n\n# Note: Medo v1.0 required\n# Install via Github Repo: https://github.com/Aayush9029/Medo\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Medo Float\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/medo.png\n# @raycast.packageName Medo\n\n# Documentation:\n# @raycast.description Add a new task with priority \n# @raycast.author Aayush \n# @raycast.authorURL https://github.com/Aayush9029\n\nopen \"medo://show-medium\"\n"
  },
  {
    "path": "commands/apps/meetingbar/meetingbar-create-meeting.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# MeetingBar: https://github.com/leits/MeetingBar\n\n# Recommended installation:\n# brew install --cask meetingbar\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Meeting\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/meetingbar.png\n# @raycast.packageName MeetingBar\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Create a new meeting.\n\non run\n\t\n\ttry\n\t\trunMeetingBar()\n\t\tcreateMeeting()\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non createMeeting()\n\topenMenu()\n\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tclick menu item \"Create meeting\"\n\t\tend tell\n\tend tell\nend createMeeting\n\non MeetingBarIsRunning()\n\treturn application \"MeetingBar\" is running\nend MeetingBarIsRunning\n\non runMeetingBar()\n\tif not MeetingBarIsRunning() then do shell script \"open -a 'MeetingBar'\"\nend runMeetingBar\n\non menuIsOpen()\n\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu"
  },
  {
    "path": "commands/apps/meetingbar/meetingbar-join-meeting.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# MeetingBar: https://github.com/leits/MeetingBar\n\n# Recommended installation:\n# brew install --cask meetingbar\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Join Meeting\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/meetingbar.png\n# @raycast.packageName MeetingBar\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Join the ongoing or upcoming meeting.\n\non run\n\t\n\ttry\n\t\trunMeetingBar()\n\t\tjoinMeeting()\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non joinMeeting()\n\topenMenu()\n\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tif menu item \"Join current event meeting\" exists then\n\t\t\t\tclick menu item \"Join current event meeting\"\n\t\t\telse if menu item \"Join next event meeting\" exists then\n\t\t\t\tclick menu item \"Join next event meeting\"\n\t\t\telse\n\t\t\t\terror \"No meetings found\"\n\t\t\tend if\n\t\tend tell\n\tend tell\nend joinMeeting\n\non MeetingBarIsRunning()\n\treturn application \"MeetingBar\" is running\nend MeetingBarIsRunning\n\non runMeetingBar()\n\tif not MeetingBarIsRunning() then do shell script \"open -a 'MeetingBar'\"\nend runMeetingBar\n\non menuIsOpen()\n\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell application process \"MeetingBar\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu"
  },
  {
    "path": "commands/apps/menubarx/close-last-menubarx-tab.sh",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close Last Tab\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/menubarx_logo.png\n# @raycast.packageName MenubarX\n\n# Documentation:\n# @raycast.description Close last viewed tab in MenubarX\n# @raycast.author Clu Soh\n# @raycast.authorURL https://twitter.com/designedbyclu\n\ntell application \"MenubarX\" to activate\ndelay 0.1\ntell application \"System Events\" to tell process \"MenubarX\"\n\tkey code 13 using {shift down, command down}\nend tell\ndo shell script \"echo Closed tab\""
  },
  {
    "path": "commands/apps/menubarx/open-in-menubarx.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open in MenubarX\n# @raycast.mode silent\n# Optional parameters:\n# @raycast.icon images/menubarx_logo.png\n# @raycast.packageName MenubarX\n\n# Documentation:\n# @raycast.description Open Pasteboard link in MenubarX\n# @raycast.author Clu Soh\n# @raycast.authorURL https://twitter.com/designedbyclu\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\npasteboard=$(pbpaste)\n\nif [[ $pasteboard =~ $regex ]]\nthen \n    open \"menubarx://open/?xurl=$pasteboard\"\n    echo \"Opened in MenubarX\"\nelse\n    echo \"Seem like is not a URL you copied\"\nfi\n    \n\n\n\n"
  },
  {
    "path": "commands/apps/menubarx/open-tab-in-menubar.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Tabs\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/menubarx_logo.png\n# @raycast.packageName MenubarX\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Tabs 1~9\" }\n\n# Documentation:\n# @raycast.description Open X Tab in your menubar\n# @raycast.author Clu Soh\n# @raycast.authorURL https://twitter.com/designedbyclu\n\n\non run argv\n\t\tset tabNum to item 1 of argv\n\n\t if tabNum is equal to \"1\" then\n\t\ttell application \"MenubarX\" to activate\n\t\t\tdelay 0.1\n\t\t\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\t\tkeystroke \"1\" using command down\n\t\tend tell\n\telse  if tabNum is equal to \"2\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"2\" using command down\n\t\tend tell\n\telse  if tabNum is equal to \"3\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"3\" using command down\n\t\tend tell\n\telse if tabNum is equal to \"4\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"4\" using command down\n\t\tend tell\n\telse  if tabNum is equal to \"5\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"5\" using command down\n\t\tend tell\n\telse  if tabNum is equal to \"6\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"6\" using command down\n\t\tend tell\n\telse if tabNum is equal to \"7\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"7\" using command down\n\t\tend tell\n\telse if tabNum is equal to \"8\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"8\" using command down\n\t\tend tell\n\telse if tabNum is equal to \"9\" then\n\t\ttell application \"MenubarX\" to activate\n\t\tdelay 0.1\n\t\t\ttell application \"System Events\" to tell process \"MenubarX\"\n\t\t\tkeystroke \"9\" using command down\n\t\tend tell\n\tend if\nend run\n"
  },
  {
    "path": "commands/apps/mullvad/README.md",
    "content": "# Mullvad Package\n\nA package of script commands to manage [Mullvad VPN](https://mullvad.net/) tunnel connections, wrapping the [Mullvad CLI](https://mullvad.net/en/help/cli-command-wg/).\n\n## Dependencies\n\nAll commands in this package require the [Mullvad CLI](https://mullvad.net/en/help/cli-command-wg/). It is installed automatically when installing [the official desktop client](https://mullvad.net/download/). The _Search Countries, Cities, and Hostnames_ command also requires the [`fzf` utility](https://github.com/junegunn/fzf/). Install it via homebrew:\n\n```sh\n$ brew install fzf\n```\n\nAdditional installation options are available in the tools' respective documentation.\n\n## Command Usage\n\nBecause usage of the CLI is dependent on the the official desktop client app, all script commands are executed in the context of the user account currently logged in there.\n\n### Connect\n\n<img src=\"./images/connect.png\">\n\nThis command executes in `silent` mode, and connects to a Mullvad VPN tunnel using the most recently set configuration settings.\n\n### Connect to Location\n\n<img src=\"./images/location.png\">\n\nThis command executes in `silent` mode, and connects to a Mullvad VPN tunnel satisfying the values of the passed `Country`, `City`, and `Hostname` arguments. Each argument expects their values in a specific format, but only `Country` is required. To retrieve the correct value(s) for your desired connection, use the [_Search Countries, Cities, and Hostnames_ command](#search-countries-cities-and-hostnames).\n\n### Disconnect\n\n<img src=\"./images/disconnect.png\">\n\nThis command executes in `silent` mode, and disconnects from the currently connected Mullvad VPN tunnel.\n\n### Reconnect\n\n<img src=\"./images/reconnect.png\">\n\nThis command executes in `silent` mode, and disconnects, then immediately connects again to the currently connected Mullvad VPN tunnel.\n\n### Search Countries, Cities, and Hostnames\n\n<img src=\"./images/search.png\">\n\nThis command executes in `fullOutput` mode, searches the available countries, cities, and hostnames to which Mullvad VPN tunnel connections are possible, and prints all search results sorted by relevance in the following format:\n\n```\nCOUNTRIES:\nUSA (us)\nAustria (at)\nAustralia (au)\nUnited Arab Emirates (ae)\n\nCITIES:\nSalt Lake City, UT (slc)\nBrussels (bru)\nDusseldorf (dus)\nSecaucus, NJ (uyk)\nSao Paulo (sao)\nBudapest (bud)\nBucharest (buh)\n\nHOSTNAMES:\nus-mia-202 (193.27.12.2) - OpenVPN, hosted by M247\nus-nyc-201 (89.46.62.15) - OpenVPN, hosted by M247\nus-nyc-202 (89.46.62.28) - OpenVPN, hosted by M247\nus-nyc-203 (89.46.62.41) - OpenVPN, hosted by M247\nus-nyc-204 (89.46.62.54) - OpenVPN, hosted by M247\n...\n```\n> The `Query` used to generate the above list is `us`, with the `Show Hostnames?` argument set to `y`. Results are truncated for brevity, and current as of March 20, 2021.\n\nIn the actual Raycast output, the values to be used with the [_Connect to Location_ command](#connect-to-location) are printed in\n<span style=\"color: yellow;background-color: gray;font-family: monospace;padding: 2px;border-radius: 5px;\">yellow</span>\n. Because of the large number of possible search results, hostnames are omitted by default. They can be displayed by passing `y` as the value of the `Show Hostnames?` argument.\n\n### Status\n\n<img src=\"./images/status.png\">\n\nThis dashboard command will show the current connection state of the Mullvad VPN tunnel. It automatically updates every five minutes.\n"
  },
  {
    "path": "commands/apps/mullvad/connect.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Connect the Mullvad VPN tunnel using the most recent configuration settings.\n#\n# Dependencies:\n# The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"The Mullvad CLI is not installed\"\n  exit 1\nfi\n\nmullvad connect --wait\n\nsuccess=$?\nif [ $success -ne 0 ]; then\n  echo \"Failed to establish a VPN tunnel\"\n  exit 1\nfi\n\nstatus=$(mullvad status)\necho \"$status\"\n"
  },
  {
    "path": "commands/apps/mullvad/disconnect.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Disconnect from the Mullvad VPN tunnel.\n#\n# Dependencies:\n# The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"The Mullvad CLI is not installed\"\n  exit 1\nfi\n\nmullvad disconnect --wait\n\nsuccess=$?\nif [ $success -ne 0 ]; then\n  echo \"Failed to disconnect from the VPN tunnel\"\n  exit 1\nfi\n\necho \"Disconnected and unsecured\"\n"
  },
  {
    "path": "commands/apps/mullvad/location.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect to Location\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Country (2-letter code)\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"City (3-letter code)\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Hostname\", \"optional\": true }\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Connect the Mullvad VPN tunnel using the specified location.\n#\n# Dependencies:\n# The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"The Mullvad CLI is not installed\"\n  exit 1\nfi\n\nlocation=$(mullvad relay set location \"$@\" 2>&1)\nlocation_set=$?\n\nif [ $location_set -ne 0 ]; then\n  echo \"${location//error: /}\"\n  exit 1\nfi\n\nmullvad connect --wait\n\nsuccess=$?\nif [ $success -ne 0 ]; then\n  echo \"Failed to establish a VPN tunnel\"\n  exit 1\nfi\n\nstatus=$(mullvad status)\necho \"$status\"\n"
  },
  {
    "path": "commands/apps/mullvad/reconnect.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Reconnect\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Force the client to reconnect to the Mullvad VPN tunnel.\n#\n# Dependencies:\n# The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"The Mullvad CLI is not installed\"\n  exit 1\nfi\n\nmullvad reconnect --wait\n\nsuccess=$?\nif [ $success -ne 0 ]; then\n  echo \"Failed to reconnect to the VPN tunnel\"\n  exit 1\nfi\n\nstatus=$(mullvad status --location)\nif [[ $status == *\"Tunnel status: Disconnected\"* ]]; then\n  echo \"No active connection to reconnect!\"\n  exit 0\nfi\n\necho \"$status\"\n"
  },
  {
    "path": "commands/apps/mullvad/search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Countries, Cities, and Hostnames\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Show Hostnames? (y/n)\", \"optional\": true }\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Search the list of available entities to which a Mullvad VPN tunnel connection can be made.\n#\n# Dependencies:\n# 1. The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n# 2. The `fzf` utility: https://github.com/junegunn/fzf\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"The Mullvad CLI is not installed (https://mullvad.net/en/help/cli-command-wg/)\"\n  exit 1\nelif ! command -v fzf &> /dev/null; then\n  echo \"The fzf utility is not installed (https://github.com/junegunn/fzf)\"\n  echo \"Install via Homebrew with 'brew install fzf'\"\n  exit 1\nfi\n\nBLUE=$'\\e[1;34m'\nBOLD_YELLOW=$'\\e[1;33m'\nBOLD_RED=$'\\e[1;31m'\nBOLD_GREEN=$'\\e[1;32m'\nEND=$'\\e[0m'\n\ncountries=()\ncities=()\nhostnames=()\n\ncolorize_location_value() {\n  echo $1 | sed -r 's/\\((.{'$2'})\\)/\\('$BOLD_YELLOW'\\1'$END'\\)/'\n}\n\nprint_blue() {\n  printf \"%s%s%s\\n\" $BLUE $1 $END\n}\n\nprint_array() {\n  for i in \"$@\"; do\n    echo \"$i\"\n  done\n}\n\nwireguard_bias() {\n  echo $1 | sed -r 's/OpenVPN/'$BOLD_RED'OpenVPN'$END'/' | sed -r 's/WireGuard/'$BOLD_GREEN'WireGuard'$END'/'\n}\n\nentities=$(mullvad relay list | fzf -i --filter \"$1\")\n\nif [ ${#entities} -eq 0 ]; then\n  printf \"%sNo results%s found for \\\"%s\\\".\\n\" $BOLD_RED $END $1\n  exit 0\nfi\n\nprintf \"The values printed in %syellow%s are meant to be used with the \\\"Connect to Location\\\" script.\\n\\n\" $BOLD_YELLOW $END\n\nwhile IFS= read -r entity; do\n  if [[ \"$entity\" == \"$(printf '\\t\\t')\"* ]]; then\n    hostname=$(echo \"$entity\" | sed -r 's/\\t//g' | sed -r 's/^(.*) \\(/'$BOLD_YELLOW'\\1'$END' \\(/')\n    hostnames+=(\"$(wireguard_bias \"$hostname\")\")\n\n  elif [[ \"$entity\" == \"$(printf '\\t')\"* ]]; then\n    city=$(echo \"$entity\" | sed -r 's/\\t(.*)@.*/\\1/')\n    cities+=(\"$(colorize_location_value \"$city\" 3)\")\n\n  elif [ -n \"$entity\" ]; then\n    countries+=(\"$(colorize_location_value \"$entity\" 2)\")\n  fi\ndone <<< \"$entities\"\n\nif [ ${#countries} -ne 0 ]; then\n  print_blue \"COUNTRIES:\"\n  print_array \"${countries[@]}\"\n  echo \" \"\nfi\n\nif [ ${#cities} -ne 0 ]; then\n  print_blue \"CITIES:\"\n  print_array \"${cities[@]}\"\n  echo \" \"\nfi\n\nif [[ -n $2 && $2 == \"y\" && ${#hostnames} -ne 0 ]]; then\n  print_blue \"HOSTNAMES:\"\n  print_array \"${hostnames[@]}\"\n  echo \" \"\nfi\n"
  },
  {
    "path": "commands/apps/mullvad/status.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Mullvad Status\n# @raycast.mode inline\n#\n# Conditional parameters:\n# @raycast.refreshTime 5m\n#\n# Optional parameters:\n# @raycast.packageName Mullvad\n# @raycast.icon images/mullvad.png\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Display the current status of the Mullvad VPN tunnel connection.\n#\n# Dependencies:\n# The Mullvad CLI: https://mullvad.net/en/help/cli-command-wg/\n\nif ! command -v mullvad &> /dev/null; then\n  echo \"⚠️  The Mullvad CLI is not installed\"\n  exit 1\nfi\n\nstatus=$(mullvad status)\n\nsuccess=$?\nif [ $success -ne 0 ]; then\n  echo \"⚠️  Failed to update VPN tunnel connection status\"\n  exit 1\nfi\n\nif [[ $status == *\"Disconnected\"* ]]; then\n  echo \"❌  Disconnected and unsecured\"\nelse\n  echo \"✅  $status\"\nfi\n"
  },
  {
    "path": "commands/apps/noteplan3/README.md",
    "content": "# NotePlan3\n\nScript commands for [NotePlan3](https://noteplan.co)\n\n![screenshot](images/screenshot.png)\n\n## Commands\n\n- **Append To Daily Note**: Appends input text to the Daily note of today. Really simple input that can include *, - or markdown for formatting. If input is left blank it will instead paste whatever text is in your clipboard.\n\n- **New Note From Clipboard**: Create a new note with a title and the contents of the clipboard (only works with text).\n"
  },
  {
    "path": "commands/apps/noteplan3/noteplan-append-daily-note.sh",
    "content": "#!/bin/bash\n\n# Note: NotePlan3 required\n# Install via Mac App Store: https://apps.apple.com/app/noteplan-3/id1505432629\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Append To Daily Note\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/noteplan3.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"- Quick note\", \"percentEncoded\": true, \"optional\": true }\n# @raycast.packageName NotePlan3\n\n# Documentation: Appends text to the daily note. If no input is given it will use the current clipboard item.\n# @raycast.description Append to daily note\n# @raycast.author Göran Damberg\n# @raycast.authorURL https://github.com/gdamberg\n\ntext=\"\"\nif [ -z \"${1}\" ]; then\n    text=\"$(pbpaste | python3 -c 'import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))')\"\nelse\n    text=\"${1}\"\nfi\nopen \"noteplan://x-callback-url/addText?noteDate=today&mode=append&openNote=no&text=${text}\"\n\necho \"Appended to daily note.\""
  },
  {
    "path": "commands/apps/noteplan3/noteplan-new-note-from-clipboard.sh",
    "content": "#!/bin/bash\n\n# Note: NotePlan3 required\n# Install via Mac App Store: https://apps.apple.com/app/noteplan-3/id1505432629\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title New Note From Clipboard\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon images/noteplan3.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true, \"optional\": false }\n# @raycast.packageName NotePlan3\n\n# Documentation: Creates a new note from clipboard\n# @raycast.description Create a new note from clipboard\n# @raycast.author Göran Damberg\n# @raycast.authorURL https://github.com/gdamberg\n\ntext=\"$(pbpaste | python3 -c 'import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))')\"\n\nopen \"noteplan://x-callback-url/addNote?noteTitle=${1}&openNote=yes&text=${text}\""
  },
  {
    "path": "commands/apps/notes/append-note-from-clipboard.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Append Content From Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/notes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Note Name\" }\n# @raycast.packageName Notes\n\n# Documentation:\n# @raycast.description Script to append to an existing note content from clipboard.\n# @raycast.author Ayoub Gharbi\n# @raycast.authorURL https://github.com/ayoub-g\n\non run argv \n\ttell application \"Notes\"\n\t\tset note_name to (item 1 of argv)\n\t\tif exists note note_name then\n\t\t\t\n\t\t\tshow note note_name\n\t\t\tset new_content to the clipboard\n\t\t\tset note_content to body of note note_name \n\t\t\tset body of note note_name to note_content & new_content\n\t\telse\n\t\t\tlog \"Note \\\"\" & note_name & \"\\\" was not found\"\n\t\tend if\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/notes/create-note-from-clipboard.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Note From Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/notes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Note Name\" }\n# @raycast.packageName Notes\n\n# Documentation:\n# @raycast.description Create Note From Clipboard\n# @raycast.author Ayoub Gharbi\n# @raycast.authorURL https://github.com/ayoub-g\n\non run argv\n\tset content to \"<body><h1 style=\\\"color:black;\\\"> \" & (item 1 of argv)  & \"</h1> \n\t<p style=\\\"color:black;\\\" >\" & (the clipboard as Unicode text) & \"</p>\n\t</body>\"\ntell application \"Notes\"\n\t\tactivate\n\t\tmake new note at folder \"Notes\" with properties {name:\"\", body:content}\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/notes/create-note.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Note\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/notes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Note Name\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Text\" }\n# @raycast.packageName Notes\n\n# Documentation:\n# @raycast.description Create a new Note \n# @raycast.author Vardan Sawhney\n# @raycast.authorURL https://github.com/commai\n\n\non run argv\n\tset content to \"<body><h1 style=\\\"color:black;\\\"> \" & (item 1 of argv)  & \"</h1> \n\t<p style=\\\"color:black;\\\" >\" & (item 2 of argv) & \"</p>\n\t</body>\"\n\t\n\ttell application \"Notes\"\n\t\tactivate\n\t\tmake new note at folder \"Notes\" with properties {name: \"\", body:content}\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/notes/open-note.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Note\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/notes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Note Title\" }\n# @raycast.packageName Notes\n\n# Documentation:\n# @raycast.description Open Note via its Title\n# @raycast.author Vardan Sawhney\n# @raycast.authorURL https://github.com/commai\n\non run argv\n\ttell application \"Notes\"\n\t\tif exists note (item 1 of argv)\n\t\t\tshow note (item 1 of argv)\n\t\telse \n\t\t\tlog \"Sorry, the note \\\"\" & (item 1 of argv) & \"\\\" was not found\" \n\t\tend if\n\tend tell\nend run\n"
  },
  {
    "path": "commands/apps/notes/search-note-by-name.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Note By Name\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/notes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Exact Note Name or a Substring\" }\n# @raycast.packageName Notes\n\n# Documentation:\n# @raycast.description This script searches for a note, given its exact name, or a substring, the search does not consider case\n# if two notes or more have the same given substring the script will always show the first one\n# @raycast.author Ayoub Gharbi\n# @raycast.authorURL github.com/ayoub-g\n\non run argv\n\n\tset note_to_search to (item 1 of argv)\n\ttell application \"Notes\"\n\t\tactivate\n\t\tset search_complete to false\n\t\tset note_found to false\n\n\t\tset folder_index to 1\n\t\tset folders_count to (count of folders)\n\t\trepeat while search_complete is false\n\t\t\t\n\t\t\tset note_index to 1\n\t\t\tset end_list to false\n\t\t\tset leave_list to false\n\t\t\t\n\t\t\tset note_names to (name of notes of folder folder_index)\n\n\t\t\trepeat while leave_list is false\n\t\t\t\t\n\t\t\t\tset note_name to item note_index of note_names\n\n\t\t\t\tif note_to_search is in note_name then\n\t\t\t\t\t\n\t\t\t\t\tshow note note_name\n\t\t\t\t\tset note_found to true\n\t\t\t\t\tset search_complete to true\n\t\t\t\tend if\n\t\t\t\t\n\t\t\t\tset note_index to (note_index + 1)\n\n\t\t\t\tif note_index > (count of note_names) then\n\t\t\t\t\tset end_list to true\n\t\t\t\tend if\n\n\t\t\t\tset leave_list to end_list or note_found\n\n\t\t\tend repeat\n\t\t\t\n\t\t\tset folder_index to (folder_index + 1)\n\t\t\t\n\t\t\tif folder_index > folders_count then\n\t\t\t\tset search_complete to true\n\t\t\tend if\n\t\tend repeat\n\tend tell\nend run"
  },
  {
    "path": "commands/apps/obsidian/obsidian-create-note.template.sh",
    "content": "#!/bin/bash\n\n# Note: Obsidian v0.8.15+ required\n# Install via: 1) https://obsidian.md 2) brew install --cask obsidian\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Note\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/obsidian.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": false, \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Content\", \"optional\": true, \"percentEncoded\": true}\n# @raycast.packageName Obsidian\n\n# Documentation:\n# @raycast.description Create a new note\n# @raycast.author Yiyao Wei\n# @raycast.authorURL https://github.com/HotThoughts\n\n# The name of your vault, e.g., \"Knowledge Base\"\nVAULT_NAME=\"\"\n\nif [ -z \"$VAULT_NAME\" ]\nthen\n  echo \"Configure VAULT_NAME\"\n  exit 1\nfi\n\nopen \"obsidian://new?vault=$VAULT_NAME&name=${1}&content=${2}\"\n"
  },
  {
    "path": "commands/apps/obsidian/obsidian-search-vault.template.sh",
    "content": "#!/bin/bash\n\n# Note: Obsidian v0.8.15+ required\n# Install via: 1) https://obsidian.md 2) brew install --cask obsidian\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Vault\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/obsidian.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Type to search in vault...\" }\n# @raycast.packageName Obsidian\n\n# Documentation:\n# @raycast.description Search Obsidian Vault\n# @raycast.author Yiyao Wei\n# @raycast.authorURL https://github.com/HotThoughts\n\n# The name of your vault, e.g., \"Knowledge Base\"\nVAULT_NAME=\"\"\n\nif [ -z \"$VAULT_NAME\" ]\nthen\n  echo \"Configure VAULT_NAME\"\n  exit 1\nfi\n\nopen \"obsidian://search?vault=$VAULT_NAME&query=${1}\"\n"
  },
  {
    "path": "commands/apps/one-thing/one-thing-clear-text.sh",
    "content": "#!/bin/bash\n\n# Note: One Thing required\n# Install via Mac App Store: https://apps.apple.com/app/id1604176982\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Text\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/one-thing.png\n# @raycast.packageName One Thing\n\n# Documentation:\n# @raycast.author One Thing\n# @raycast.authorURL https://sindresorhus.com/one-thing\n# @raycast.description Clear the text shown in One Thing app.\n\nopen --background \"one-thing:?text=\"\n"
  },
  {
    "path": "commands/apps/one-thing/one-thing-set-text.sh",
    "content": "#!/bin/bash\n\n# Note: One Thing required\n# Install via Mac App Store: https://apps.apple.com/app/id1604176982\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Text\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/one-thing.png\n# @raycast.packageName One Thing\n\n# Documentation:\n# @raycast.author One Thing\n# @raycast.authorURL https://sindresorhus.com/one-thing\n# @raycast.description Set the text shown in One Thing app.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"percentEncoded\": true }\n\nopen --background \"one-thing:?text=$1\"\n"
  },
  {
    "path": "commands/apps/openvpn/connect-openvpn.applescript",
    "content": "#!/usr/bin/osascript\n\n# Note: OpenVPN v3.3+ recommended\n# Install via https://openvpn.net/vpn-client/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect OpenVPN\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ./images/openvpn.png\n# @raycast.packageName OpenVPN\n#\n# Documentation:\n# @raycast.description Prepares OpenVPN Connect client to connect or reconnect.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\nif application \"OpenVPN Connect\" is running then\n  -- no op\nelse\n  tell application \"OpenVPN Connect\" to activate\n  delay 3 --wait for init\nend if\n\nignoring application responses --removes 5 sec delay (via caching?)\n  tell application \"System Events\" to tell process \"OpenVPN Connect\" to click menu bar item 1 of menu bar 2\nend ignoring\ndelay 0.1\ndo shell script \"killall System\\\\ Events\"\n\ntell application \"System Events\" to tell process \"OpenVPN Connect\" to tell menu bar item 1 of menu bar 2\n  click\n  get menu items of menu 1\n  try\n    click menu item \"Connect\" of menu 1\n    do shell script \"echo OpenVPN ready to connect\"\n  on error --menu item toggles between connect/disconnect\n    key code 53 --escape key to close menu\n    do shell script \"echo Already connected\"\n  end try\nend tell\n"
  },
  {
    "path": "commands/apps/openvpn/disconnect-openvpn.applescript",
    "content": "#!/usr/bin/osascript\n\n# Note: OpenVPN v3.3+ recommended\n# Install via https://openvpn.net/vpn-client/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect OpenVPN\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ./images/openvpn.png\n# @raycast.packageName OpenVPN\n#\n# Documentation:\n# @raycast.description Disconnects the OpenVPN Connect client from VPN.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\n-- shouldn't try to disconnect if app isn't running, but sometimes we do things without awareness ;)\nif application \"OpenVPN Connect\" is running then\n  -- no op\nelse\n  return \"OpenVPN Connect not running\"\nend if\n\nignoring application responses --removes 5 sec delay (via caching?)\n  tell application \"System Events\" to tell process \"OpenVPN Connect\" to click menu bar item 1 of menu bar 2\nend ignoring\ndelay 0.1\ndo shell script \"killall System\\\\ Events\"\n\ntell application \"System Events\" to tell process \"OpenVPN Connect\" to tell menu bar item 1 of menu bar 2\n  click\n  get menu items of menu 1\n  try\n    click menu item \"Disconnect\" of menu 1\n    do shell script \"echo OpenVPN disconnected\"\n  on error --menu item toggles between connect/disconnect\n    key code 53 --escape key to close menu\n    do shell script \"echo Already disconnected\"\n  end try\nend tell\n"
  },
  {
    "path": "commands/apps/openvpn/quit-openvpn.applescript",
    "content": "#!/usr/bin/osascript\n\n# Note: OpenVPN v3.3+ recommended\n# Install via https://openvpn.net/vpn-client/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Quit OpenVPN\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ./images/openvpn.png\n# @raycast.packageName OpenVPN\n#\n# Documentation:\n# @raycast.description Quits the OpenVPN Connect client.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\n-- shouldn't try to quit if app isn't running, but sometimes we do silly things ;)\nif application \"OpenVPN Connect\" is running then\n  -- no op\nelse\n  return \"OpenVPN Connect not running\"\nend if\n\nignoring application responses --removes 5 sec delay (via caching?)\n  tell application \"System Events\" to tell process \"OpenVPN Connect\" to click menu bar item 1 of menu bar 2\nend ignoring\ndelay 0.1\ndo shell script \"killall System\\\\ Events\"\n\ntell application \"System Events\" to tell process \"OpenVPN Connect\" to tell menu bar item 1 of menu bar 2\n  click\n  get menu items of menu 1\n  click menu item \"Exit\" of menu 1\n  do shell script \"echo OpenVPN exited\"\nend tell\n\n"
  },
  {
    "path": "commands/apps/phpstorm/.gitignore",
    "content": "icon.icns\nphpstorm-open-*.bash\noptions.csv"
  },
  {
    "path": "commands/apps/phpstorm/recent-projects.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Update Recent Projects\n# @raycast.mode inline\n#\n# Optional parameters:\n# @raycast.packageName PhpStorm\n# @raycast.icon icon.icns\n#\n# Conditional parameters:\n# @raycast.refreshTime 5m\n#\n# Requirements\n# Raygen (https://github.com/pomdtr/raygen) and PhpStorm installed via JetBrains Toolbox\n\nraygen=$(find /Library/Frameworks/Python.framework -name raygen -type f || true)\n[[ -z $raygen ]] && echo \"run 'pip install git+https://github.com/pomdtr/raygen.git' to use this script\" && exit 1\n\n[[ ! -d ~/Library/Application\\ Support/JetBrains ]] && echo \"No JetBrains support path\" && exit 1\n\n[[ ! -f ~/.config/jetbrains/bin/phpstorm ]] && echo \"Install the PhpStorm script via JetBrains Toolbox\" && exit 1\n\nphpstormVersion=$(find -s ~/Library/Application\\ Support/JetBrains -type d -name 'PhpStorm*' -depth 1 | tail -n 1)\n[[ -z $phpstormVersion ]] && echo \"could not find PhpStorm version\" && exit 1\n\n# copy the icons file from the application\n[[ -f \"icon.icns\" ]] || cp ~/Applications/JetBrains\\ Toolbox/PhpStorm.app/Contents/Resources/icon.icns .\n\n# newest projects are at the bottom\ntop20=$(find \"$phpstormVersion\" -type f -name recentProjects.xml -exec grep -Eo 'key=\"[^\"]*' {} \\; | cut -f2 -d '\"' | tail -n 20)\n\necho \"title,command\" > options.csv\nfor path in $top20 ; do\n  echo \"PhpStorm Open $(echo \"$path\" | rev | cut -f1 -d '/' | rev),~/.config/jetbrains/bin/phpstorm $path\" >> options.csv;\ndone\n\nfind . -type f -name phpstorm-open-\\*.bash -delete\n\n$raygen \\\n  --header-row \\\n  --output-dir . \\\n  options.csv \\\n  --package-name PhpStorm \\\n  --icon ~/Applications/JetBrains\\ Toolbox/PhpStorm.app/Contents/Resources/icon.icns\n\nrm options.csv\nchmod u+x phpstorm-open-*.bash"
  },
  {
    "path": "commands/apps/plash/plash-add-website.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Website\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Add a website to Plash.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"url\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"title\", \"optional\": true, \"percentEncoded\": true }\n\nopen --background \"plash:add?url=$1&title=$2\"\n"
  },
  {
    "path": "commands/apps/plash/plash-next-website.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Next Website\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Switch to the next website in the list in Plash.\n\nopen --background plash:next\n"
  },
  {
    "path": "commands/apps/plash/plash-previous-website.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Previous Website\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Switch to the previous website in the list in Plash.\n\nopen --background plash:previous\n"
  },
  {
    "path": "commands/apps/plash/plash-random-website.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.3.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch to Random Website\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Switch to a random website from the list of websites in Plash.\n\nopen --background plash:random\n"
  },
  {
    "path": "commands/apps/plash/plash-reload-website.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Reload Website\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Reload the current website in Plash.\n\nopen --background plash:reload\n"
  },
  {
    "path": "commands/apps/plash/plash-toggle-browser-mode.sh",
    "content": "#!/bin/bash\n\n# Note: Plash v2.2.0 required\n# Install via Mac App Store: https://apps.apple.com/app/id1494023538\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Browsing Mode\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/plash.png\n# @raycast.packageName Plash\n\n# Documentation:\n# @raycast.author Plash\n# @raycast.authorURL https://github.com/sindresorhus/Plash\n# @raycast.description Toggle browsing mode in Plash.\n\nopen --background plash:toggle-browsing-mode\n"
  },
  {
    "path": "commands/apps/playground/README.md",
    "content": "<div>\n  <img src=\"./images/swift-playground-logo.png\" height=\"32px\" width=\"32px\" align=\"left\">\n  <h2>Playground</h2>\n</div>\n\nTest and prototype using Swift Playground as easy as it should via [Raycast](http://raycast.com).\n\n![Screenshot of Playground](images/swift-playground-screenshot.png)\n\n### Available scripts\n\n- **Create Basic:** Create and open a new basic Swift Playground\n- **Create View Based:** Create and open a new view based Swift Playground\n\n### Arguments\n\n#### Destination Path\n\nDefault is `/tmp/`\n\nExample: `~/MyPlayground`\n\n#### GitHub/Gist URL\n\nGist, a GitHub URL or any other URL to open in the created Playground.\n\nExample: `https://gist.github.com/JohnSundell/b7f901e8edb89d1396ede4d8db3e8c21`\n\n#### Dependencies\n\nAdd some dependencies to your playground.\n\nExample: `~/unbox/unbox.xcodeproj,~/files/files.xcodeproj`\n"
  },
  {
    "path": "commands/apps/playground/open-new-playground.py",
    "content": "#!/usr/bin/env python3\n\n# Dependency: This script require playground (https://github.com/JohnSundell/Playground).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Basic\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🕊\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Destination Path\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"GitHub/Gist URL\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Dependencies\", \"optional\": true }\n\n# @raycast.packageName Swift Playgrounds\n\n# Documentation:\n# @raycast.description Create and open a new basic Swift Playground\n# @raycast.author Quentin Eude\n# @raycast.authorURL https://github.com/qeude\n\nimport sys\nimport os\nfrom datetime import datetime\nfrom shutil import which\n\ndef safe_get(array, index):\n    try:\n        return array[index]\n    except IndexError:\n        return None\n\n\nif which(\"playground\") is None:\n    print(\"playground is required (https://github.com/JohnSundell/Playground).\")\n    exit(1)\n\ndefault_path=os.path.abspath(\"/tmp\")\n\ndestination_path=safe_get(sys.argv, 1) or default_path\nurl_to_open=safe_get(sys.argv, 2)\ndependencies=safe_get(sys.argv, 3)\n\nif os.path.isdir(destination_path):\n    destination_path=os.path.join(destination_path, datetime.now().astimezone().isoformat())\n\ncommand = f\"playground -t '{destination_path}'\"\nif url_to_open:\n    command = command + f\" -u '{url_to_open}'\"\nif dependencies:\n    command = command + f\" -d '{dependencies}'\"\n\nos.system(command)\n"
  },
  {
    "path": "commands/apps/playground/open-new-view-playground.py",
    "content": "#!/usr/bin/env python3\n\n# Dependency: This script require playground (https://github.com/JohnSundell/Playground).\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create View Based\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🕊\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Destination Path\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"GitHub/Gist URL\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Dependencies\", \"optional\": true }\n\n# @raycast.packageName Swift Playgrounds\n\n# Documentation:\n# @raycast.description Create and open a new view based Swift Playground\n# @raycast.author Quentin Eude\n# @raycast.authorURL https://github.com/qeude\n\nimport sys\nimport os\nfrom datetime import datetime\nfrom shutil import which\n\ndef safe_get(array, index):\n    try:\n        return array[index]\n    except IndexError:\n        return None\n\n\nif which(\"playground\") is None:\n    print(\"playground is required (https://github.com/JohnSundell/Playground).\")\n    exit(1)\n\ndefault_path=os.path.abspath(\"/tmp\")\n\ndestination_path=safe_get(sys.argv, 1) or default_path\nurl_to_open=safe_get(sys.argv, 2)\ndependencies=safe_get(sys.argv, 3)\n\nif os.path.isdir(destination_path):\n    destination_path=os.path.join(destination_path, datetime.now().astimezone().isoformat())\n\ncommand = f\"playground -v -t '{destination_path}'\"\nif url_to_open:\n    command = command + f\" -u '{url_to_open}'\"\nif dependencies:\n    command = command + f\" -d '{dependencies}'\"\n\nos.system(command)\n"
  },
  {
    "path": "commands/apps/pulse-secure/README.md",
    "content": "## Pulse Secure\n\nManage your VPN connection with the collection of scripts that control the [Pulse Secure application](https://www.pulsesecure.net/) via [Raycast](http://raycast.com).\n\n### Available scripts\n\n- **Connect / Reconnect:** Connect to the given / default connection with the given / default username.\n- **Disconnect / Cancel:** Disconnect / cancel the active connection.\n- **Resume:** Resume the suspended connection.\n- **Suspend:** Suspend the active connection.\n"
  },
  {
    "path": "commands/apps/pulse-secure/pulse-secure-connect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# Pulse Secure: https://www.pulsesecure.net/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect / Reconnect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Pulse Secure\n# @raycast.icon images/pulse-secure.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Connection\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Username\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Password\", \"optional\": true, \"secure\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Connect to the given / default connection with the given / default username.\n\non run argv\n\t\n\t### Configuration ###\n\t\n\tset defaultConnection to \"\"\n\tset defaultUsername to \"\"\n\tset keychainItemPrefix to \"raycast-pulse-secure-\"\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\trunTray()\n\t\t\n\t\tset connection to getConnection(item 1 of argv, defaultConnection)\n\t\tset formattedConnection to formatConnection(connection)\n\t\tset keychainItem to keychainItemPrefix & formattedConnection\n\t\tset username to getUsername(item 2 of argv, defaultUsername)\n\t\tif item 3 of argv = \"\" then\n\t\t\tset pwd to getPassword(connection, username, keychainItem)\n\t\telse\n\t\t\tset pwd to item 3 of argv\n\t\t\tupdatePassword(pwd, connection, username, keychainItem)\n\t\tend if\n\t\t\n\t\tdisconnectOrCancel()\n\t\tconnect(connection, username, pwd)\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non getConnection(query, defaultConnection)\n\tset connection to query\n\tif connection = \"\" then\n\t\tset connection to defaultConnection\n\t\tif connection = \"\" then error \"Default connection is not set, edit the command file\"\n\telse if not connectionExists(query) then\n\t\tset connection to findMatchingConnection(query)\n\t\tif connection = \"\" then error \"Connection \\\"\" & query & \"\\\" not found\"\n\tend if\n\treturn connection\nend getConnection\n\non formatConnection(connection)\n\treturn do shell script \"python3 -c \\\"print('\" & connection & \"'.lower().replace(' ','-'))\\\"\"\nend formatConnection\n\non getUsername(username, defaultUsername)\n\tif username = \"\" then\n\t\tset username to defaultUsername\n\t\tif username = \"\" then error \"Default username is not set, edit the command file\"\n\tend if\n\treturn username\nend getUsername\n\non getPassword(connection, username, keychainItem)\n\ttry\n\t\treturn do shell script \"security find-generic-password -a '\" & username & \"' -s '\" & keychainItem & \"' -w 2> /dev/null\"\n\ton error\n\t\terror \"Keychain item \\\"\" & keychainItem & \"\\\" (account \\\"\" & username & \"\\\") not found, enter password\"\n\tend try\nend getPassword\n\non updatePassword(pwd, connection, username, keychainItem)\n\tset comment to \"Credentials for Pulse Secure connection \\\"\" & connection & \"\\\" (username \\\"\" & username & \"\\\")\"\n\tdo shell script \"security add-generic-password -U -a '\" & username & \"' -s '\" & keychainItem & \"' -j '\" & comment & \"' -w '\" & pwd & \"'\"\nend updatePassword\n\non connectionExists(connection)\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\treturn menu item connection exists\n\t\tend tell\n\tend tell\nend connectionExists\n\non findMatchingConnection(query)\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\ttry\n\t\t\t\treturn name of first menu item whose name contains query\n\t\t\ton error\n\t\t\t\treturn \"\"\n\t\t\tend try\n\t\tend tell\n\tend tell\nend findMatchingConnection\n\non disconnectOrCancel()\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tif name of menu item 3 does not contain \"No active connections\" then\n\t\t\t\ttell (first menu item whose value of attribute \"AXMenuItemMarkChar\" is \" \")\n\t\t\t\t\tclick\n\t\t\t\t\ttell menu 1\n\t\t\t\t\t\tif value of attribute \"AXEnabled\" of menu item \"Disconnect\" then\n\t\t\t\t\t\t\tclick menu item \"Disconnect\"\n\t\t\t\t\t\telse if value of attribute \"AXEnabled\" of menu item \"Cancel\" then\n\t\t\t\t\t\t\tclick menu item \"Cancel\"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\terror \"Neither menu item \\\"Disconnect\\\" nor \\\"Cancel\\\" is active\"\n\t\t\t\t\t\tend if\n\t\t\t\t\tend tell\n\t\t\t\tend tell\n\t\t\tend if\n\t\tend tell\n\tend tell\nend disconnectOrCancel\n\non connect(connection, username, pwd)\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2 to tell menu item connection\n\t\t\tclick\n\t\t\ttell menu 1\n\t\t\t\tif value of attribute \"AXEnabled\" of menu item \"Connect\" then\n\t\t\t\t\tclick menu item \"Connect\"\n\t\t\t\t\tmy waitForWindow(connection)\n\t\t\t\t\tkeystroke username\n\t\t\t\t\tkey code 48\n\t\t\t\t\tkeystroke pwd\n\t\t\t\t\tkey code 36\n\t\t\t\telse\n\t\t\t\t\terror \"Menu item \\\"Connect\\\" is not active\"\n\t\t\t\tend if\n\t\t\tend tell\n\t\tend tell\n\tend tell\nend connect\n\non trayIsRunning()\n\treturn application \"PulseTray\" is running\nend trayIsRunning\n\non runTray()\n\tif not trayIsRunning() then do shell script \"open -a 'PulseTray'\"\nend runTray\n\non menuIsOpen()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu\n\non waitForWindow(connection)\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\trepeat\n\t\t\tif window connection exists then\n\t\t\t\tset frontmost to true\n\t\t\t\tperform action \"AXRaise\" of window connection\n\t\t\t\treturn\n\t\t\telse\n\t\t\t\tdelay 0.5\n\t\t\tend if\n\t\tend repeat\n\tend tell\nend waitForWindow\n"
  },
  {
    "path": "commands/apps/pulse-secure/pulse-secure-disconnect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# Pulse Secure: https://www.pulsesecure.net/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect / Cancel\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Pulse Secure\n# @raycast.icon images/pulse-secure.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Disconnect / cancel the active connection.\n\non run argv\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\tif not trayIsRunning() then error \"Pulse Secure tray is not running\"\n\t\t\n\t\tdisconnectOrCancel()\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non disconnectOrCancel()\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tif name of menu item 3 does not contain \"No active connections\" then\n\t\t\t\ttell (first menu item whose value of attribute \"AXMenuItemMarkChar\" is \" \")\n\t\t\t\t\tclick\n\t\t\t\t\ttell menu 1\n\t\t\t\t\t\tif value of attribute \"AXEnabled\" of menu item \"Disconnect\" then\n\t\t\t\t\t\t\tclick menu item \"Disconnect\"\n\t\t\t\t\t\telse if value of attribute \"AXEnabled\" of menu item \"Cancel\" then\n\t\t\t\t\t\t\tclick menu item \"Cancel\"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\terror \"Neither menu item \\\"Disconnect\\\" nor \\\"Cancel\\\" is active\"\n\t\t\t\t\t\tend if\n\t\t\t\t\tend tell\n\t\t\t\tend tell\n\t\t\telse\n\t\t\t\terror \"No active connection\"\n\t\t\tend if\n\t\tend tell\n\tend tell\nend disconnectOrCancel\n\non trayIsRunning()\n\treturn application \"PulseTray\" is running\nend trayIsRunning\n\non menuIsOpen()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu\n"
  },
  {
    "path": "commands/apps/pulse-secure/pulse-secure-resume.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# Pulse Secure: https://www.pulsesecure.net/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Resume\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Pulse Secure\n# @raycast.icon images/pulse-secure.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Resume the suspended connection.\n\non run argv\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\tif not trayIsRunning() then error \"Pulse Secure tray is not running\"\n\t\t\n\t\tresume()\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non resume()\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tif name of menu item 3 contains \"Suspended\" then\n\t\t\t\ttell (first menu item whose value of attribute \"AXMenuItemMarkChar\" is \" \")\n\t\t\t\t\tclick\n\t\t\t\t\ttell menu 1\n\t\t\t\t\t\tif value of attribute \"AXEnabled\" of menu item \"Resume\" then\n\t\t\t\t\t\t\tclick menu item \"Resume\"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\terror \"Menu item \\\"Resume\\\" is not active\"\n\t\t\t\t\t\tend if\n\t\t\t\t\tend tell\n\t\t\t\tend tell\n\t\t\telse\n\t\t\t\terror \"No suspended connection\"\n\t\t\tend if\n\t\tend tell\n\tend tell\nend resume\n\non trayIsRunning()\n\treturn application \"PulseTray\" is running\nend trayIsRunning\n\non menuIsOpen()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu\n"
  },
  {
    "path": "commands/apps/pulse-secure/pulse-secure-suspend.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependencies:\n# Pulse Secure: https://www.pulsesecure.net/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Suspend\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Pulse Secure\n# @raycast.icon images/pulse-secure.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Suspend the active connection.\n\non run argv\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\tif not trayIsRunning() then error \"Pulse Secure tray is not running\"\n\t\t\n\t\tsuspend()\n\t\treturn\n\t\t\n\ton error errorMessage\n\t\tcloseMenu()\n\t\treturn errorMessage\n\t\t\n\tend try\n\t\nend run\n\n### Functions ###\n\non suspend()\n\topenMenu()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\ttell menu 1 of menu bar item 1 of menu bar 2\n\t\t\tif name of menu item 3 contains \"Connected\" then\n\t\t\t\ttell (first menu item whose value of attribute \"AXMenuItemMarkChar\" is \" \")\n\t\t\t\t\tclick\n\t\t\t\t\ttell menu 1\n\t\t\t\t\t\tif value of attribute \"AXEnabled\" of menu item \"Suspend\" then\n\t\t\t\t\t\t\tclick menu item \"Suspend\"\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\terror \"Menu item \\\"Suspend\\\" is not active\"\n\t\t\t\t\t\tend if\n\t\t\t\t\tend tell\n\t\t\t\tend tell\n\t\t\telse\n\t\t\t\terror \"No active connection\"\n\t\t\tend if\n\t\tend tell\n\tend tell\nend suspend\n\non trayIsRunning()\n\treturn application \"PulseTray\" is running\nend trayIsRunning\n\non menuIsOpen()\n\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\treturn menu 1 of menu bar item 1 of menu bar 2 exists\n\tend tell\nend menuIsOpen\n\non openMenu()\n\tset killDelay to 0\n\trepeat\n\t\ttell application \"System Events\" to tell process \"PulseTray\"\n\t\t\tif my menuIsOpen() then return\n\t\t\tignoring application responses\n\t\t\t\tclick menu bar item 1 of menu bar 2\n\t\t\tend ignoring\n\t\tend tell\n\t\tset killDelay to killDelay + 0.1\n\t\tdelay killDelay\n\t\tdo shell script \"killall System\\\\ Events\"\n\tend repeat\nend openMenu\n\non closeMenu()\n\tif menuIsOpen() then tell application \"System Events\" to key code 53\nend closeMenu\n"
  },
  {
    "path": "commands/apps/quip/.gitignore",
    "content": ".DS_Store\ntmp/\nquip_config.ini\nquip-new-*.py\n__pycache__\n"
  },
  {
    "path": "commands/apps/quip/README.org",
    "content": "#+title: Raycast script commands for Quip\n\nThis set of script commands makes it possible to easily create and add text to different types of Quip documents. They complement the existing Raycast [[https://www.raycast.com/justin0u0/quip][Quip extension]], which provides support for searching and viewing Quip documents.\n\nWith these scripts you can create commands to do one of two actions:\n\n- =create=: Create new Quip documents in predefined folders, optionally based on predefined templates (e.g. type =mnote Meeting title= to automatically create a new document in your \"Meeting notes\" folder, using an appropriate template). You can define as many different \"create\" actions as you need.\n- =add=: Add text to an existing Quip document, optionally formatted as list items (e.g. type =todo Update the documentation= to add a todo item to your \"Action items\" document). You can define as many \"add\" actions as you need.\n\nYou can customize the behavior during and after these actions, including the following:\n- Open the created/updated document automatically (and whether to use the Quip app or the web browser for this)\n- Copy the URL of the created/updated document to the clipboard.\n- Prepend the current date to the title of newly created documents or added text.\n- Use different templates for each type of document created.\n- The Quip folder in which to store each type of created document.\n- Produce notifications after each command finishes execution.\n\n* Configuration and use\n\nTo get set up, do the following:\n\n1. Check out this repository and add the =quip= directory as a Script Directory in the Raycast preferences:\n   [[file:images/raycast-script-directory-prefs.png]]\n2. Copy =quip_config.template.ini= to =quip_config.ini= and customize it to your needs. You need to set at least the following values:\n   - =APIToken= to your Quip personal API token. You can get one at https://quip.com/api/personal-token (the URL may be different if you are using a Quip Enterprise instance with a custom domain).\n   - If you are using a custom Quip domain, modify =BaseURL= and =APIURL= accordingly.\n   - Configure the actions you want. See the examples in the template for details on how to configure them.\n   - *Note:* if you want to populate Quip secrets and other values from a password manager, see =quip_config.chezmoi.template.ini= for an example which inserts those values from entries kept in KeePassXC. Instructions are at the top of the file.\n3. Once your configuration is complete, run from Raycast the \"Set up Quip commands\" command. This will ask you for confirmation and then generate scripts corresponding to your configuration, which will be loaded automatically by Raycast.\n  [[file:images/raycast-setup-quip-commands.png]]\n  [[file:images/raycast-generate-quip-commands-output.png]]\n4. You can now use the generated commands to create or add text to Quip documents. You can of course configure aliases or hotkeys for the commands you need the most in the Raycast Script Commands settings.\n   [[file:images/raycast-quip-commands.png]]\n   [[file:images/raycast-script-command-settings.png]]\n5.  Note that you can also run the generated scripts from the command line to execute the corresponding actions. For example:\n   #+begin_src shell\n./quip-new-note.py \"New note title\"\n #+end_src\n6. If you need to update or modify your config (e.g. to add or remove actions), make sure you rerun the \"Set up Quip commands\" command afterwards, to ensure the scripts are kept up to date.\n"
  },
  {
    "path": "commands/apps/quip/quip-new.template.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title {{commandtitle}}\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon /Applications/Quip.app/Contents/Resources/AppIcon.icns\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"{{commandargplaceholder}}\", \"optional\": {{opendocifemptyarg}} }\n# @raycast.packageName Quip utilities\n\n# Documentation:\n# @raycast.description Configure your Quip API token and other defaults in quip_config.ini\n# @raycast.author zzamboni\n# @raycast.authorURL https://raycast.com/zzamboni\n\nimport sys\nimport re\nimport quip_utils\n\n# Determine the document type to create from the script filename.\nmatch = re.search('quip-new-(.+)\\.py', sys.argv[0])\nif match:\n    doc_type = match.group(1)\n    if len(sys.argv) > 1:\n        arg = sys.argv[1]\n    else:\n        arg = None\n    quip_utils.quip_new_doc(doc_type, arg)\nelse:\n    quip_utils.fail(f\"Error: Could not determine document type to use - incorrect script name.\")\n"
  },
  {
    "path": "commands/apps/quip/quip.py",
    "content": "# Copyright 2014 Quip\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n# not use this file except in compliance with the License. You may obtain\n# a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n# License for the specific language governing permissions and limitations\n# under the License.\n\n\"\"\"A Quip API client library.\n\nFor full API documentation, visit https://quip.com/api/.\n\nTypical usage:\n\n    client = quip.QuipClient(access_token=...)\n    user = client.get_authenticated_user()\n    starred = client.get_folder(user[\"starred_folder_id\"])\n    print \"There are\", len(starred[\"children\"]), \"items in your starred folder\"\n\nIn addition to standard getters and setters, we provide a few convenience\nmethods for document editing. For example, you can use `add_to_first_list`\nto append items (in Markdown) to the first bulleted or checklist in a\ngiven document, which is useful for automating a task list.\n\"\"\"\n\nimport datetime\nimport json\nimport logging\nimport ssl\nimport sys\nimport time\nimport xml.etree.cElementTree\n\nPY3 = sys.version_info > (3,)\n\nif PY3:\n    import urllib.request\n    import urllib.parse\n    import urllib.error\n\n    Request = urllib.request.Request\n    urlencode = urllib.parse.urlencode\n    urlopen = urllib.request.urlopen\n    HTTPError = urllib.error.HTTPError\n\n    iteritems = dict.items\n\nelse:\n    import urllib\n    import urllib2\n\n    Request = urllib2.Request\n    urlencode = urllib.urlencode\n    urlopen = urllib2.urlopen\n    HTTPError = urllib2.HTTPError\n\n    iteritems = dict.iteritems\n\n\ntry:\n    reload(sys)\n    sys.setdefaultencoding('utf8')\nexcept:\n    # Can't change default encoding usually...\n    pass\n\ntry:\n    ssl.PROTOCOL_TLSv1_1\nexcept AttributeError:\n    raise Exception(\n        \"Using the Quip API requires an SSL library that supports TLS versions \"\n        \">= 1.1; your Python + OpenSSL installation must be upgraded.\")\n# After 2017-02, the Quip API HTTPS endpoint requires TLS version 1.1 or later;\n# TLS version 1.0 is disabled due to extensive security vulnerabilities.\n#\n# - macOS: At this time of this writing, macOS ships with Python 2.7 and\n#   OpenSSL, but the version of OpenSSL is outdated and only supports TLS 1.0.\n#   (This is even true of the most recent version of macOS (Sierra) with all\n#   security patches installed; see\n#   https://eclecticlight.co/2016/03/23/the-tls-mess-in-os-x-el-capitan/ .)\n#\n#   To use this module on a macOS system, you will need to install your own\n#   copy of Python and OpenSSL. Simple suggestions:\n#\n#   1) Install Homebrew from http://brew.sh; run \"brew install openssl python\"\n#   2) Install Miniconda from https://conda.io/miniconda.html\n#\n# - Google App Engine (GAE): Per App Engine's documentation, you must request\n#   version 2.7.11 of the \"ssl\" library in your app.yaml file. See:\n#   https://cloud.google.com/appengine/docs/python/sockets/ssl_support\n\n\nclass QuipError(Exception):\n    def __init__(self, code, message, http_error):\n        Exception.__init__(self, \"%d: %s\" % (code, message))\n        self.code = code\n        self.http_error = http_error\n\n\nclass QuipClient(object):\n    \"\"\"A Quip API client\"\"\"\n    # Edit operations\n    APPEND, \\\n        PREPEND, \\\n        AFTER_SECTION, \\\n        BEFORE_SECTION, \\\n        REPLACE_SECTION, \\\n        DELETE_SECTION = range(6)\n\n    # Folder colors\n    MANILA, \\\n        RED, \\\n        ORANGE, \\\n        GREEN, \\\n        BLUE = range(5)\n\n    def __init__(self, access_token=None, client_id=None, client_secret=None,\n                 base_url=None, request_timeout=None):\n        \"\"\"Constructs a Quip API client.\n\n        If `access_token` is given, all of the API methods in the client\n        will work to read and modify Quip documents.\n\n        Otherwise, only `get_authorization_url` and `get_access_token`\n        work, and we assume the client is for a server using the Quip API's\n        OAuth endpoint.\n        \"\"\"\n        self.access_token = access_token\n        self.client_id = client_id\n        self.client_secret = client_secret\n        self.base_url = base_url if base_url else \"https://platform.quip.com\"\n        self.request_timeout = request_timeout if request_timeout else 10\n\n    def get_authorization_url(self, redirect_uri, state=None):\n        \"\"\"Returns the URL the user should be redirected to to sign in.\"\"\"\n        return self._url(\n            \"oauth/login\", redirect_uri=redirect_uri, state=state,\n            response_type=\"code\", client_id=self.client_id)\n\n    def get_access_token(self, redirect_uri, code,\n                         grant_type=\"authorization_code\",\n                         refresh_token=None):\n        \"\"\"Exchanges a verification code for an access_token.\n\n        Once the user is redirected back to your server from the URL\n        returned by `get_authorization_url`, you can exchange the `code`\n        argument with this method.\n        \"\"\"\n        return self._fetch_json(\n            \"oauth/access_token\", redirect_uri=redirect_uri, code=code,\n            grant_type=grant_type, refresh_token=refresh_token,\n            client_id=self.client_id, client_secret=self.client_secret)\n\n    def get_authenticated_user(self):\n        \"\"\"Returns the user corresponding to our access token.\"\"\"\n        return self._fetch_json(\"users/current\")\n\n    def get_user(self, id):\n        \"\"\"Returns the user with the given ID.\"\"\"\n        return self._fetch_json(\"users/\" + id)\n\n    def get_users(self, ids):\n        \"\"\"Returns a dictionary of users for the given IDs.\"\"\"\n        return self._fetch_json(\"users/\", post_data={\"ids\": \",\".join(ids)})\n\n    def update_user(self, user_id, picture_url=None):\n        return self._fetch_json(\"users/update\", post_data={\n            \"user_id\": user_id,\n            \"picture_url\": picture_url,\n        })\n\n    def get_contacts(self):\n        \"\"\"Returns a list of the users in the authenticated user's contacts.\"\"\"\n        return self._fetch_json(\"users/contacts\")\n\n    def get_folder(self, id):\n        \"\"\"Returns the folder with the given ID.\"\"\"\n        return self._fetch_json(\"folders/\" + id)\n\n    def get_folders(self, ids):\n        \"\"\"Returns a dictionary of folders for the given IDs.\"\"\"\n        return self._fetch_json(\"folders/\", post_data={\"ids\": \",\".join(ids)})\n\n    def new_folder(self, title, parent_id=None, color=None, member_ids=[]):\n        return self._fetch_json(\"folders/new\", post_data={\n            \"title\": title,\n            \"parent_id\": parent_id,\n            \"color\": color,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def update_folder(self, folder_id, color=None, title=None):\n        return self._fetch_json(\"folders/update\", post_data={\n            \"folder_id\": folder_id,\n            \"color\": color,\n            \"title\": title,\n        })\n\n    def add_folder_members(self, folder_id, member_ids):\n        \"\"\"Adds the given users to the given folder.\"\"\"\n        return self._fetch_json(\"folders/add-members\", post_data={\n            \"folder_id\": folder_id,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def remove_folder_members(self, folder_id, member_ids):\n        \"\"\"Removes the given users from the given folder.\"\"\"\n        return self._fetch_json(\"folders/remove-members\", post_data={\n            \"folder_id\": folder_id,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def get_teams(self):\n        \"\"\"Returns the teams for the user corresponding to our access token.\"\"\"\n        return self._fetch_json(\"teams/current\")\n\n    def get_messages(self, thread_id, max_created_usec=None, count=None):\n        \"\"\"Returns the most recent messages for the given thread.\n\n        To page through the messages, use max_created_usec, which is the\n        sort order for the returned messages.\n\n        count should be an integer indicating the number of messages you\n        want returned. The maximum is 100.\n        \"\"\"\n        return self._fetch_json(\n            \"messages/\" + thread_id, max_created_usec=max_created_usec,\n            count=count)\n\n    def new_message(self, thread_id, content=None, **kwargs):\n        \"\"\"Sends a message on the given thread.\n\n        `content` is plain text, not HTML.\n        \"\"\"\n        args = {\n            \"thread_id\": thread_id,\n            \"content\": content,\n        }\n        args.update(kwargs)\n        return self._fetch_json(\"messages/new\", post_data=args)\n\n    def get_thread(self, id):\n        \"\"\"Returns the thread with the given ID.\"\"\"\n        return self._fetch_json(\"threads/\" + id)\n\n    def get_threads(self, ids):\n        \"\"\"Returns a dictionary of threads for the given IDs.\"\"\"\n        return self._fetch_json(\"threads/\", post_data={\"ids\": \",\".join(ids)})\n\n    def get_recent_threads(self, max_updated_usec=None, count=None, **kwargs):\n        \"\"\"Returns the recently updated threads for a given user.\"\"\"\n        return self._fetch_json(\n            \"threads/recent\", max_updated_usec=max_updated_usec,\n            count=count, **kwargs)\n\n    def get_matching_threads(\n            self, query, count=None, only_match_titles=False, **kwargs):\n        \"\"\"Returns the recently updated threads for a given user.\"\"\"\n        return self._fetch_json(\"threads/search\", query=query, count=count,\n            only_match_titles=only_match_titles, **kwargs)\n\n    def add_thread_members(self, thread_id, member_ids):\n        \"\"\"Adds the given folder or user IDs to the given thread.\"\"\"\n        return self._fetch_json(\"threads/add-members\", post_data={\n            \"thread_id\": thread_id,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def delete_thread(self, thread_id):\n        \"\"\"Deletes the thread with the given thread id or secret\"\"\"\n        return self._fetch_json(\"threads/delete\", post_data={\n            \"thread_id\": thread_id,\n        })\n\n    def remove_thread_members(self, thread_id, member_ids):\n        \"\"\"Removes the given folder or user IDs from the given thread.\"\"\"\n        return self._fetch_json(\"threads/remove-members\", post_data={\n            \"thread_id\": thread_id,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def move_thread(self, thread_id, source_folder_id, destination_folder_id):\n        \"\"\"Moves the given thread from the source folder to the destination one.\n        \"\"\"\n        self.add_thread_members(thread_id, [destination_folder_id])\n        self.remove_thread_members(thread_id, [source_folder_id])\n\n    def new_chat(self, message, title=None, member_ids=[]):\n        \"\"\"Creates a chat with the given title and members, and send the\n        initial message.\"\"\"\n        return self._fetch_json(\"threads/new-chat\", post_data={\n            \"message\": message,\n            \"title\": title,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def new_document(self, content, format=\"html\", title=None, member_ids=[]):\n        \"\"\"Creates a new document from the given content.\n\n        To create a document in a folder, include the folder ID in the list\n        of member_ids, e.g.,\n\n            client = quip.QuipClient(...)\n            user = client.get_authenticated_user()\n            client.new_document(..., member_ids=[user[\"archive_folder_id\"]])\n\n        \"\"\"\n        return self._fetch_json(\"threads/new-document\", post_data={\n            \"content\": content,\n            \"format\": format,\n            \"title\": title,\n            \"member_ids\": \",\".join(member_ids),\n        })\n\n    def copy_document(self, thread_id, folder_ids=None, member_ids=None,\n            title=None, values=None, **kwargs):\n        \"\"\"Copies the given document, optionally replaces template variables\n           in the document with values in 'values' arg. The values argument\n           must be a dictionary that contains string keys and values that\n           are either strings, numbers or dictionaries.\n        \"\"\"\n\n        args = {\"thread_id\": thread_id}\n        if folder_ids:\n            args[\"folder_ids\"] = \",\".join(folder_ids)\n        if member_ids:\n            args[\"member_ids\"] = \",\".join(member_ids)\n        if title:\n            args[\"title\"] = title\n        if values:\n            args[\"values\"] = json.dumps(values)\n        args.update(kwargs)\n        return self._fetch_json(\"threads/copy-document\", post_data=args)\n\n    def merge_comments(self, original_id, children_ids, ignore_user_ids=[]):\n        \"\"\"Given an original document and a set of exact duplicates, copies\n        all comments and messages on the duplicates to the original.\n\n        Impersonates the commentors if the access token used has\n        permission, but does not add them to the thread.\n        \"\"\"\n        import re\n        threads = self.get_threads(children_ids + [original_id])\n        original_section_ids = re.findall(r\" id='([a-zA-Z0-9]{11})'\",\n                                          threads[original_id][\"html\"])\n        for thread_id in children_ids:\n            thread = threads[thread_id]\n            child_section_ids = re.findall(r\" id='([a-zA-Z0-9]{11})'\",\n                                           thread[\"html\"])\n            parent_map = dict(zip(child_section_ids, original_section_ids))\n            messages = self.get_messages(thread_id)\n            for message in reversed(messages):\n                if message[\"author_id\"] in ignore_user_ids:\n                    continue\n                kwargs = {\n                    \"user_id\": message[\"author_id\"],\n                    \"frame\": \"bubble\",\n                    \"service_id\": message[\"id\"],\n                }\n                if \"parts\" in message:\n                    kwargs[\"parts\"] = json.dumps(message[\"parts\"])\n                else:\n                    kwargs[\"content\"] = message[\"text\"]\n                if \"annotation\" in message:\n                    section_id = None\n                    if \"highlight_section_ids\" in message[\"annotation\"]:\n                        section_id = message[\"annotation\"][\n                            \"highlight_section_ids\"][0]\n                    else:\n                        anno_loc = thread[\"html\"].find(\n                            '<annotation id=\"%s\"' % message[\"annotation\"][\"id\"])\n                        loc = thread[\"html\"].rfind(\"id=\", 0, anno_loc)\n                        if anno_loc >= 0 and loc >= 0:\n                            section_id = thread[\"html\"][loc + 4:loc + 15]\n                    if section_id and section_id in parent_map:\n                        kwargs[\"section_id\"] = parent_map[section_id]\n                if \"files\" in message:\n                    attachments = []\n                    for blob_info in message[\"files\"]:\n                        blob = self.get_blob(thread_id, blob_info[\"hash\"])\n                        new_blob = self.put_blob(\n                            original_id, blob, name=blob_info[\"name\"])\n                        attachments.append(new_blob[\"id\"])\n                    if attachments:\n                        kwargs[\"attachments\"] = \",\".join(attachments)\n                self.new_message(original_id, **kwargs)\n\n    def edit_document(self, thread_id, content, operation=APPEND, format=\"html\",\n                      section_id=None, **kwargs):\n        \"\"\"Edits the given document, adding the given content.\n\n        `operation` should be one of the constants described above. If\n        `operation` is relative to another section of the document, you must\n        also specify the `section_id`.\n        \"\"\"\n\n        # Since our cell ids in 10x contain ';', which is a valid cgi\n        # parameter separator, we are replacing them with '_' in 10x cell\n        # sections. This should be no op for all other sections.\n        section_id = None if not section_id else section_id.replace(\";\", \"_\")\n\n        args = {\n            \"thread_id\": thread_id,\n            \"content\": content,\n            \"location\": operation,\n            \"format\": format,\n            \"section_id\": section_id\n        }\n        args.update(kwargs)\n        return self._fetch_json(\"threads/edit-document\", post_data=args)\n\n    def add_to_first_list(self, thread_id, *items, **kwargs):\n        \"\"\"Adds the given items to the first list in the given document.\n\n            client = quip.QuipClient(...)\n            client.add_to_first_list(thread_id, \"Try the Quip API\")\n\n        \"\"\"\n        items = [item.replace(\"\\n\", \" \") for item in items]\n        args = {\n            \"thread_id\": thread_id,\n            \"content\": \"\\n\\n\".join(items),\n            \"format\": \"markdown\",\n            \"operation\": self.AFTER_SECTION\n        }\n        args.update(kwargs)\n        if \"section_id\" not in args:\n            first_list = self.get_first_list(\n                thread_id, kwargs.pop(\"document_html\", None))\n            if first_list:\n                args[\"section_id\"] = self.get_last_list_item_id(first_list)\n        if not args.get(\"section_id\"):\n            args[\"operation\"] = self.APPEND\n            args[\"content\"] = \"\\n\\n\".join([\"    * %s\" % i for i in items])\n        return self.edit_document(**args)\n\n    def add_to_spreadsheet(self, thread_id, *rows, **kwargs):\n        \"\"\"Adds the given rows to the named (or first) spreadsheet in the\n        given document.\n\n            client = quip.QuipClient(...)\n            client.add_to_spreadsheet(thread_id, [\"5/1/2014\", 2.24])\n\n        \"\"\"\n        content = \"\".join([\"<tr>%s</tr>\" % \"\".join(\n            [\"<td>%s</td>\" % cell for cell in row]) for row in rows])\n        if kwargs.get(\"name\"):\n            spreadsheet = self.get_named_spreadsheet(kwargs[\"name\"], thread_id)\n        else:\n            spreadsheet = self.get_first_spreadsheet(thread_id)\n        if kwargs.get(\"add_to_top\"):\n            section_id = self.get_first_row_item_id(spreadsheet)\n            operation = self.BEFORE_SECTION\n        else:\n            section_id = self.get_last_row_item_id(spreadsheet)\n            operation = self.AFTER_SECTION\n        return self.edit_document(\n            thread_id=thread_id,\n            content=content,\n            section_id=section_id,\n            operation=operation)\n\n    def update_spreadsheet_row(self, thread_id, header, value, updates, **args):\n        \"\"\"Finds the row where the given header column is the given value, and\n        applies the given updates. Updates is a dict from header to\n        new value. In both cases headers can either be a string that matches, or\n        \"A\", \"B\", \"C\", 1, 2, 3 etc. If no row is found, adds a new one.\n\n            client = quip.QuipClient(...)\n            client.update_spreadsheet_row(\n                thread_id, \"customer\", \"Acme\", {\"Billed\": \"6/24/2015\"})\n\n        \"\"\"\n        response = None\n        if args.get(\"name\"):\n            spreadsheet = self.get_named_spreadsheet(args[\"name\"], thread_id)\n        else:\n            spreadsheet = self.get_first_spreadsheet(thread_id)\n        headers = self.get_spreadsheet_header_items(spreadsheet)\n        row = self.find_row_from_header(spreadsheet, header, value)\n        if row:\n            ids = self.get_row_ids(row)\n            for head, val in iteritems(updates):\n                index = self.get_index_of_header(headers, head)\n                if not index or index >= len(ids) or not ids[index]:\n                    continue\n                response = self.edit_document(\n                    thread_id=thread_id,\n                    content=val,\n                    format=\"markdown\",\n                    section_id=ids[index],\n                    operation=self.REPLACE_SECTION,\n                    **args)\n        else:\n            updates[header] = value\n            response = self.add_spreadsheet_row(\n                thread_id, spreadsheet, updates, headers=headers, **args)\n        return response\n\n    def add_spreadsheet_row(\n            self, thread_id, spreadsheet, updates, headers=None, **args):\n        if not headers:\n            headers = self.get_spreadsheet_header_items(spreadsheet)\n        indexed_items = {}\n        extra_items = []\n        for head, val in iteritems(updates):\n            index = self.get_index_of_header(\n                headers, head, default=None)\n            if index is None or index in indexed_items:\n                extra_items.append(val)\n            else:\n                indexed_items[index] = val\n        cells = []\n        if indexed_items:\n            for i in range(max(indexed_items.keys()) + 1):\n                if i in indexed_items:\n                    cells.append(indexed_items[i])\n                elif len(extra_items):\n                    cells.append(extra_items.pop(0))\n                else:\n                    cells.append(\"\")\n        cells.extend(extra_items)\n        content = \"<tr>%s</tr>\" % \"\".join(\n            [\"<td>%s</td>\" % cell for cell in cells])\n        section_id = self.get_last_row_item_id(spreadsheet)\n        response = self.edit_document(\n            thread_id=thread_id,\n            content=content,\n            section_id=section_id,\n            operation=self.AFTER_SECTION,\n            **args)\n        return response\n\n    def toggle_checkmark(self, thread_id, item, checked=True):\n        \"\"\"Sets the checked state of the given list item to the given state.\n\n            client = quip.QuipClient(...)\n            list = client.get_first_list(thread_id)\n            client.toggle_checkmark(thread_id, list[0])\n\n        \"\"\"\n        if checked:\n            item.attrib[\"class\"] = \"checked\"\n        else:\n            item.attrib[\"class\"] = \"\"\n        return self.edit_document(thread_id=thread_id,\n                                  content=xml.etree.cElementTree.tostring(item),\n                                  section_id=item.attrib[\"id\"],\n                                  operation=self.REPLACE_SECTION)\n\n    def get_first_list(self, thread_id=None, document_html=None):\n        \"\"\"Returns the `ElementTree` of the first list in the document.\n\n        The list can be any type (bulleted, numbered, or checklist).\n        If `thread_id` is given, we download the document. If you have\n        already downloaded the document, you can specify `document_html`\n        directly.\n        \"\"\"\n        return self._get_container(thread_id, document_html, \"ul\", 0)\n\n    def get_last_list(self, thread_id=None, document_html=None):\n        \"\"\"Like `get_first_list`, but the last list in the document.\"\"\"\n        return self._get_container(thread_id, document_html, \"ul\", -1)\n\n    def get_section(self, section_id, thread_id=None, document_html=None):\n        if not document_html:\n            document_html = self.get_thread(thread_id).get(\"html\")\n            if not document_html:\n                return None\n        tree = self.parse_document_html(document_html)\n        element = list(tree.iterfind(\".//*[@id='%s']\" % section_id))\n        if not element:\n            return None\n        return element[0]\n\n    def get_named_spreadsheet(self, name, thread_id=None, document_html=None):\n        if not document_html:\n            document_html = self.get_thread(thread_id).get(\"html\")\n            if not document_html:\n                return None\n        tree = self.parse_document_html(document_html)\n        element = list(tree.iterfind(\".//*[@title='%s']\" % name))\n        if not element:\n            return None\n        return element[0]\n\n    def _get_container(self, thread_id, document_html, container, index):\n        if not document_html:\n            document_html = self.get_thread(thread_id).get(\"html\")\n            if not document_html:\n                return None\n        tree = self.parse_document_html(document_html)\n        lists = list(tree.iter(container))\n        if not lists:\n            return None\n        try:\n            return lists[index]\n        except IndexError:\n            return None\n\n    def get_last_list_item_id(self, list_tree):\n        \"\"\"Returns the last item in the given list `ElementTree`.\"\"\"\n        items = list(list_tree.iter(\"li\"))\n        return items[-1].attrib[\"id\"] if items else None\n\n    def get_first_list_item_id(self, list_tree):\n        \"\"\"Like `get_last_list_item_id`, but the first item in the list.\"\"\"\n        for item in list_tree.iter(\"li\"):\n            return item.attrib[\"id\"]\n        return None\n\n    def get_first_spreadsheet(self, thread_id=None, document_html=None):\n        \"\"\"Returns the `ElementTree` of the first spreadsheet in the document.\n\n        If `thread_id` is given, we download the document. If you have\n        already downloaded the document, you can specify `document_html`\n        directly.\n        \"\"\"\n        return self._get_container(thread_id, document_html, \"table\", 0)\n\n    def get_last_spreadsheet(self, thread_id=None, document_html=None):\n        \"\"\"Like `get_first_spreadsheet`, but the last spreadsheet.\"\"\"\n        return self._get_container(thread_id, document_html, \"table\", -1)\n\n    def get_last_row_item_id(self, spreadsheet_tree):\n        \"\"\"Returns the last row in the given spreadsheet `ElementTree`.\"\"\"\n        items = list(spreadsheet_tree.iter(\"tr\"))\n        return items[-1].attrib[\"id\"] if items else None\n\n    def get_first_row_item_id(self, spreadsheet_tree):\n        \"\"\"Returns the last row in the given spreadsheet `ElementTree`.\"\"\"\n        items = list(spreadsheet_tree.iter(\"tr\"))\n        return items[1].attrib[\"id\"] if items else None\n\n    def get_row_items(self, row_tree):\n        \"\"\"Returns the text of items in the given row `ElementTree`.\"\"\"\n        return [(list(x.itertext()) or [None])[0] for x in row_tree]\n\n    def get_row_ids(self, row_tree):\n        \"\"\"Returns the ids of items in the given row `ElementTree`.\"\"\"\n        return [x.attrib[\"id\"] for x in row_tree]\n\n    def get_spreadsheet_header_items(self, spreadsheet_tree):\n        \"\"\"Returns the header row in the given spreadsheet `ElementTree`.\"\"\"\n        return self.get_row_items(list(spreadsheet_tree.iterfind(\".//tr\"))[0])\n\n    def get_index_of_header(self, header_items, header, default=0):\n        \"\"\"Find the index of the given header in the items\"\"\"\n        if header:\n            header = str(header)\n            lower_headers = [str(h).lower() for h in header_items]\n            if header in header_items:\n                return header_items.index(header)\n            elif header.lower() in lower_headers:\n                return lower_headers.index(header.lower())\n            elif header.isdigit():\n                return int(header)\n            elif len(header) == 1:\n                char = ord(header.upper())\n                if ord('A') < char < ord('Z'):\n                    return char - ord('A') + 1\n            else:\n                pass\n        return default\n\n    def find_row_from_header(self, spreadsheet_tree, header, value):\n        \"\"\"Find the row in the given spreadsheet `ElementTree` where header is\n        value.\n        \"\"\"\n        headers = self.get_spreadsheet_header_items(spreadsheet_tree)\n        index = self.get_index_of_header(headers, header)\n        for row in spreadsheet_tree.iterfind(\".//tr\"):\n            if len(row) <= index:\n                continue\n            cell = row[index]\n            if cell.tag != \"td\":\n                continue\n            if list(cell.itertext())[0].lower() == value.lower():\n                return row\n\n    def parse_spreadsheet_contents(self, spreadsheet_tree):\n        \"\"\"Returns a python-friendly representation of the given spreadsheet\n        `ElementTree`\n        \"\"\"\n        import collections\n        spreadsheet = {\n            \"id\": spreadsheet_tree.attrib.get(\"id\"),\n            \"headers\": self.get_spreadsheet_header_items(spreadsheet_tree),\n            \"rows\": [],\n        }\n        for row in spreadsheet_tree.iterfind(\".//tr\"):\n            value = {\n                \"id\": row.attrib.get(\"id\"),\n                \"cells\": collections.OrderedDict(),\n            }\n            for i, cell in enumerate(row):\n                if cell.tag != \"td\":\n                    continue\n                data = {\n                    \"id\": cell.attrib.get(\"id\"),\n                }\n                images = list(cell.iter(\"img\"))\n                if images:\n                    data[\"content\"] = images[0].attrib.get(\"src\")\n                else:\n                    data[\"content\"] = list(cell.itertext())[0].replace(\n                        u\"\\u200b\", \"\")\n                style = cell.attrib.get(\"style\")\n                if style and \"background-color:#\" in style:\n                    sharp = style.find(\"#\")\n                    data[\"color\"] = style[sharp + 1:sharp + 7]\n                value[\"cells\"][spreadsheet[\"headers\"][i]] = data\n            if len(value[\"cells\"]):\n                spreadsheet[\"rows\"].append(value)\n        return spreadsheet\n\n    def parse_document_html(self, document_html):\n        \"\"\"Returns an `ElementTree` for the given Quip document HTML\"\"\"\n        document_xml = \"<html>\" + document_html + \"</html>\"\n        return xml.etree.cElementTree.fromstring(document_xml.encode(\"utf-8\"))\n\n    def parse_micros(self, usec):\n        \"\"\"Returns a `datetime` for the given microsecond string\"\"\"\n        return datetime.datetime.utcfromtimestamp(usec / 1000000.0)\n\n    def get_blob(self, thread_id, blob_id):\n        \"\"\"Returns a file-like object with the contents of the given blob from\n        the given thread.\n\n        The object is described in detail here:\n        https://docs.python.org/2/library/urllib2.html#urllib2.urlopen\n        \"\"\"\n        request = Request(\n            url=self._url(\"blob/%s/%s\" % (thread_id, blob_id)))\n        if self.access_token:\n            request.add_header(\"Authorization\", \"Bearer \" + self.access_token)\n        try:\n            return urlopen(request, timeout=self.request_timeout)\n        except HTTPError as error:\n            try:\n                # Extract the developer-friendly error message from the response\n                message = json.loads(error.read().decode())[\"error_description\"]\n            except Exception:\n                raise error\n            raise QuipError(error.code, message, error)\n\n    def put_blob(self, thread_id, blob, name=None):\n        \"\"\"Uploads an image or other blob to the given Quip thread. Returns an\n        ID that can be used to add the image to the document of the thread.\n\n        blob can be any file-like object. Requires the 'requests' module.\n        \"\"\"\n        import requests\n        url = \"blob/\" + thread_id\n        headers = None\n        if self.access_token:\n            headers = {\"Authorization\": \"Bearer \" + self.access_token}\n        if name:\n            blob = (name, blob)\n        try:\n            response = requests.request(\n                \"post\", self._url(url), timeout=self.request_timeout,\n                files={\"blob\": blob}, headers=headers)\n            response.raise_for_status()\n            return response.json()\n        except requests.RequestException as error:\n            try:\n                # Extract the developer-friendly error message from the response\n                message = error.response.json()[\"error_description\"]\n            except Exception:\n                raise error\n            raise QuipError(error.response.status_code, message, error)\n\n    def new_websocket(self, **kwargs):\n        \"\"\"Gets a websocket URL to connect to.\n        \"\"\"\n        return self._fetch_json(\"websockets/new\", **kwargs)\n\n    def _fetch_json(self, path, post_data=None, **args):\n        request = Request(url=self._url(path, **args))\n        if post_data:\n            post_data = dict((k, v) for k, v in post_data.items()\n                             if v or isinstance(v, int))\n            request_data = urlencode(self._clean(**post_data))\n            if PY3:\n                request.data = request_data.encode()\n            else:\n                request.data = request_data\n\n        if self.access_token:\n            request.add_header(\"Authorization\", \"Bearer \" + self.access_token)\n        try:\n            return json.loads(\n                urlopen(\n                    request, timeout=self.request_timeout).read().decode())\n        except HTTPError as error:\n            try:\n                # Extract the developer-friendly error message from the response\n                message = json.loads(error.read().decode())[\"error_description\"]\n            except Exception:\n                raise error\n            raise QuipError(error.code, message, error)\n\n    def _clean(self, **args):\n        return dict((k, str(v) if isinstance(v, int) else v.encode(\"utf-8\"))\n                    for k, v in args.items() if v or isinstance(v, int))\n\n    def _url(self, path, **args):\n        url = self.base_url + \"/1/\" + path\n        args = self._clean(**args)\n        if args:\n            url += \"?\" + urlencode(args)\n        return url\n"
  },
  {
    "path": "commands/apps/quip/quip_config.chezmoi.template.ini",
    "content": "# Template example for creating quip_config.ini with chezmoi\n# (https://www.chezmoi.io/) using values stored in KeePassXC. I use this\n# template to generate my personal configuration file. I keep in KeepassXC two\n# items:\n#\n# - \"Quip personal token\", which contains my API token in the Password field,\n#   and has two custom attributes named \"BaseURL\" and \"APIURL\", which are used\n#   to populate the corresponding fields below.\n#\n# - \"Quip documents\", which contains custom attributes for the FolderID,\n#   TemplateID and DocID values for all sections. For example, the FolderID for\n#   \"Note\" items is called \"Note.FolderID\".\n#\n# You need to configure chezmoi to know where to find your KeePassXC database,\n# and your Keyfile if you use one. My config file ~/.config/chezmoi/chezmoi.toml\n# looks like this:\n#\n# [keepassxc]\n#     database = \"/path/to/my/KeePassXC/Passwords.kdbx\"\n#     args = [\"-k\", \"/path/to/my/KeePassXC/keyfile.keyx\"]\n#\n# If you don't use chezmoi for all your dotfiles, you can generate a single file\n# by running chezmoi like this:\n#\n# chezmoi execute-template -o quip_config.ini < quip_config.chezmoi.template.ini\n#\n# Note: if you use 1Password, you can also use chezmoi, or use the native `op\n# inject` (https://developer.1password.com/docs/cli/reference/commands/inject/)\n\n\n# Values in the DEFAULT section are inherited for all the other sections, but\n# you can override any of them in the individual sections below.\n[DEFAULT]\n###\n### Authentication\n###\n\n# Quip API token. Get one at https://quip.com/api/personal-token\nAPIToken = {{ (keepassxc \"Quip personal token\").Password }}\n\n###\n### Behaviors for document creation\n###\n\n# Prepend date to the title of new documents?\nPrependDate = yes\n# Whether to automatically open the created documents\nOpenDoc = yes\n# Whether to copy the URL of newly created documents to the clipboard\nCopyURLToClipboard = no\n# Whether to open documents in the app or in the browser\nUseQuipApp = yes\n# Default values for Raycast command metadata\nCommandTitle = New ${section} in Quip\nCommandArgPlaceholder = ${section} title\n# You can set a default FolderID here. If not set, new documents are placed\n# in your top-level \"Private\" Quip folder\n# FolderID =\n# Default action, can be \"create\" or \"add\"\nAction = create\n# Produce a notification at the end?\nNotify = no\n# Whether the command should accept an empty argument and in that case just open\n# the document (this applies only to 'add' actions)\nOpenDocIfEmptyArg = no\n\n###\n### URLs. Defaults should be OK for most users.\n###\n\n# Quip base URL to use\nBaseURL = {{ keepassxcAttribute \"Quip personal token\" \"BaseURL\" }}\n# Quip API URL to use\nAPIURL = {{ keepassxcAttribute \"Quip personal token\" \"APIURL\" }}\n\n###\n### Each section below defines a new \"document type\", which can be stored in\n### different folders and override any of the defaults.\n###\n### The section names are arbitrary, and you should define at least the FolderID\n### attribute for each of them (but it's not mandatory)\n### The document/folder IDs can be obtained by using the \"Copy Link\" menu\n### option in Quip. The ID is the part that comes right after the hostname\n### in the URL. For example: https://quip.com/A7RmAB1oNeuL\n###\n\n### Below custom sections for different document types\n\n## First the 'create' actions, which create new documents in different folders,\n## with different templates.\n\n[doc]\n# Document without a folder, created in the default location.\n\n[Note]\n# Quip Folder ID for general notes.\nFolderID = {{ keepassxcAttribute \"Quip documents\" \"Note.FolderID\" }}\n\n[Meeting notes]\n# Quip Folder ID for meeting notes.\nFolderID = {{ keepassxcAttribute \"Quip documents\" \"Meetings.FolderID\" }}\n# Meeting notes template\nTemplateID = {{ keepassxcAttribute \"Quip documents\" \"Meetings.TemplateID\" }}\n# Some custom metadata for the Raycast command\nCommandArgPlaceholder = Meeting title\n\n[Project page]\n# Quip Folder ID for project pages\nFolderID = {{ keepassxcAttribute \"Quip documents\" \"Project.FolderID\" }}\n# Project notes template\nTemplateID = {{ keepassxcAttribute \"Quip documents\" \"Project.TemplateID\" }}\n# Project don't get the date prepended\nPrependDate = no\n# Metadata for the Raycast command\nCommandArgPlaceholder = Project name\n\n[Training/course notes]\nFolderID = {{ keepassxcAttribute \"Quip documents\" \"Training.FolderID\" }}\n\n## Now the 'add' actions, which add text to an existing document. These sections\n## will not work until you add the appropriate 'DocID' parameter.\n\n# Command to add todo items to an existing Quip document.\n[TODO]\naction = add\n# The ID of the document where the text should be added\nDocID = {{ keepassxcAttribute \"Quip documents\" \"TODO.DocID\" }}\n# Prepend the date to the text?\nPrependDate = no\n# Produce a notification and don't open the doc. But if an empty argument is\n# given, open the document.\nNotify = yes\nOpenDoc = no\nOpenDocIfEmptyArg = yes\n# Add the text as a list item? Value can be \"todo\", \"bullet\" or \"num\". Anything\n# else adds is as regular text. Note that the text you add can contain Markdown\n# markup.\nListType = todo\n\n# Command to add items to a \"brag document\" (a doc where I keep a record of my\n# accomplishments).\n[BRAG item]\naction = add\n# The ID of the document where the text should be added\nDocID = {{ keepassxcAttribute \"Quip documents\" \"BRAG.DocID\" }}\n# Prepend the date to the text?\nPrependDate = yes\n# Produce a notification and don't open the doc. But if an empty argument is\n# given, open the document.\nNotify = yes\nOpenDoc = no\nOpenDocIfEmptyArg = yes\n# Add the text as a list item? Value can be \"todo\", \"bullet\" or \"num\". Anything\n# else adds is as regular text. Note that the text you add can contain Markdown\n# markup.\nListType = none\n# Metadata for the Raycast command\nCommandArgPlaceholder = BRAG text\n"
  },
  {
    "path": "commands/apps/quip/quip_config.template.ini",
    "content": "# You must configure at least the APIToken in the DEFAULT section.\n#\n# Please note: Do NOT quote values in this file.\n\n# Values in the DEFAULT section are inherited for all the other sections, but\n# you can override any of them in the individual sections below.\n[DEFAULT]\n###\n### Authentication\n###\n\n# Quip API token. Get one at https://quip.com/api/personal-token\nAPIToken =\n\n###\n### Behaviors for document creation\n###\n\n# Prepend date to the title of new documents?\nPrependDate = yes\n# Whether to automatically open the created documents\nOpenDoc = yes\n# Whether to copy the URL of newly created documents to the clipboard\nCopyURLToClipboard = no\n# Whether to open documents in the app or in the browser\nUseQuipApp = yes\n# Default values for Raycast command metadata\nCommandTitle = New ${section} in Quip\nCommandArgPlaceholder = ${section} title\n# You can set a default FolderID here. If not set, new documents are placed\n# in your top-level \"Private\" Quip folder\n# FolderID =\n# Default action, can be \"create\" or \"add\"\nAction = create\n# Produce a notification at the end?\nNotify = no\n# Whether the command should accept an empty argument and in that case just open\n# the document (this applies only to 'add' actions)\nOpenDocIfEmptyArg = no\n\n###\n### URLs. Defaults should be OK for most users.\n###\n\n# Quip base URL to use\nBaseURL = https://quip.com/\n# Quip API URL to use\nAPIURL = https://platform.quip.com\n\n###\n### Each section below defines a new \"document type\", which can be stored in\n### different folders and override any of the defaults.\n###\n### The section names are arbitrary, and you should define at least the FolderID\n### attribute for each of them (but it's not mandatory)\n### The document/folder IDs can be obtained by using the \"Copy Link\" menu\n### option in Quip. The ID is the part that comes right after the hostname\n### in the URL. For example: https://quip.com/A7RmAB1oNeuL\n###\n\n### Below custom sections for different document types\n\n## First the 'create' actions, which create new documents in different folders,\n## with different templates.\n\n[doc]\n# Document without a folder, created in the default location.\n\n[Note]\n# Quip Folder ID for general notes.\n# FolderID =\n\n[Meeting notes]\n# Quip Folder ID for meeting notes.\n# FolderID =\n# Meeting notes template, if you want to use one\n# TemplateID =\n# Some custom metadata for the Raycast command\nCommandArgPlaceholder = Meeting title\n\n[Project page]\n# Quip Folder ID for project pages\n# FolderID =\n# Project notes template\n# TemplateID =\n# Project don't get the date prepended\nPrependDate = no\n# Metadata for the Raycast command\nCommandArgPlaceholder = Project name\n\n[Training/course notes]\n# Quip folder ID for storing course notes\n# FolderID =\n\n## Now the 'add' actions, which add text to an existing document. These sections\n## will not work until you add the appropriate 'DocID' parameter.\n\n# Command to add todo items to an existing Quip document.\n[TODO]\naction = add\n# The ID of the document where the text should be added\n# THIS PARAMETER IS MANDATORY for 'add' actions.\n# DocID =\n# Prepend the date to the text?\nPrependDate = no\n# Produce a notification and don't open the doc. But if an empty argument is\n# given, open the document.\nNotify = yes\nOpenDoc = no\nOpenDocIfEmptyArg = yes\n# Add the text as a list item? Value can be \"todo\", \"bullet\" or \"num\". Anything\n# else adds is as regular text. Note that the text you add can contain Markdown\n# markup.\nListType = todo\n\n# Command to add items to a \"brag document\" (a doc where I keep a record of my\n# accomplishments).\n[BRAG item]\naction = add\n# The ID of the document where the text should be added\n# THIS PARAMETER IS MANDATORY for 'add' actions.\n# DocID =\n# Prepend the date to the text?\nPrependDate = yes\n# Produce a notification and don't open the doc. But if an empty argument is\n# given, open the document.\nNotify = yes\nOpenDoc = no\nOpenDocIfEmptyArg = yes\n# Add the text as a list item? Value can be \"todo\", \"bullet\" or \"num\". Anything\n# else adds is as regular text. Note that the text you add can contain Markdown\n# markup.\nListType = none\n# Metadata for the Raycast command\nCommandArgPlaceholder = BRAG text\n"
  },
  {
    "path": "commands/apps/quip/quip_utils.py",
    "content": "#!/usr/bin/env python3\n#\n# Utility library for interacting with the Quip API and for other common\n# functions.\n#\n# Diego Zamboni <diego@zzamboni.org>\n\nimport quip\nimport os\nimport sys\nimport subprocess\nimport re\nfrom datetime import datetime\nfrom configparser import ConfigParser, ExtendedInterpolation\n\nconfig = None\nconfig_file = \"quip_config.ini\"\n\n# Custom config interpolation class that allows interpolating the current\n# section name.\n# Code from https://stackoverflow.com/a/47360765\nclass ExtendedSectionInterpolation(ExtendedInterpolation):\n    def before_get(self, parser, section, option, value, defaults):\n        defaults.maps.append({'section': section})\n        return super().before_get(parser, section, option, value, defaults)\n\n# Print error message and exit with a non-zero code.\ndef fail(message):\n    red = \"\\u001b[31m\"\n    print(red + message)\n    sys.exit(1)\n\n# Produce a macOS notification message\ndef notify(title, text):\n    CMD = '''\n    on run argv\n      display notification (item 2 of argv) with title (item 1 of argv)\n    end run\n    '''\n    subprocess.call(['osascript', '-e', CMD, title, text])\n\n# Read configuration file into global config variable.\ndef readConfig(filename=config_file):\n    global config\n    config = ConfigParser(interpolation=ExtendedSectionInterpolation())\n    files_read = config.read(filename)\n    if filename not in files_read:\n        fail(f\"Could not read config file '{filename}'.\")\n\n# Check whether the APIToken field has a non-empty value and exit if it doesn't.\n# Does not verify that it's valid.\ndef checkAPIToken(doc_type):\n    if config[doc_type].get('APIToken', \"\") == \"\":\n        fail(f\"Error: Please configure APIToken in {config_file}.\")\n\n# Put a string in the macOS clipboard using the pbcopy command.\n#\n# Function originally from\n# https://gist.github.com/XuankangLin/7ec82f80a0044a52330720244de2d15a modified\n# to automatically call encode('utf_8') on its argument, with the assumption\n# that it's a string.\ndef setClipboardData(text):\n    p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)\n    p.stdin.write(text.encode('utf_8'))\n    p.stdin.close()\n    retcode = p.wait()\n\ndef quip_open(thing, doc_type='DEFAULT'):\n    # thing can be a DocID or a URL. DocIDs are 11 or 12 characters long\n    if len(thing) in [11,12]:\n        url = config[doc_type].get('BaseURL', 'https://quip.com/') + thing\n    else:\n        url = thing\n    app_args=[]\n    if config[doc_type].getboolean('UseQuipApp'):\n        app_args=[\"-a\", \"Quip\"]\n    try:\n        open_args=[\"/usr/bin/open\", *app_args, url]\n        # We use Popen to put the open process in the background.\n        pid = subprocess.Popen(open_args).pid\n    except OSError as e:\n        fail(f\"Execution failed: {e}\")\n\n# Normalize a string by lowercasing and replacing whitespace with dashes.\ndef normalize(s):\n    return re.sub('\\W+', '-', s.lower())\n\n# Create a new document in Quip.\n#\n# The document is created according to the configuration associated with the\n# given doc_type. This indicates parameters such as the APIToken to use, whether\n# to prepend the current date to the text, and the folder in which the document\n# should be stored. See quip_config.ini for the full list of available\n# configuration parameters.\n#\ndef quip_new_doc(doc_type, text):\n    readConfig()\n    if not config.has_section(doc_type):\n        # Map section names to their \"normalized\" variants used in the filenames\n        denormalized_types = {}\n        for t in config.sections():\n            denormalized_types[normalize(t)] = t\n        if doc_type in denormalized_types:\n            doc_type = denormalized_types[doc_type]\n        else:\n            fail(f\"Error: Quip document type '{doc_type}' is not defined in {config_file}.\")\n    checkAPIToken(doc_type)\n\n    # Prepend date to the text if needed\n    if text and config[doc_type].getboolean('PrependDate'):\n        dateformat = config[doc_type].get('DateFormat', \"%Y-%m-%d\")\n        text = datetime.now().strftime(dateformat) + \" \" + text\n\n    # What to do?\n    action = config[doc_type].get('action', 'create')\n    # Notification message to produce at the end\n    message_title = \"\"\n    message_body = \"\"\n\n    try:\n        client = quip.QuipClient(access_token=config[doc_type]['APIToken'], base_url=config[doc_type]['APIURL'])\n\n        if action == 'create':\n            # print(f\"Creating new note '{text}' in folder {folder_id}...\")\n            folders = []\n            folderID = config[doc_type].get('FolderID',None)\n            if folderID:\n                folders = [folderID]\n            templateID = config[doc_type].get('TemplateID', None)\n            # If TemplateID is given, use it to create the doc, otherwise create an empty one\n            if templateID:\n                result = client.copy_document(templateID, folder_ids=[folderID], title=text)\n            else:\n                result = client.new_document(content=text, format=\"markdown\", member_ids=folders)\n            message_title = f\"New {doc_type} created\"\n            message_body = message_title\n        elif action == 'add':\n            listmarkup = { \"todo\": \"[] \", \"bullet\": \"- \", \"num\": \"1. \" }\n            listtype = config[doc_type].get('ListType', 'none')\n            docid = config[doc_type].get('DocID', None)\n            if not docid:\n                fail(f\"Error: no DocID provided, needed for 'add' action.\")\n            if text:\n                if listtype in listmarkup:\n                    text = listmarkup[listtype] + text\n                result = client.edit_document(docid, text, format='markdown', section_id='')\n                message_title = f\"New {doc_type} added to document\"\n                message_body = message_title\n            else:\n                if config[doc_type].getboolean('OpenDocIfEmptyArg'):\n                    message_title = f\"Opening {doc_type} document\"\n                quip_open(docid, doc_type)\n                sys.exit(0)\n        else:\n            fail(f\"Error: Invalid action value '{action}', should be 'create' or 'add'.\")\n\n    except Exception as e:\n        if e.code == 401:\n            fail(f\"Please configure/verify your Quip API token in {config_file}\")\n        elif e.code == 400:\n            fail(f\"Please configure/verify folder ID for [{doc_type}] in {config_file}\")\n        else:\n            fail(f\"Received a Quip error:\", e, file=sys.stderr)\n\n    if result:\n        url = result['thread']['link']\n        if url:\n            if config[doc_type].getboolean('CopyURLToClipboard'):\n                setClipboardData(url)\n                message_body = message_body + f\", URL copied to clipboard\"\n\n            if config[doc_type].getboolean('OpenDoc'):\n                message_body = message_body + f\", opening {url}\"\n                quip_open(url, doc_type)\n            message_body = message_body + \".\"\n            print(message_body)\n            if config[doc_type].getboolean('Notify'):\n                notify(message_title, message_body)\n        else:\n            fail(f\"Something went wrong, could not get the document URL.\")\n    else:\n        fail(f\"Something went wrong, could not create document.\")\n"
  },
  {
    "path": "commands/apps/quip/set-up-quip-commands.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set up Quip commands\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon /Applications/Quip.app/Contents/Resources/AppIcon.icns\n# @raycast.packageName Quip utilities\n# @raycast.needsConfirmation true\n\n# Documentation:\n# @raycast.description Create script commands for creating Quip documents, based on the configuration in quip_config.ini.\n# @raycast.author diego_zamboni\n# @raycast.authorURL https://raycast.com/diego_zamboni\n\nimport quip_utils\nimport os\nimport glob\n\n# Read template\ncmd_template=\"quip-new.template.py\"\nwith open(cmd_template, 'r') as file:\n    template = file.read()\n\nblue = \"\\u001b[34m\"\nyellow = \"\\u001b[33m\"\ngreen = \"\\u001b[32m\"\nred = \"\\u001b[31m\"\n\nprint(f\"Reading quip_config.ini...\")\nquip_utils.readConfig()\ndoc_types = quip_utils.config.sections()\nquip_utils.checkAPIToken('DEFAULT')\nprint(blue + f\"The configuration file contains the following document types: {' '.join(doc_types)}\")\n\nprint(yellow + f\"Removing old scripts before creating new ones...\")\nfor file in glob.glob(\"quip-new-*.py\"):\n    print(yellow + f\"   {file}\")\n    os.remove(file)\n\nfor type in doc_types:\n    new_script = template\n    normalized_type = quip_utils.normalize(type)\n    filename = f\"quip-new-{normalized_type}.py\"\n    print(blue + f\"Creating script for '{type}': \", end=\"\")\n    # Replace config values in template\n    template_values = {}\n    for k,v in quip_utils.config[type].items():\n        # If it's a boolean value, convert it to a JSON-style boolean (i.e. \"true\" or \"false\", all lowercase)\n        if v in quip_utils.config.BOOLEAN_STATES.keys():\n            v = str(quip_utils.config[type].getboolean(k)).lower()\n        template_k = \"{{\" + k + \"}}\"\n        new_script = new_script.replace(template_k, v)\n    with open(filename, 'w') as file:\n        file.write(new_script)\n        print(f\"{green}{filename}\")\n"
  },
  {
    "path": "commands/apps/raycast/celebrate.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Celebrate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🎉\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Times (Default: 1)\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Interval (Default: 0)\", \"optional\": true  }\n# @raycast.packageName Raycast\n\n# Documentation:\n# @raycast.description Set Confetti to run for a number of times and during intervals\n# @raycast.author Fatpandac\n# @raycast.authorURL https://github.com/Fatpandac\n\ntimes=1\ninterval=0\n\nif [ -n \"$1\" ]; then\n    times=$1\nfi\nif [ -n \"$2\" ]; then\n    interval=$(($2))\nfi\n\nfor i in $(seq 1 $times); do\n    open raycast://confetti\n    echo \"Celebrate  🎉\"\n    sleep $interval\ndone\n"
  },
  {
    "path": "commands/apps/reminders/reminders-create-reminder.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `Quick reminder for Raycast` installed: \nhttps://www.icloud.com/shortcuts/62a0cedf7bce488eb0bde4b8a3a8b0de\n\n# @raycast.title Add Reminder\n# @raycast.author Andrei Nedelcu\n# @raycast.authorURL https://dinosaurgame.net\n# @raycast.description Add a new reminder.\n#\n# @raycast.icon images/reminders.png\n#\n# @raycast.mode silent\n# @raycast.packageName Create Reminder\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"What\", \"percentEncoded\": false}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"When\", \"optional\": true, \"percentEncoded\": false}\n\nif test -z \"$2\"\nthen\n\techo \"${1}\" | shortcuts run \"Quick reminder for Raycast\"\nelse\n\techo \"${1}, ${2}\" | shortcuts run \"Quick reminder for Raycast\"\nfi\n\necho \"Reminder created!\""
  },
  {
    "path": "commands/apps/safari/README.md",
    "content": "<div>\n  <img src=\"./images/safari.png\" height=\"32px\" width=\"32px\" align=\"left\">\n  <h2>Safari</h2>\n</div>\n\nAdd a few missing actions to make tab management easier in Safari. \n\n![Screenshot of Things](images/screenshot.png)"
  },
  {
    "path": "commands/apps/safari/safari-bing-edge-user-agent.applescript",
    "content": "#!/usr/bin/osascript\n# Check \"Safari > Advanced > Develop\" first.\n# This script works on the English Safari menu.\n\n# @raycast.title Open Bing with Edge User-Agent\n# @raycast.description Open Bing in Safari with Edge User-Agent\n# @raycast.author smxl\n# @raycast.authorURL https://github.com/smxl\n\n# @raycast.icon images/safari.png\n# @raycast.mode silent\n# @raycast.packageName Safari\n# @raycast.schemaVersion 1\n\ntell application \"Safari\"\n\tactivate\n\tset theURL to \"https://www.bing.com\"\n\tset newTab to make new tab at end of tabs of window 1\n\tset current tab of window 1 to newTab\n\tset theUserAgent to \"Microsoft Edge ¡ª MacOS\"\n\tset URL of newTab to theURL\n\ttell application \"System Events\"\n\t\ttell process \"Safari\"\n\t\t\tclick menu item theUserAgent of menu \"User Agent\" of menu item \"User Agent\" of menu \"Develop\" of menu bar 1\n\t\tend tell\n\tend tell\nend tell"
  },
  {
    "path": "commands/apps/safari/safari-clear-cache-reload.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Cache and Refresh Page\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n#\n# Documentation:\n# @raycast.description This script clears cache and reloads the page of the frontmost Safari window.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\ntell application \"Safari\" to activate\ntell application \"System Events\" to keystroke \"r\" using {option down, command down} --warning: undocumented can change w/o notice\n"
  },
  {
    "path": "commands/apps/safari/safari-close-all-tabs.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close All Tabs\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Close all tabs in the frontmost window\n\ntell window 1 of application \"Safari\" to close tabs\n"
  },
  {
    "path": "commands/apps/safari/safari-close-duplicated-tabs.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close Duplicated Tabs\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Close tabs with the same URL.\n\ntell window 1 of application \"Safari\"\n  set visitedURLs to {}\n  set closedTabs to 0\n  set allTabs to tabs\n\n  repeat with i from length of allTabs to 1 by -1\n    set currentTab to item i of allTabs\n    set currentURL to URL of currentTab\n\n    if visitedURLs contains currentURL then\n      close currentTab\n      set closedTabs to closedTabs + 1\n    else \n      copy currentURL to end of visitedURLs\n    end if\n  end repeat\n\n  if closedTabs is equal to 1 then\n    log \"Closed 1 duplicated tab\"\n  else if closedTabs is greater than 1 then\n    log \"Closed \" & closedTabs & \" duplicated tab\"\n  else \n    log \"No duplicated tabs found\"\n  end if \nend"
  },
  {
    "path": "commands/apps/safari/safari-close-other-tabs.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close Other Tabs\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Close all tabs besides the currently active tab.\n\ntell window 1 of application \"Safari\"\n  set currentTab to get index of current tab\n  close tabs where index is not equal to currentTab\nend\n"
  },
  {
    "path": "commands/apps/safari/safari-close-tabs-left.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close Tabs to the Left\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Close all tabs to the left side of the currently active tab.\n\ntell window 1 of application \"Safari\"\n  set currentTab to get index of current tab\n  close tabs where index is less than currentTab\nend\n"
  },
  {
    "path": "commands/apps/safari/safari-close-tabs-right.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close Tabs to the Right\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Close all tabs to the right side of the currently active tab.\n\ntell window 1 of application \"Safari\"\n  set currentTab to get index of current tab\n  close tabs where index is greater than currentTab\nend"
  },
  {
    "path": "commands/apps/safari/safari-create-reading-list-item.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Item to Reading List\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Link\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Title\", \"optional\": true }\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Add a new Reading List item with the given URL. Allows a custom title to be specified.\n\non run argv\n  try\n    set linkArgument to item 1 of argv as text\n    set titleArgument to item 2 of argv as text\n\n    if titleArgument is equal to \"\" then\n      tell application \"Safari\" to add reading list item linkArgument\n    else\n      tell application \"Safari\" to add reading list item linkArgument with title titleArgument\n    end if\n    \n    log \"Added item to reading list\"\n  on error errorMessage number errorNumber\n    log errorMessage\n    log \"Failed to add item to reading list\"\n    return errorNumber\n  end try\nend run\n"
  },
  {
    "path": "commands/apps/safari/safari-current-page-url-in-chrome.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Open Safari URL in Chrome\n# @raycast.description Open current Safari URL in new tab in Chrome\n# @raycast.author Dave Lehman\n# @raycast.authorURL https://github.com/dlehman\n\n# @raycast.icon images/safari.png\n# @raycast.mode silent\n# @raycast.packageName Safari\n# @raycast.schemaVersion 1\n\ntell application \"Safari\"\n\tset safariUrl to URL of front document\nend tell\n\ntell application \"Google Chrome\"\n\tactivate\n\tdelay 0.5\n\ttell front window to make new tab at after (get active tab) with properties {URL:safariUrl} -- open a new tab after the current tab\n\tactivate\nend tell\n"
  },
  {
    "path": "commands/apps/safari/safari-current-page-url-in-firefox.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Open Safari URL in Firefox\n# @raycast.description Open current Safari URL in new tab in Firefox\n# @raycast.author Dave Lehman\n# @raycast.authorURL https://github.com/dlehman\n\n# @raycast.icon images/safari.png\n# @raycast.mode silent\n# @raycast.packageName Safari\n# @raycast.schemaVersion 1\n\ntell application \"Safari\"\n\tset safariUrl to URL of front document\nend tell\n\ntell application \"Firefox\"\n\tactivate\n\tdelay 0.5\n\topen location safariUrl\n\tactivate\nend tell\n"
  },
  {
    "path": "commands/apps/safari/safari-download-url.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Download Current URL\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Michael Bianco\n# @raycast.authorURL https://github.com/iloveitaly\n# @raycast.description Download the currently active tab's URL.\n\ntell application \"Safari\"\n\tactivate\n\tset currentTab to current tab of window 1\n\tset theURL to URL of currentTab\nend tell\n\n-- Simulate pressing Option key and clicking the link\ntell application \"System Events\"\n\tkeystroke \"l\" using {command down} -- Select the address bar (Cmd + L)\n\tdelay 0.5\n\tkeystroke return using {option down} -- Press Option + Return to download the file\nend tell\n"
  },
  {
    "path": "commands/apps/safari/safari-duplicate-tab.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Duplicate Tab\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Safari\n# @raycast.icon images/safari.png\n\n# @Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Duplicates and opens the currently active tab.\n\ntell window 1 of application \"Safari\"\n  set currentURL to get URL of current tab\n  set newTab to make new tab with properties { URL: currentURL }\n  set current tab to newTab\nend"
  },
  {
    "path": "commands/apps/session/session-abandon.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `Session X v2.1.6` installed: https://www.stayinsession.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Abandon Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/session.png\n# @raycast.packageName Session\n\n# @Documentation:\n# @raycast.description Starts a focus session in Session app\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\nopen \"session:///abandon\"\n"
  },
  {
    "path": "commands/apps/session/session-finish.sh",
    "content": "#!/bin/bash\n\n# Note: Session X v2.1.6 required: https://www.stayinsession.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Finish Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/session.png\n# @raycast.packageName Session\n\n# @Documentation:\n# @raycast.description Finishes a focus session in Session app\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\nopen \"session:///finish\"\n\n"
  },
  {
    "path": "commands/apps/session/session-pause.sh",
    "content": "#!/bin/bash\n\n# Note: Session X v2.1.6 required: https://www.stayinsession.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/session.png\n# @raycast.packageName Session\n\n# @Documentation:\n# @raycast.description Starts a focus session in Session app\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\nopen \"session:///pause\"\n\n"
  },
  {
    "path": "commands/apps/session/session-start-new.sh",
    "content": "#!/bin/bash\n\n# Note: Session X v2.1.6 required: https://www.stayinsession.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/session.png\n# @raycast.packageName Session\n\n# @Documentation:\n# @raycast.description Starts a focus session in Session app\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Intent\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Minutes duration\", \"optional\": true }\n\nopen \"session:///start?intent=${1}&duration=${2}\"\n"
  },
  {
    "path": "commands/apps/session/session-start-previous.sh",
    "content": "#!/bin/bash\n\n# Note: Session X v2.1.6 required: https://www.stayinsession.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Previous Session\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/session.png\n# @raycast.packageName Session\n\n# @Documentation:\n# @raycast.description Starts a focus session in Session app with the previous intent and duration\n# @raycast.author James Lyons\n# @raycast.authorURL https://github.com/jamesjlyons\n\nopen \"session:///start-previous\"\n\n"
  },
  {
    "path": "commands/apps/sidenotes/sidenotes-create-note.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: Requires SideNotes (https://apptorium.com/sidenotes)\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title SideNotes create\n# @raycast.mode silent\n# @raycast.packageName SideNotes\n\n# Optional parameters:\n# @raycast.packageName SideNotes\n# @raycast.icon images/sidenotes.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Note\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Folder\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Create a new note within the selected or the first SideNotes folder.\n# @raycast.author Marcel Bochtler\n# @raycast.authorURL https://github.com/MarcelBochtler\n\non run argv\n\tif application \"SideNotes\" is not running then\n\t\tlog \"SideNotes is not running\"\n\t\treturn\n\tend if\n\n\ttell application \"SideNotes\"\n\t\tset note_content to item 1 of argv\n\t\tset folder_name to item 2 of argv\n\n\t\t# Create a folder if none exist\n\t\tif (count of folders) is 0 then\n\t\t\tif folder_name is \"\" then\n\t\t\t\tmake new folder with properties {name:note_content}\n\t\t\telse\n\t\t\t\tmake new folder with properties {name:folder_name}\n\t\t\tend if\n\t\tend if\n\n\t\tset folder_index to my index_of_folder(folder_name, folders)\n\n\t\tif folder_index is -1 then\n\t\t\t# Folder not found. Create one if the name is given.\n\t\t\t# Otherwise create the note in the current or the first folder.\n\t\t\tif folder_name is not \"\" then\n\t\t\t\tset target_folder to make new folder with properties {name:folder_name}\n\t\t\telse\n\t\t\t\tif current folder is missing value then\n\t\t\t\t\tset target_folder to first folder\n\t\t\t\telse\n\t\t\t\t\tset target_folder to current folder\n\t\t\t\tend if\n\t\t\tend if\n\t\telse\n\t\t\tset target_folder to item folder_index of folders\n\t\tend if\n\n\t\tset created_note to make new note in target_folder at 1 with properties {text:note_content}\n\n\t\topen folder target_folder note created_note\n\n\t\tlog \"Note created in folder \" & (name of target_folder)\n\tend tell\nend run\n\non index_of_folder(folder_name, folder_list)\n\trepeat with i from 1 to the count of folder_list\n\t\tif name of item i of folder_list is folder_name then return i\n\tend repeat\n\n\treturn -1\nend index_of_folder\n"
  },
  {
    "path": "commands/apps/sip/sip-add-hex-color.sh",
    "content": "#!/bin/bash\n\n# Note: Sip X v2.5.3 required\n# Install from https://sipapp.io\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title  Add Color to History\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/sip.png\n# @raycast.packageName Sip\n# Documentation:\n# @raycast.author Sip\n# @raycast.authorURL https://twitter.com/sip_app/\n# @raycast.description  Add a color to your Sip history.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"HEX\" }\n\nopen \"sip://color/hex/${1}/#\"${2//#}\"\n"
  },
  {
    "path": "commands/apps/sip/sip-check-contrast-hex.sh",
    "content": "#!/bin/bash\n\n# Note: Sip X v2.5.3 required\n# Install from https://sipapp.io\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Check Contrast\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/sip.png\n# @raycast.packageName Sip\n# Documentation:\n# @raycast.author Sip\n# @raycast.authorURL https://twitter.com/sip_app/\n# @raycast.description Open Sip Contrast Checker.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"HEX 1\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"HEX 2\" }\n\nopen \"sip://contrast/hex/\"${1//#}\",\"${2//#}\"\"\n"
  },
  {
    "path": "commands/apps/sip/sip-open-check-contrast.sh",
    "content": "#!/bin/bash\n\n# Note: Sip X v2.5.3 required\n# Install from https://sipapp.io\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Contrast Checker\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/sip.png\n# @raycast.packageName Sip\n# Documentation:\n# @raycast.author Sip\n# @raycast.authorURL https://twitter.com/sip_app/\n# @raycast.description Open Sip Contrast Checker.\n\nopen \"sip://contrast\""
  },
  {
    "path": "commands/apps/sip/sip-show-picker.sh",
    "content": "#!/bin/bash\n\n# Note: Sip X v2.5.3 required\n# Install from https://sipapp.io\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Color Picker\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/sip.png\n# @raycast.packageName Sip\n# Documentation:\n# @raycast.author Sip\n# @raycast.authorURL https://twitter.com/sip_app/\n# @raycast.description Pick a color value from your screen.\n\nopen \"sip://picker\""
  },
  {
    "path": "commands/apps/stickies/new-floating-sticky.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title New Floating Sticky Note\n# @raycast.mode silent\n# @raycast.packageName Stickies\n\n# Optional parameters:\n# @raycast.icon images/stickies.png\n\n# Documentation:\n# @raycast.description This script creates a new floating note in the Apple Stickies application\n# @raycast.author Annie Ma\n# @raycast.authorURL http://www.anniema.co/\n\ntell application \"Stickies\"\n\tactivate\n\ttell application \"System Events\"\n\t\tkeystroke \"n\" using command down\n\t\tkeystroke \"f\" using command down & option down\n\tend tell\nend tell"
  },
  {
    "path": "commands/apps/sublime/open-with-sublime.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open with Sublime\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon https://cdn.worldvectorlogo.com/logos/sublime-text.svg\n# @raycast.packageName Sublime\n\n# Documentation:\n# @raycast.author Rock Hu\n# @raycast.authorURL https://twitter.com/0xRock\n# @raycast.description Open currently focused directory in Sublime\n\nset targetApp to path to application \"Sublime Text\"\n\ntell application \"Finder\"\n    set theSelection to selection\n    if theSelection is {} then\n        if exists Finder window 1 then\n            set currentDir to target of Finder window 1 as alias\n            open currentDir using targetApp\n        end if\n    else\n        open theSelection using targetApp\n    end if\nend tell"
  },
  {
    "path": "commands/apps/surfshark/surfshark-vpn-start.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the vpnutil commandline utility\n# Download and install in your $PATH: https://github.com/Timac/VPNStatus/releases/tag/1.0\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title VPN Connect\n# @raycast.mode compact\n# @raycast.packageName Surfshark\n\n# Optional parameters:\n# @raycast.icon images/surfshark.png\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n# @raycast.description Start Surfshark VPN connection\n\nsource surfshark.config.sh\nVPN=$SURFSHARK_VPN_NAME\n\nvpnutil start \"${VPN}\" >/dev/null 2>&1\necho \"Surfshark VPN connected\"\n"
  },
  {
    "path": "commands/apps/surfshark/surfshark-vpn-status.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the vpnutil commandline utility\n# Download and install in your $PATH: https://github.com/Timac/VPNStatus/releases/tag/1.0\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Surfshark VPN Status\n# @raycast.mode inline\n# @raycast.refreshTime 10s\n# @raycast.packageName Surfshark\n\n# Optional parameters:\n# @raycast.icon images/surfshark.png\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n# @raycast.description Get Surfshark VPN status\n\nsource surfshark.config.sh\nVPN=$SURFSHARK_VPN_NAME\n\nvpnutil status \"${VPN}\"\n"
  },
  {
    "path": "commands/apps/surfshark/surfshark-vpn-stop.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the vpnutil commandline utility\n# Download and install in your $PATH: https://github.com/Timac/VPNStatus/releases/tag/1.0\n\n\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title VPN Disconnect\n# @raycast.mode compact\n# @raycast.packageName Surfshark\n\n# Optional parameters:\n# @raycast.icon images/surfshark.png\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n# @raycast.description Stop Surfshark VPN connection\n\nsource surfshark.config.sh\nVPN=$SURFSHARK_VPN_NAME\n\nvpnutil stop \"${VPN}\" >/dev/null 2>&1\necho \"Surfshark VPN disconnected\"\n"
  },
  {
    "path": "commands/apps/surfshark/surfshark.config.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the vpnutil commandline utility\n# Download and install in your $PATH: https://github.com/Timac/VPNStatus/releases/tag/1.0\n\n# You can find the VPN name in the Network preference pane \nexport SURFSHARK_VPN_NAME=\"Surfshark. IKEv2\"\n\nif ! command -v vpnutil &> /dev/null; then\n  echo \"vpnutil command is required. Download here: https://github.com/Timac/VPNStatus/releases/tag/1.0\";\n  exit 1;\nfi\n\nif [ -z \"$SURFSHARK_VPN_NAME\" ]; then\n  echo \"\\$SURFSHARK_VPN_NAME is empty. Please, set VPN name in \\\"surfshark.config.sh\\\".\";\n  exit 1;\nfi\n"
  },
  {
    "path": "commands/apps/tailscale/README.md",
    "content": "<div>\n  <img src=\"./images/tailscale-icon.png\" height=\"32\" width=\"32\" align=\"left\">\n  <h2>Tailscale</h2>\n</div>\n\nConnect your macOS computer to your devices, services, and friends with these scripts that control the [Tailscale macOS application](https://tailscale.com/download) via [Raycast](http://raycast.com).\n\n![Screenshot of Tailscale](images/screenshot.png)\n\n### Available scripts\n\n- **Connect:** Connect to your most recent Tailscale network, logging in if needed.\n- **Disconnect:** Disconnect from your Tailscale network.\n- **Get IP:** shows your current [private Tailscale IP](https://tailscale.com/kb/1033/ip-and-dns-addresses/).\n- **Switch Account:** Quickly switch between Tailscale networks.\n\n> **Pro tip:** If [`jq` is installed](https://stedolan.github.io/jq/) in your $PATH, these scripts will show information about the network you're connecting to.\n"
  },
  {
    "path": "commands/apps/tailscale/tailscale-connect.sh",
    "content": "#!/bin/bash\n\n# Note: Tailscale v1.8.0 required\n# Install via https://tailscale.com/download\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/tailscale-icon.png\n# @raycast.iconDark ./images/tailscale-iconDark.png\n# @raycast.packageName Tailscale\n\n# @Documentation:\n# @raycast.description Connects to Tailscale\n# @raycast.author Ross Zurowski\n# @raycast.authorURL https://github.com/rosszurowski\n\nts=\"\"\n\nif command -v tailscale &> /dev/null; then\n  ts=$(which tailscale)\nelif [ -f /Applications/Tailscale.app/Contents/MacOS/Tailscale ]; then\n  ts=\"/Applications/Tailscale.app/Contents/MacOS/Tailscale\"\nelse\n  echo \"Tailscale is not installed. See tailscale.com/download\"\n  exit 1\nfi\n\n$ts up\nif command -v jq &> /dev/null; then\n  account=$($ts status --json | jq -r '.User[(.Self.UserID | tostring)].LoginName')\n  echo \"Connected as $account\"\nelse\n  echo \"Connected\"\nfi\n"
  },
  {
    "path": "commands/apps/tailscale/tailscale-disconnect.sh",
    "content": "#!/bin/bash\n\n# Note: Tailscale v1.8.0 required\n# Install via https://tailscale.com/download\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/tailscale-icon.png\n# @raycast.iconDark ./images/tailscale-iconDark.png\n# @raycast.packageName Tailscale\n\n# @Documentation:\n# @raycast.description Disconnects from Tailscale\n# @raycast.author Ross Zurowski\n# @raycast.authorURL https://github.com/rosszurowski\n\nts=\"\"\n\nif command -v tailscale &> /dev/null; then\n  ts=$(which tailscale)\nelif [ -f /Applications/Tailscale.app/Contents/MacOS/Tailscale ]; then\n  ts=\"/Applications/Tailscale.app/Contents/MacOS/Tailscale\"\nelse\n  echo \"Tailscale is not installed. See: tailscale.com/download\"\n  exit 1\nfi\n\n$ts down\necho \"Disconnected\"\n"
  },
  {
    "path": "commands/apps/tailscale/tailscale-ip.sh",
    "content": "#!/bin/bash\n\n# Note: Tailscale v1.8.0 required\n# Install via https://tailscale.com/download\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Get IP\n# @raycast.mode inline\n# @raycast.refreshTime 1d\n\n# Optional parameters:\n# @raycast.icon ./images/tailscale-icon.png\n# @raycast.iconDark ./images/tailscale-iconDark.png\n# @raycast.packageName Tailscale\n\n# @Documentation:\n# @raycast.description Gets your private Tailscale IP\n# @raycast.author Ross Zurowski\n# @raycast.authorURL https://github.com/rosszurowski\n\nts=\"\"\n\nif command -v tailscale &> /dev/null; then\n  ts=$(which tailscale)\nelif [ -f /Applications/Tailscale.app/Contents/MacOS/Tailscale ]; then\n  ts=\"/Applications/Tailscale.app/Contents/MacOS/Tailscale\"\nelse\n  echo \"Tailscale is not installed. See tailscale.com/download\"\n  exit 1\nfi\n\nip=$($ts ip -4)\necho \"$ip\"\n"
  },
  {
    "path": "commands/apps/tailscale/tailscale-switch.sh",
    "content": "#!/bin/bash\n\n# Note: Tailscale v1.8.0 required\n# Install via https://tailscale.com/download\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch Account\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/tailscale-icon.png\n# @raycast.iconDark ./images/tailscale-iconDark.png\n# @raycast.packageName Tailscale\n\n# @Documentation:\n# @raycast.description Switches Tailscale networks\n\n# Original author\n# @raycast.author Ross Zurowski\n# @raycast.authorURL https://github.com/rosszurowski\n\n# Contributor\n# @raycast.author Daniel Schoemer\n# @raycast.authorURL https://github.com/quatauta\n\nts=\"\"\n\nif command -v tailscale &> /dev/null; then\n  ts=$(which tailscale)\nelif [ -f /Applications/Tailscale.app/Contents/MacOS/Tailscale ]; then\n  ts=\"/Applications/Tailscale.app/Contents/MacOS/Tailscale\"\nelse\n  echo \"Tailscale is not installed. See tailscale.com/download\"\n  exit 1\nfi\n\n\"${ts}\" switch --list |     # List all Tailscale accounts \"<ID>  <Tailnet name>  <User account name>\"\ngrep -vF -e 'ID' -e '*' |   # Omit the header line and the current account marked with \"*\"\nawk '{ print $1 }' |        # Print only the account ID of not-connected accounts\nhead -n1 |                  # Print only the first not-connected account\nxargs -r -n1 \"${ts}\" switch # Switch to the selected account\n\ntailnet=\"$(\"${ts}\" switch --list | awk '/\\*/ { print $2 }')\"\necho \"Switched to ${tailnet}\"\n"
  },
  {
    "path": "commands/apps/terminal-translate/translate.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires translate-shell\n# Install with Homebrew: `npm install terminal-translate -g`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Translate\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 📖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Word or Sentence\" }\n# @raycast.packageName Terminal Translate\n\n# Documentation:\n# @raycast.description Translate word or sentence.\n# @raycast.author Fatpandac\n# @raycast.authorURL https://github.com/Fatpandac\n\nif ! command -v tl &> /dev/null; then\n\techo \"trans command is required (https://github.com/ShanaMaid/terminal-translate).\";\n\texit 1;\nfi\n\ntl $1\n"
  },
  {
    "path": "commands/apps/things/README.md",
    "content": "<div>\n  <img src=\"./images/things.png\" height=\"32px\" width=\"32px\" align=\"left\">\n  <h2>Things</h2>\n</div>\n\nStay on top of your to-dos with this collection of scripts that control the [Things macOS application](https://culturedcode.com/things/) via [Raycast](http://raycast.com). \n\n![Screenshot of Things](images/screenshot.png)\n\n### Available scripts\n\n- **Create To-Do:** Create a new To-Do and set an optional deadline.\n- **Current To-Do:** Show your current To-Do in Raycast.\n- **Search To-Dos:** Search To-Dos with a query.\n- **Today:** Get an overview of your completed tasks.\n\n> **Pro tip:** Add the *Current To-Do* or the *Today* script to your favorites to have it always visible when opening Raycast.\n"
  },
  {
    "path": "commands/apps/things/things-create-todo.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create To-Do\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/things.png\n# @raycast.packageName Things\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Notes\", \"percentEncoded\": true, \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"When (e.g. \\\"today\\\")\", \"percentEncoded\": true, \"optional\": true }\n\n# Documentation:\n# @raycast.description Create a new To-Do with title and optional deadline.\n# @raycast.author Things\n# @raycast.authorURL https://twitter.com/culturedcode/\n\nopen \"things:///add?title=$1&notes=$2&when=$3\"\necho \"Created To-Do\""
  },
  {
    "path": "commands/apps/things/things-current-todo.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Current To-Do\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.packageName Things\n# @raycast.icon images/things.png\n\n# Documentation:\n# @raycast.description Show your current To-Do to stay focused.\n# @raycast.author Things\n# @raycast.authorURL https://twitter.com/culturedcode/\n\nif application \"Things3\" is not running then\n\tlog \"Things is not running\"\n\treturn\nend if\n\ntell application \"Things3\"\n  set todayTodos to to dos of list \"Today\"\n  \n  repeat with i from 1 to count of todayToDos\n    set todo to item i of todayToDos\n\n    if status of todo is open then\n      set currentTodoName to name of todo as text\n      log currentTodoName\n      return\n    end if\n  end repeat\n\n  log \"You're all done for today 🎉\"\nend tell"
  },
  {
    "path": "commands/apps/things/things-search-to-dos.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search To-Dos\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/things.png\n# @raycast.packageName Things\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.description Search To-Dos with a query.\n# @raycast.author Things\n# @raycast.authorURL https://twitter.com/culturedcode/\n\nopen \"things:///search?query=$1\"\n"
  },
  {
    "path": "commands/apps/things/things-today.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Today\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.packageName Things\n# @raycast.icon images/things.png\n\n# Documentation:\n# @raycast.description Get an overview of your completed tasks for today.\n# @raycast.author Things\n# @raycast.authorURL https://twitter.com/culturedcode/\n\nif application \"Things3\" is not running then\n\tlog \"Things is not running\"\n\treturn\nend if\n\ntell application \"Things3\"\n  set todayTodos to to dos of list \"Today\"\n\n  set todosCount to the length of todayTodos\n  set completedTodosCount to 0\n\n  repeat with i from 1 to count of todayToDos\n    set todo to item i of todayToDos\n\n    if status of todo is completed then\n      set completedTodosCount to completedTodosCount + 1\n    end if \n  end repeat\n\n  if completedTodosCount is equal to todosCount then\n    log \"You're all done for today 🎉\"\n  else\n    set progress to round(100 * completedTodosCount / todosCount)\n    log (progress as string) & \"% Completed of \" & todosCount & \" To-Dos\"\n  end if\nend tell"
  },
  {
    "path": "commands/apps/timing/timing-start-timer.js",
    "content": "#!/usr/bin/osascript -l JavaScript\n\n// Note: Timing.app is required with an Expert or Connect subscription\n// Learn more and install: https://timingapp.com\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Start Timer\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon images/timing-logo.png\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Project\", \"optional\": true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Title\", \"optional\": true }\n// @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Duration\", \"optional\": true }\n// @raycast.packageName Timing\n\n// Documentation:\n// @raycast.description Start a timer\n// @raycast.author Landen Danyluk\n// @raycast.authorURL https://github.com/landendanyluk\n\nfunction run(argv) {\n    const timing = Application('TimingHelper');\n\n    // throw if AppleScript support is not enabled\n    if (!timing.scriptingSupportAvailable()) {\n        console.log('Scripting support requires an Expert or Connect subscription');\n        throw new Error();\n    }\n\n    // throw if both project and title are empty\n    if (!(argv[0] || argv[1])) {\n        console.log(\"Please enter a project name or title\");\n        throw new Error();\n    }\n\n    let project;\n    if (argv[0] !== \"\") {\n        // check if project exists\n        const projects = timing.projects.whose({ name: argv[0] });\n        if (!projects.length) {\n            console.log(\"Project does not exist\");\n            throw new Error();\n        } else {\n            // if there's more than one project with the same name, choose the first one in the list\n            project = projects[0];\n        }\n    }\n    const withTitle = argv[1];\n    const forAbout = Number(argv[2]) * 60;\n    if (isNaN(forAbout)) {\n        console.log(\"Please enter a valid duration\");\n        throw new Error();\n    }\n\n    // JXA will complain if a key is present but undefined, so we have to add them like this\n    const options = {};\n    if (project) {\n        options.project = project;\n    }\n    if (withTitle) {\n        options.withTitle = withTitle;\n    }\n    if (forAbout) {\n        options.forAbout = forAbout;\n    }\n\n    timing.startTimer(options);\n}\n"
  },
  {
    "path": "commands/apps/timing/timing-stop-timer.js",
    "content": "#!/usr/bin/osascript -l JavaScript\n\n// Note: Timing.app is required with an Expert or Connect subscription\n// Learn more and install: https://timingapp.com\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Stop Timer\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon images/timing-logo.png\n// @raycast.packageName Timing\n\n// Documentation:\n// @raycast.description Stop the active timer\n// @raycast.author Landen Danyluk\n// @raycast.authorURL https://github.com/landendanyluk\n\nfunction run() {\n    const timing = Application('TimingHelper');\n\n    // throw if AppleScript support is not enabled\n    if (!timing.scriptingSupportAvailable()) {\n        console.log('Scripting support requires an Expert or Connect subscription');\n        throw new Error();\n    }\n\n    timing.stopCurrentTimer({ notification: true });\n}\n"
  },
  {
    "path": "commands/apps/todoist/create-task.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Task\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/todoist-logo.png\n# @raycast.packageName Todoist\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Call Mom Tomorrow at 5\" }\n\n# Documentation: \n# @raycast.description Create Task\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n\n# Get your API Token from: https://todoist.com/prefs/integrations\n\nAPI_TOKEN=\"APITOKENHERE\"\n\nif [ -z \"$API_TOKEN\" ]; then\n\techo \"Todoist API token is missing.\";\n\texit 1;\nfi\n\nTASK=\"$1\"\n\nif [[ $TASK != \"\" ]]; then\n    curl \"https://api.todoist.com/rest/v2/tasks\" \\\n    \t-X POST \\\n    \t--data '{\"content\": \"'\"$TASK\"'\"}' \\\n    \t-H \"Content-Type: application/json\" \\\n    \t-H \"Authorization: Bearer $API_TOKEN\"\n\n\techo \"Task Created\" # These tasks will show up in your inbox\nelse\n\techo \"Please specify a task\"\nfi\n"
  },
  {
    "path": "commands/apps/todoist/get-tasks.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n# @raycast.schemaVersion 1\n# @raycast.title Get Tasks\n# @raycast.mode fullOutput\n# @raycast.packageName Todoist\n# @raycast.description Gets All Todoist tasks\n# @raycast.needsConfirmation false\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via Homebrew: `brew install jq`\n\n\n\n# Optional parameters:\n# @raycast.icon images/todoist-logo.png\n\n# Get your API Token from: https://todoist.com/prefs/integrations\n\nAPI_TOKEN=\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is required (https://stedolan.github.io/jq/).\";\n\texit 1;\nfi\n\nif [ -z \"$API_TOKEN\" ]; then\n\techo \"Todoist API token is missing.\";\n\texit 1;\nfi\n\nTASKS=$(curl -s -X GET \\\n  https://api.todoist.com/rest/v1/tasks \\\n  -H \"Authorization: Bearer $API_TOKEN\")\n\necho \"$TASKS\" | jq '.[] | .content'\necho\necho \"You have $(echo \"$TASKS\" | jq 'length') tasks\"\n"
  },
  {
    "path": "commands/apps/translate-shell/translate-shell-language-pair.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: UTF-8 -*-\n\n# Dependency: Requires translate-shell (https://www.soimort.org/translate-shell)\n# Install with Homebrew: `brew install translate-shell`\n# or install with MacPorts: `sudo port install translate-shell`\n\n# Set required paths to binaries required for translate-shell.\nGAWK='/usr/local/bin/gawk'\nTRANS='/usr/local/bin/trans'\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Translate Shell\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Query\"}\n# @raycast.argument2 {\"type\": \"text\", \"placeholder\": \"from\", \"optional\": true }\n# @raycast.argument3 {\"type\": \"text\", \"placeholder\": \"to\", \"optional\": true}\n# @raycast.icon 🌍\n\n# Documentation:\n# @raycast.author Marcel Bochtler\n# @raycast.authorURL https://github.com/MarcelBochtler\n# @raycast.description Translate text using translate-shell.\n\n# Set the default language pair.\n# Allows to set a default language-pair that can be used to translate in both \n# directions without setting the 'from' and 'to' languages.\nFROM_LANG_DEFAULT = 'de'\nTO_LANG_DEFAULT = 'en'\n\nimport json, os, sys, subprocess\n\nfrom_language = FROM_LANG_DEFAULT\nif sys.argv[2]:\n    from_language = sys.argv[2]\n\nto_language = TO_LANG_DEFAULT\nif sys.argv[3]:\n    to_language = sys.argv[3]\n\ncolors = {\n  'green': '\\033[92m',\n  'yellow': '\\033[93m',\n  'red': '\\033[91m',\n  'grey': '\\033[90m',\n  'white': '\\033[97m',\n  'end': '\\033[0m',\n}\n\ndef green(message):\n    return f\"{colors['green']}{message}{colors['end']}\"\n\ndef yellow(message):\n    return f\"{colors['yellow']}{message}{colors['end']}\"\n\ndef red(message):\n    return f\"{colors['red']}{message}{colors['end']}\"\n\ndef grey(message):\n    return f\"{colors['grey']}{message}{colors['end']}\"\n\ndef white(message):\n    return f\"{colors['white']}{message}{colors['end']}\"\n\ndef translate(lang, query):\n    cmd = f\"\"\"\n    # Ensure gawk is available in PATH, as translate-shell requires it.\n    PATH=\"$(dirname {GAWK}):$PATH\"\n    {TRANS} '{lang}' -dump '{query}' | /usr/bin/tail -n +2  | /usr/bin/head -n 1\n    \"\"\"\n\n    stream = os.popen(cmd)\n    rawJson = stream.read()\n\n    parsedJson = json.loads(rawJson)\n    translations = parsedJson[1]\n    if translations is not None:\n       translation = parsedJson[0][0][0]\n       subprocess.run(\"pbcopy\", universal_newlines=True, input=translation)\n\n    return translations\n\n\ndef print_translations(translations):\n    # TODO: Limit the number of translations so no scrolling in the results is required.\n    if translations is None:\n        print(yellow('No translations found.'))\n    else:\n        for i, translation in enumerate(translations):\n            wordType = translation[0]\n            print(grey(wordType))\n\n            translationWithBackTranslation = translation[2]\n            for j, t in enumerate(translationWithBackTranslation):\n                translatedWord = t[0]\n                backTranslations = t[1]\n                if i == 0 and j == 0:\n                    print(f'  {yellow(translatedWord)} 📋')\n                else:\n                    print(f'  {green(translatedWord)}')\n\n                print(white('    ' + ', '.join(backTranslations) + '\\n'))\n\n\nquery = sys.argv[1]\ntranslations = translate(f'{from_language}:{to_language}', query)\n\nif translations is None:\n    translations = translate(f'{to_language}:{from_language}', query)\n    # TODO: If second attempt failed, use result from first attempt and offer\n    #  a \"Did you mean ...\" functionality.\n    print_translations(translations)\nelse:\n    print_translations(translations)\n"
  },
  {
    "path": "commands/apps/translate-shell/translate-to-en.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires translate-shell\n# Install with Homebrew: `brew install translate-shell`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Translate to EN\n# @raycast.mode fullOutput\n# @raycast.packageName Translate Shell\n\n# Optional parameters:\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Word or Sentence\"}\n# @raycast.icon 📖\n\n# Documentation:\n# @raycast.author tiancheng92\n# @raycast.authorURL https://github.com/tiancheng92\n# @raycast.description Translate and copy brief translation to clipboard.\n\nif ! command -v trans &> /dev/null; then\n\techo \"trans command is required (https://github.com/soimort/translate-shell).\";\n\texit 1;\nfi\n\ntrans :en \"$1\" # display\ntrans :en \"$1\" -b | pbcopy # copy brief to clipboard"
  },
  {
    "path": "commands/apps/translate-shell/translate-to-zh.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires translate-shell\n# Install with Homebrew: `brew install translate-shell`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Translate to ZH\n# @raycast.mode fullOutput\n# @raycast.packageName Translate Shell\n\n# Optional parameters:\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Word or Sentence\"}\n# @raycast.icon 📖\n\n# Documentation:\n# @raycast.author tiancheng92\n# @raycast.authorURL https://github.com/tiancheng92\n# @raycast.description Translate and copy brief translation to clipboard.\n\nif ! command -v trans &> /dev/null; then\n\techo \"trans command is required (https://github.com/soimort/translate-shell).\";\n\texit 1;\nfi\n\ntrans :zh \"$1\" # display\ntrans :zh \"$1\" -b | pbcopy # copy brief to clipboard\n"
  },
  {
    "path": "commands/apps/trello/create-trello-card.template.py",
    "content": "#!/usr/bin/env python3\n\n# Dependency: This script requires the following Python libraries: `dateparser`, `requests`\n# Install them with `pip install dateparser requests`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Card\n# @raycast.packageName Trello\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Card title\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Due date (e.g. today)\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Create a new Trello card\n# @raycast.author Michael Francis\n# @raycast.authorURL https://github.com/mikefrancis\n\nimport sys\nimport requests\nimport dateparser\n\n# To generate an API key/token, head to https://trello.com/app-key\nTRELLO_KEY = ''\nTRELLO_TOKEN = ''\n# To find the Board ID, head to https://api.trello.com/1/members/me/boards?key={TRELLO_KEY}&token={TRELLO_TOKEN}\n# To find the List ID, head to https://api.trello.com/1/boards/{BOARD_ID}/lists?key={TRELLO_KEY}&token={TRELLO_TOKEN}\nTRELLO_LIST_ID = ''\n\nif not TRELLO_KEY:\n  print('Command not configured correctly. Missing variable: TRELLO_KEY')\n  exit(1)\n\nif not TRELLO_TOKEN:\n  print('Command not configured correctly. Missing variable: TRELLO_TOKEN')\n  exit(1)\n\nif not TRELLO_LIST_ID:\n  print('Command not configured correctly. Missing variable: TRELLO_LIST_ID')\n  exit(1)\n\nname = sys.argv[1]\ndue_date = sys.argv[2]\n\npayload = {\n  'key': TRELLO_KEY,\n  'token': TRELLO_TOKEN,\n  'idList': TRELLO_LIST_ID,\n  'name': name,\n  'pos': 'top',\n}\n\nif due_date:\n  try:\n    datetime = dateparser.parse(due_date)\n    payload['due'] = datetime.strftime('%Y-%m-%d')\n  except:\n    pass\n\nresponse = requests.post('https://api.trello.com/1/cards', data=payload)\n\nif not response.ok :\n  print(response.reason)\n  exit(1)\n"
  },
  {
    "path": "commands/apps/tunnelblick/tunnelblick-connect-all.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Tunnelblick: Connect All\n# @raycast.mode silent\n# @raycast.packageName TunnelBlick\n#\n# Optional parameters:\n# @raycast.icon images/tunnelblick.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Connect all unconnected VPN configurations.\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\non run argv\n    tell application \"Tunnelblick\" to connect all\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/tunnelblick/tunnelblick-connect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Tunnelblick: Connect\n# @raycast.mode silent\n# @raycast.packageName Tunnelblick\n#\n# Optional parameters:\n# @raycast.icon images/tunnelblick.png\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Configuration\" }\n#\n# Documentation:\n# @raycast.description Connect a VPN configuration.\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\non run argv\n    tell application \"Tunnelblick\" to connect (item 1 of argv)\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/tunnelblick/tunnelblick-disconnect-all.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Tunnelblick: Disconnect All\n# @raycast.mode silent\n# @raycast.packageName Tunnelblick\n#\n# Optional parameters:\n# @raycast.icon images/tunnelblick.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Disconnect all connected VPN configurations.\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\non run argv\n    tell application \"Tunnelblick\" to disconnect all\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/tunnelblick/tunnelblick-disconnect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Tunnelblick: Disconnect\n# @raycast.mode silent\n# @raycast.packageName Tunnelblick\n#\n# Optional parameters:\n# @raycast.icon images/tunnelblick.png\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Configuration\" }\n#\n# Documentation:\n# @raycast.description Disconnect a VPN configuration.\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\non run argv\n    tell application \"Tunnelblick\" to disconnect (item 1 of argv)\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/viscosity/viscosity-connect-all.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Viscosity: Connect All\n# @raycast.mode silent\n# @raycast.packageName Viscosity\n#\n# Optional parameters:\n# @raycast.icon images/viscosity.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Connect all unconnected VPN configurations.\n# @raycast.author Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)\n# @raycast.authorURL https://github.com/lcardito\n\non run argv\n    tell application \"Viscosity\" to connectall\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/viscosity/viscosity-connect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Viscosity: Connect\n# @raycast.mode silent\n# @raycast.packageName Viscosity\n#\n# Optional parameters:\n# @raycast.icon images/viscosity.png\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Configuration\" }\n#\n# Documentation:\n# @raycast.description Connect a VPN viscosity configuration.\n# @raycast.author Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)\n# @raycast.authorURL https://github.com/lcardito\n\non run argv\n    tell application \"Viscosity\" to connect (item 1 of argv)\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/viscosity/viscosity-disconnect-all.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Viscosity: Disconnect All\n# @raycast.mode silent\n# @raycast.packageName Viscosity\n#\n# Optional parameters:\n# @raycast.icon images/viscosity.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Disconnect all connected VPN configurations.\n# @raycast.author Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)\n# @raycast.authorURL https://github.com/lcardito\n\non run argv\n    tell application \"Viscosity\" to disconnectall\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/viscosity/viscosity-disconnect.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Viscosity: Disconnect\n# @raycast.mode silent\n# @raycast.packageName Viscosity\n#\n# Optional parameters:\n# @raycast.icon images/viscosity.png\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Configuration\" }\n#\n# Documentation:\n# @raycast.description Disconnect a VPN configuration.\n# @raycast.author Luigi Cardito (credits Achille Lacoin https://github.com/pomdtr)\n# @raycast.authorURL https://github.com/lcardito\n\non run argv\n    tell application \"Viscosity\" to disconnect (item 1 of argv)\n    return # Discard Output\nend run\n"
  },
  {
    "path": "commands/apps/warp/warp-reauth.sh",
    "content": "#!/bin/bash\n\n# Dependency: Cloudflare WARP https://developers.cloudflare.com/warp-client/setting-up/macOS\n# Note: Cloudflare WARP must be installed, but CLI works properly only if GUI-client is not running\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Reauthenticate\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/warp.png\n\n# @Documentation:\n# @raycast.packageName WARP\n# @raycast.description Force WARP reauthentication\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://github.com/danirukun\n\n\nif ! command -v warp-cli &> /dev/null; then\n  echo \"WARP is required (https://developers.cloudflare.com/warp-client/setting-up/macOS)\";\n  exit 1;\nfi\n\nwarp-cli access-reauth\necho \"Opening WARP authentication page\"\n"
  },
  {
    "path": "commands/apps/warp/warp-start.sh",
    "content": "#!/bin/bash\n\n# Dependency: Cloudflare WARP https://developers.cloudflare.com/warp-client/setting-up/macOS\n# Note: Cloudflare WARP must be installed, but CLI works properly only if GUI-client is not running\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/warp.png\n\n# @Documentation:\n# @raycast.packageName WARP\n# @raycast.description Create a connection to WARP\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\nif ! command -v warp-cli &> /dev/null; then\n  echo \"WARP is required (https://developers.cloudflare.com/warp-client/setting-up/macOS)\";\n  exit 1;\nfi\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    warp-cli status | grep Status | grep -qv Connected\n}\n\nfunction poll_until_connected () {\n    (( loops=0 ))\n    (( max_loops=200 )) # 200 * 0.1 is 20 seconds. Bash doesn't support floats\n\n    while isnt_connected; do\n        sleep 0.1 # can't use a variable here, bash doesn't have floats\n        (( loops=loops+1 ))\n        [ \"$loops\" -gt \"$max_loops\" ] && break\n    done\n\n    [ \"$loops\" -le \"$max_loops\" ]\n}\n\nif isnt_connected; then\n    warp-cli connect\n    if poll_until_connected; then\n        echo \"Connected to WARP\"\n    else\n        echo \"Couldn't connect to WARP\"\n        warp-cli disconnect\n        exit 1\n    fi\nelse\n    echo \"Already connected to WARP\"\n    exit 1\nfi\n\n\n"
  },
  {
    "path": "commands/apps/warp/warp-status.sh",
    "content": "#!/bin/bash\n\n# Dependency: Cloudflare WARP https://developers.cloudflare.com/warp-client/setting-up/macOS\n# Note: Cloudflare WARP must be installed, but CLI works properly only if GUI-client is not running\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title WARP Status\n# @raycast.mode inline\n# @raycast.refreshTime 30s\n\n# Optional parameters:\n# @raycast.icon images/warp.png\n\n# @Documentation:\n# @raycast.packageName WARP\n# @raycast.description Check WARP connection\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\nif ! command -v warp-cli &> /dev/null; then\n  echo \"WARP is required (https://developers.cloudflare.com/warp-client/setting-up/macOS)\";\n  exit 1;\nfi\n\nstatus=$(warp-cli status | grep Status | awk 'NF>1{print $NF}')\n\nif [ \"$status\" == \"Connected\" ] || [ \"$status\" == \"Disconnected\" ]; then\n  echo \"$status\"\n  exit 0\nfi\n\necho \"🚨 Can't check status\"\nexit 1\n"
  },
  {
    "path": "commands/apps/warp/warp-stop.sh",
    "content": "#!/bin/bash\n\n# Dependency: Cloudflare WARP https://developers.cloudflare.com/warp-client/setting-up/macOS\n# Note: Cloudflare WARP must be installed, but CLI works properly only if GUI-client is not running\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/warp.png\n\n# @Documentation:\n# @raycast.packageName WARP\n# @raycast.description Disconnect from WARP\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\n\nif ! command -v warp-cli &> /dev/null; then\n  echo \"WARP is required (https://developers.cloudflare.com/warp-client/setting-up/macOS)\";\n  exit 1;\nfi\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    warp-cli status | grep Status | grep -qv Connected\n}\n\n\nif isnt_connected; then\n    echo \"WARP is not connected\"\n    exit 1\nelse\n    warp-cli disconnect\n    echo \"Disconnected from WARP\"\nfi\n"
  },
  {
    "path": "commands/apps/warp/warp-toggle.sh",
    "content": "#!/bin/bash\n\n# Dependency: Cloudflare WARP https://developers.cloudflare.com/warp-client/setting-up/macOS\n# Note: Cloudflare WARP must be installed, but CLI works properly only if GUI-client is not running\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle WARP\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/warp.png\n\n# @Documentation:\n# @raycast.packageName WARP\n# @raycast.description Toggle Connection\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\n\nif ! command -v warp-cli &> /dev/null; then\n  echo \"WARP is required (https://developers.cloudflare.com/warp-client/setting-up/macOS)\";\n  exit 1;\nfi\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    warp-cli status | grep Status | grep -qv Connected\n}\n\nfunction poll_until_connected () {\n    (( loops=0 ))\n    (( max_loops=200 )) # 200 * 0.1 is 20 seconds. Bash doesn't support floats\n\n    while isnt_connected; do\n        sleep 0.1 # can't use a variable here, bash doesn't have floats\n        (( loops=loops+1 ))\n        [ \"$loops\" -gt \"$max_loops\" ] && break\n    done\n\n    [ \"$loops\" -le \"$max_loops\" ]\n}\n\nif isnt_connected; then\n    warp-cli connect\n    if poll_until_connected; then\n        echo \"Connected to WARP\"\n    else\n        echo \"Couldn't connect to WARP\"\n        warp-cli disconnect\n        exit 1\n    fi\nelse\n    warp-cli disconnect\n    echo \"Disconnected from WARP\"\nfi\n"
  },
  {
    "path": "commands/apps/webstorm/open-workspace.template.sh",
    "content": "#!/bin/bash\n\n# Note: WebStorm required\n# Install via via JetBrains Toolbox https://www.jetbrains.com/toolbox-app/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open\n# @raycast.mode compact\n#\n# Optional parameters:\n# @raycast.icon images/webstorm.png\n# @raycast.packageName WebStorm\n#\n# Arguments\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Workspace\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Close Others? [yes/no]\", \"optional\": true }\n#\n# Documentation:\n# @raycast.description Open WebStorm projects\n# @raycast.author Daniel Stovv\n# @raycast.authorURL https://github.com/stovv\n#\n# Configuration\n# 1. Please make sure for WebStorm installed and WebStorm CLI available in $PATH\n#    https://www.jetbrains.com/help/webstorm/working-with-the-ide-features-from-command-line.html#standalone\n# 2. Configure always open projects in new window Preferences -> Appearance & Behavior -> System Settings -> Project -> Open project in [ Select: New Window ]\n# 3. Add more workspaces by example\n\nif ! command -v webstorm &> /dev/null; then\n      echo \"WebStorm CLI is required (https://www.jetbrains.com/help/webstorm/working-with-the-ide-features-from-command-line.html#standalone).\";\n      exit 1;\nfi\n\n# Main program\n\n# Arguments\nWORKSPACE=$1\nCLOSE_OTHER=$2\n\nPROCESS=$(pgrep -f webstorm)\nif [ \"${CLOSE_OTHER}\" = \"yes\" ] && [ \"${PROCESS}\" != \"\" ] ;then\n  echo \"Kill WebStorm...\"\n  kill -9 \"${PROCESS}\"\nfi\n\n# Example:\nif [[ \"${WORKSPACE}\" = \"workspace_name\" ]];then\n  # TODO: change paths to projects\n  webstorm nosplash ~/Project/someProject ~/Project/someOtherProject\n  echo \"Workspace ${WORKSPACE} opened!\"\n  exit 0\nfi\n\nwebstorm nosplash dontReopenProjects\necho \"WebStorm projects dialog opened!\""
  },
  {
    "path": "commands/apps/wikipedia/wikipedia-search.py",
    "content": "#!/usr/bin/env python3\n\n# Dependencies:\n# Wikipedia: https://github.com/goldsmith/Wikipedia\n\n# Recommended installation:\n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install wikipedia\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Wikipedia Search\n# @raycast.mode fullOutput\n# @raycast.packageName Wikipedia\n\n# Optional parameters:\n# @raycast.icon images/wikipedia.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search Term\" }\n\n# Documentation:\n# @raycast.description Search Wikipedia and display the result in Raycast\n# @raycast.author Juan I. Serra\n# @raycast.authorURL https://twitter.com/jiserra\n\n# Define some colors to work with\ncolors = {\n  'green': '\\033[92m',\n  'yellow': '\\033[93m',\n  'red': '\\033[91m',\n  'grey': '\\033[90m',\n  'white': '\\033[97m',\n  'end': '\\033[0m',\n}\ndef green(message):\n    return f\"{colors['green']}{message}{colors['end']}\"\n\ndef yellow(message):\n    return f\"{colors['yellow']}{message}{colors['end']}\"\n\ndef red(message):\n    return f\"{colors['red']}{message}{colors['end']}\"\n\ndef grey(message):\n    return f\"{colors['grey']}{message}{colors['end']}\"\n\ndef white(message):\n    return f\"{colors['white']}{message}{colors['end']}\"\n\n# Import Wikipedia module\ntry:\n  import wikipedia\nexcept ImportError:\n  print(red(f\"Wikipedia module not installed, run `pip install wikipedia`\"))\n  exit(1)\n\n# This is to disable the wikipedia module warning about the parser in BeautifulSoup\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\n# Define the argument\nimport sys\nsearch = sys.argv[1]\n\n# Catch the exception when there's more than one definition\ntry:\n    wikisearch = wikipedia.page(search)\nexcept wikipedia.exceptions.DisambiguationError as e:\n    print(red('Which one do you mean?\\n'))\n    print(e)\nexcept wikipedia.exceptions.PageError:\n    print(red(f\"Sorry, there's not a Wikipedia page on {yellow(search.title())}\"))\nelse:\n    print(yellow(wikisearch.title))\n    print(wikisearch.summary)\n"
  },
  {
    "path": "commands/apps/y-pomodoro/pause.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `y-pomodoro` downloaded: https://github.com/jesse-c/y-pomodoro\n# Run via: `cargo run`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause\n# @raycast.packageName y-pomodoro\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.description Pause active pomodoro timer using  [y-pomodoro](https://github.com/jesse-c/y-pomodoro)\n\n# Documentation:\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\n\nprintf \"pause\" | nc -U /tmp/pomodoro.sock\n"
  },
  {
    "path": "commands/apps/y-pomodoro/resume.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `y-pomodoro` downloaded: https://github.com/jesse-c/y-pomodoro\n# Run via: `cargo run`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Resume\n# @raycast.packageName y-pomodoro\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.description Resume active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro)\n\n# Documentation:\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nprintf \"resume\" | nc -U /tmp/pomodoro.sock\n"
  },
  {
    "path": "commands/apps/y-pomodoro/show.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `y-pomodoro` downloaded: https://github.com/jesse-c/y-pomodoro\n# Run via: `cargo run`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show\n# @raycast.packageName y-pomodoro\n# @raycast.mode inline\n# @raycast.refreshTime 15s\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.description Show active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro)\n\n# Documentation:\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nprintf \"show\" | nc -U /tmp/pomodoro.sock\n"
  },
  {
    "path": "commands/apps/y-pomodoro/start.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `y-pomodoro` downloaded: https://github.com/jesse-c/y-pomodoro\n# Run via: `cargo run`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start\n# @raycast.packageName y-pomodoro\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.description Start a pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro)\n\n# Documentation:\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nprintf \"start\" | nc -U /tmp/pomodoro.sock\n"
  },
  {
    "path": "commands/apps/y-pomodoro/stop.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `y-pomodoro` downloaded: https://github.com/jesse-c/y-pomodoro\n# Run via: `cargo run`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop\n# @raycast.packageName y-pomodoro\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.description Stop active pomodoro timer using [y-pomodoro](https://github.com/jesse-c/y-pomodoro)\n\n# Documentation:\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nprintf \"stop\" | nc -U /tmp/pomodoro.sock\n"
  },
  {
    "path": "commands/browsing/Youtube Shorts in video player.sh",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Youtube Shorts in video player\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📹\n\n# Documentation:\n# @raycast.description Opens current Youtube Shorts video in the normal video player by replacing \"/shorts/\" with \"/v/\" in the url.\n# @raycast.author Kailash Yellareddy\n# @raycast.authorURL https://github.com/kyellareddy\n\n# -------------------------------------------------------------------\n# |  # This script currently supports Safari and Google Chrome.      |\n# |  # Replace \"Safari\" in line 21 with either \"Safari\" or \"Chrome\"  |\n# -------------------------------------------------------------------\n\nset browser to \"Safari\"\n\n\nif browser=\"Safari\"\n    tell application \"Safari\"\n        tell front window\n            if its document exists then\n\t\t\t     set CurrentUrl to URL of current tab\n\t\t    end if\n        end tell\n    end tell\n\n    set inputText to CurrentUrl\n    set findText to \"shorts\"\n    set replaceText to \"v\"\n\n    set newText to do shell script \"sed 's|\" & quoted form of findText & \"|\" & quoted form of replaceText & \"|g' <<< \" & quoted form of inputText\n\n    tell application \"Safari\"\n        tell window 1\n            tell current tab\n                set URL to {newText}\n            end tell\n        end tell\n    end tell\nend if\n\nif browser=\"Chrome\"\n    tell application \"Google Chrome\"\n    set frontIndex to active tab index of front window\n    get URL of tab frontIndex of front window\n        set CurrentUrl to URL of tab frontIndex of front window\n    end tell\n\n    set inputText to CurrentUrl\n    set findText to \"shorts\"\n    set replaceText to \"v\"\n\n     set newText to do shell script \"sed 's|\" & quoted form of findText & \"|\" & quoted form of replaceText & \"|g' <<< \" & quoted form of inputText\n\n     tell application \"Google Chrome\"\n        set URL of active tab of window 1 to {newText}\n    end tell\nend if\n"
  },
  {
    "path": "commands/browsing/chrome-current-page-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Current Page URL\n# @raycast.mode silent\n# @raycast.packageName Google Chrome\n#\n# Optional parameters:\n# @raycast.icon 🧭\n#\n# Documentation:\n# @raycast.description This script copies URL of currently opened page in Google Chrome into clipboard.\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\nosascript -e 'tell application \"Google Chrome\" to get URL of active tab of first window' | pbcopy\necho \"Copied\"\n"
  },
  {
    "path": "commands/browsing/convert-twitter-to-nitter.js",
    "content": "#!/usr/bin/env node\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Convert Twitter to Nitter\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 🐔\n\n// Documentation:\n// @raycast.description Convert Twitter link to Nitter\n// @raycast.author cSharp\n// @raycast.authorURL https://github.com/noidwasavailable\n\n// Example Twitter link: https://twitter.com/Cron/status/1644010827647975425\nconst child_process = require('child_process');\nlet link = child_process.execSync(\"pbpaste\").toString();\n\nif (!link) {\n  console.error('No link provided');\n  return;\n}\n\ntry {\n  link = link.replace('twitter.com', 'nitter.net');\n  console.log(`Opening ${link}`);\n  child_process.execSync(`open \"${link}\"`);\n  return;\n} catch (error) {\n  console.error('Invalid link provided');\n  return;\n}\n"
  },
  {
    "path": "commands/browsing/git-io.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Shorten URL from GitHub\n# @raycast.mode silent\n# @raycast.packageName Browsing\n\n# Optional parameters:\n# @raycast.icon images/git-io.png\n\n# Documentation:\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n# @raycast.description Shorten any github.com URL\n\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]?(github)\\.(com|io)'\ngetLink=$(pbpaste)\n\nif [[ $getLink =~ $regex ]]\nthen\n\tresult=$(curl -i https://git.io -F \"url=$getLink\" | grep Location)\n\tlocation=\"Location: \"\n\tresultCleanup=${result//$location/}\n\n\tif [[ $result != \"Error\" ]]\n\tthen\n\t\techo $resultCleanup | pbcopy\n\t\techo \"Copied URL: $resultCleanup\"\n\telse\n\t\techo \"URL cannot be shortened\"\n\t\texit 1\n\tfi\nelse\n\techo \"String in clipboard is not a valid URL\"\n\texit 1\nfi\n"
  },
  {
    "path": "commands/browsing/go-to-outine.sh",
    "content": "#!/bin/bash\n\n# @raycast.author Ronan Rodrigo Nunes\n# @raycast.authorURL https://ronanrodrigo.dev\n# @raycast.packageName Browsing\n# @raycast.schemaVersion 1\n# @raycast.title Go to Outline\n# @raycast.description Open the website at Outline\n# @raycast.mode compact\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n# @raycast.icon images/outline.png\n\naddress=$1\n\nif ! command -v jq &> /dev/null; then\n    echo \"Please, install jq: brew install jq\"\n    exit 1\nfi\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\nif ! [[ $address =~ $regex ]] ; then\n  echo \"Invalid URL\"\n  exit 1\nfi\n\nfunction outline_request() {\n    curl -s \"https://api.outline.com/v3/parse_article?source_url=${address}\"\\\n         -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:84.0) Gecko/20100101 Firefox/84.0'\\\n         -H 'Accept: */*'\\\n         -H 'Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3' --compressed\\\n         -H 'Origin: https://outline.com'\\\n         -H 'DNT: 1' -H 'Connection: keep-alive'\\\n         -H 'Referer: https://outline.com/'\\\n         -H 'Sec-GPC: 1'\n}\nshort_code=$(outline_request | jq -r '.data.short_code')\nopen \"https://outline.com/${short_code}\"\n"
  },
  {
    "path": "commands/browsing/new-browser-window.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title New Browser Window\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🌐\n# @raycast.packageName Browser Utils\n\n# Documentation:\n# @raycast.description Open new window in default browser\n# @raycast.author Levi Nelson\n# @raycast.authorURL https://github.com/LeviticusNelson\n\n# https://stackoverflow.com/a/66026925/13949806\ndefaultBrowser=$(plutil -p ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist | grep 'https' -b3 |awk 'NR==3 {split($4, arr, \"\\\"\"); print arr[2]}')\nopen --new -b \"$defaultBrowser\"\n"
  },
  {
    "path": "commands/browsing/open-chrome-without-cors.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open without CORS\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/chrome-icon.png\n# @raycast.packageName Chrome\n# @raycast.needsConfirmation false\n\n# Documentation:\n# @raycast.description Open chrome with web security option disabled.\n# @raycast.author Tahsin Yazkan\n# @raycast.authorURL https://github.com/thsnyzkn\n\nopen -n -a /Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --args --user-data-dir=\"/tmp/chrome_dev_test\" --disable-web-security\n\n"
  },
  {
    "path": "commands/browsing/open-in-guest-profile.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open in guest profile\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.packageName Browser\n\n# Documentation:\n# @raycast.description Open current website in guest profile/mode\n# @raycast.author JD Solanki\n# @raycast.authorURL https://github.com/jd-solanki\n\n############################################\n## Set your browser app                   ##\n## \"Google Chrome\"                        ##\n## \"Brave Browser\"                        ##\n############################################\n\nbrowser=\"Google Chrome\"\n\nURL=$(osascript -e \"tell application \\\"$browser\\\" to get URL of active tab of first window\")\n\nopen -a \"$browser\" -n --args --guest --new-window \"$URL\"\n\n"
  },
  {
    "path": "commands/browsing/open-multiple-websites-on-safari.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Multiple Websites on Safari\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📚\n# @raycast.packageName Browsing\n\n# Documentation:\n# @raycast.description Open multiple websites on Safari using list of URLs\n# @raycast.author Yasutaka Nishii\n# @raycast.authorURL https://github.com/ystknsh\n\n# Set list of URLs\nurls=(\n    \"https://example.com\"\n    \"https://example.org\"\n    \"https://example.net\"\n    \"https://example.jp\"\n    \"https://example.io\"\n    \"https://example.ai\"\n)\n\n# Make AppleScript commands \napplescript_command=\"tell application \\\"Safari\\\"\n    make new document with properties {URL:\\\"${urls[0]}\\\"}\n    tell window 1\"\n\nfor ((i=1; i<${#urls[@]}; i++)); do\n    applescript_command+=\"\n        make new tab with properties {URL:\\\"${urls[$i]}\\\"}\"\ndone\n\napplescript_command+=\"\n    end tell\nend tell\"\n\n# Execute AppleScript\nosascript -e \"$applescript_command\"\n\n# Set Safari window to front（Optional）\nosascript <<EOD\ntell application \"System Events\"\n    tell process \"Safari\"\n        set frontmost to true\n        tell window 1\n            set value of attribute \"AXMain\" to true\n            set value of attribute \"AXFocused\" to true\n        end tell\n    end tell\nend tell\nEOD"
  },
  {
    "path": "commands/browsing/peekalink.template.sh",
    "content": "#!/bin/bash\n\n############################################\n## Set API key.                           ##\n## https://www.peekalink.io/auth/register ##\n############################################\n\napi_key=\n\n# @raycast.title Peek a link\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Use [Peekalink.io](https://peekalink.io) API to peek specified URL.\n\n# @raycast.icon images/peekalink-logo.png\n# @raycast.mode fullOutput\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif [ -z ${api_key+x} ]; then\n\techo \"API key is missing.\";\n\texit 1;\nfi\n\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\n\nif [[ $1 =~ $regex ]]; then \n\tcurl -s 'https://api.peekalink.io' -H \"X-API-Key: ${api_key}\" -H \"Content-Type: application/json\" -d '{ \"link\": \"'\"${1}\"'\" }' | python -m json.tool\n\texit 0;\nfi\n\necho \"Input is not a valid URL.\""
  },
  {
    "path": "commands/browsing/safari-current-page-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Current Page URL\n# @raycast.mode silent\n# @raycast.packageName Safari\n#\n# Optional parameters:\n# @raycast.icon 🧭\n#\n# Documentation:\n# @raycast.description This script copies URL of currently opened page in Safari into clipboard.\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\nosascript -e 'tell application \"Safari\" to return URL of front document' | tr -d '[:space:]' | pbcopy\necho \"Copied URL\"\n"
  },
  {
    "path": "commands/browsing/safari-current-window-urls.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Current Window URLs\n# @raycast.mode silent\n# @raycast.packageName Safari\n#\n# Optional parameters:\n# @raycast.icon 🧭\n#\n# Documentation:\n# @raycast.description This script copies to clipboard all URLs from frontmost Safari window.\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\ntell application \"Safari\"\n    tell front window\n        if its document exists then\n            set AppleScript's text item delimiters to linefeed\n            set urlList to URL of its tabs\n            set the clipboard to (urlList as text)\n            log \"Copied\"\n        end if\n    end tell\nend tell\n"
  },
  {
    "path": "commands/browsing/shlink-create-short-url.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Short URL\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/shlink.png\n# @raycast.packageName Shlink\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"URL\", \"optional\": true, \"percentEncoded\": false }\n\n# Documentation:\n# @raycast.author Eliot Hertenstein\n# @raycast.description Create a short URL using Shlink\n# @raycast.authorURL https://github.com/eIiot\n\n## * CONFIGURE - REPLACE THESE VALUES * ##\nBASEURL=\"<-- BASE URL -->\" # Base URL for the short url. Remove any trailing slash or http(s)://\nPROTOCOL=\"https://$BASEURL\" # Use http or https\nAPIKEY=\"<-- API KEY -->\" # API key for the short url. See https://shlink.io/documentation/api-docs/authentication/\nTAG=\"raycast\" # Tag for the short url. Set to \"\" to disable\n## * END CONFIG * ##\n\nif ! command -v jq &> /dev/null; then\n      echo \"jq is required (https://stedolan.github.io/jq/).\";\n      exit 1;\nfi\n\nif [ -z \"$1\" ]; then\n    URL=$(pbpaste)\nelse\n    URL=$1\nfi\n\nif [[ $URL =~ ^https?://[a-zA-Z0-9./?=_-]*$ ]]; then\n    SHORT_URL=$(curl --location --silent --request POST ''\"$PROTOCOL\"'/rest/v1/short-urls' \\\n    --header 'Content-Type: application/json' \\\n    --header 'X-Api-Key: '\"$APIKEY\"'' \\\n    --data-raw '{\n        \"longUrl\": \"'\"$URL\"'\",\n        \"validateUrl\": false,\n        \"tags\": [\n            \"'$TAG'\"\n        ],\n        \"findIfExists\": true,\n        \"domain\": \"'\"$BASEURL\"'\"\n    }' | jq -r '.shortUrl')\n\n    if [ -n \"$SHORT_URL\" ]; then\n        echo \"$SHORT_URL\" | pbcopy\n        echo \"Copied $SHORT_URL to your clipboard\"\n    else \n        echo \"Error: Could not create short URL\"\n        exit 1\n    fi\n\nelse\n    echo \"Invalid URL \\\"$URL\\\"\"\n    exit 1\nfi\n"
  },
  {
    "path": "commands/browsing/short-url-emoji.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Shorten URL with Emojis\n# @raycast.mode compact\n# @raycast.packageName Browsing\n\n# Optional parameters:\n# @raycast.icon 🔗\n\n# Documentation:\n# @raycast.author Samuel Henry\n# @raycast.authorURL https://bne.sh\n# @raycast.description Transform the clipboard contents to a short Emoji URL\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\npasteboardString=$(pbpaste)\n\nif [[ $pasteboardString =~ $regex ]]\nthen\n\tresult=$(curl \"https://bne.sh/api/shorten?url=$pasteboardString\")\n    echo $result | ruby -r json -e 'puts JSON.parse(STDIN.read)[\"url\"]' | pbcopy; echo -n `pbpaste`\nelse\n\techo \"String in clipboard is a not valid URL\"\n\texit 1\nfi\n"
  },
  {
    "path": "commands/browsing/shorten-url-bitly.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Shorten URL with Bitly\n# @raycast.mode compact\n# @raycast.packageName Browsing\n\n# Optional parameters:\n# @raycast.icon 🔗\n\n# Documentation:\n# @raycast.author Nitin Gupta\n# @raycast.authorURL https://twitter.com/gniting\n# @raycast.description Transform the clipboard contents to a short Bitly URL\n\n# generate an access token: https://support.bitly.com/hc/en-us/articles/230647907-How-do-I-generate-an-OAuth-access-token-for-the-Bitly-API-\naccessToken=\"put_in_your_access_token_here\"\nurlFromClipboard=`pbpaste`\nresult=`curl -s --request GET -G --data-urlencode \"longURL=$urlFromClipboard\" --data-urlencode \"access_token=$accessToken\" https://api-ssl.bitly.com/v3/shorten`\nstatusCode=`echo $result | ruby -r json -e 'puts JSON.parse(STDIN.read)[\"status_code\"]'`\nif [[ \"$statusCode\" == \"200\" ]]\nthen\n    echo $result | ruby -r json -e 'puts JSON.parse(STDIN.read)[\"data\"][\"url\"]' | pbcopy; echo -n `pbpaste`\nelse\n    echo $result | ruby -r json -e 'puts \"ERROR: \" + JSON.parse(STDIN.read)[\"status_txt\"]'\nfi\n"
  },
  {
    "path": "commands/browsing/shorten-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Shorten URL From Clipboard\n# @raycast.mode silent\n# @raycast.packageName Browsing\n\n# Optional parameters:\n# @raycast.icon 🔗\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Shorten the URL in your Clipboard with Tiny URL.\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\npasteboardString=$(pbpaste)\n\nif [[ $pasteboardString =~ $regex ]] \nthen \n\tresult=$(curl \"https://tinyurl.com/api-create.php?url=$pasteboardString\")\n\tif [[ $result != \"Error\" ]]\n\tthen\n\t\techo $result | pbcopy\n\t\techo \"Copied shortened URL\"\n\telse \n\t\techo \"URL cannot be shortened\"\n\t\texit 1\n\tfi\nelse\n\techo \"String in clipboard is a not valid URL\"\n\texit 1\nfi\n"
  },
  {
    "path": "commands/browsing/to-private-browsing.sh",
    "content": "#!/bin/bash\n\n############################################\n## Set your browser app                   ##\n## \"Google Chrome\"                        ##\n## \"Brave Browser\"                        ##\n############################################\n\nbrowser=\"Google Chrome\"\n\n# @raycast.title Current Website to Private Browser\n# @raycast.author raulanatol\n# @raycast.authorURL https://github.com/raulanatol\n# @raycast.description Open the current site in a private browser\n\n# @raycast.icon 🥽\n# @raycast.mode silent\n# @raycast.packageName Browser\n# @raycast.schemaVersion 1\n\nURL=$(osascript -e \"tell application \\\"$browser\\\" to get URL of active tab of first window\")\n\nopen -a \"$browser\" -n --args --incognito --new-window \"$URL\"\n\n"
  },
  {
    "path": "commands/browsing/website-screenshots.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires pageres (https://github.com/sindresorhus/pageres-cli)\n# Install via npm: `npm install --global pageres-cli`\n\n# Set viewport resolution of screenshots\nresolutions=\"1920x1080 390x844\"\n\n# @raycast.title Screenshot Website\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Takes screenshots of the entered URL using [`pageres`](https://github.com/sindresorhus/pageres) and saves it to the Desktop.\n\n# @raycast.currentDirectoryPath ~/Desktop\n# @raycast.icon 🖼️\n# @raycast.mode compact\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif ! command -v pageres &> /dev/null; then\n\techo \"pageres command is required (https://github.com/sindresorhus/pageres-cli).\";\n\texit 1;\nfi\n\nif [ -z ${resolutions+x} ]; then\n\techo \"Viewport resolutions are undefined.\";\n\texit 0\nfi\n\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\nurl=$1\n\nif [[ $url =~ $regex ]]; then \n\toutput=$(pageres --crop \"$url\" $resolutions)\n\techo \"Saved screenshot(s) to Desktop\"\nelse\n\techo \"Input is not a valid url\"\nfi"
  },
  {
    "path": "commands/communication/call-with-iphone.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Call with iPhone\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📱\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"+1 514 555 1212\" }\n# @raycast.packageName Communication\n\n# Documentation:\n# @raycast.description Place a telephone call via your iPhone on Wi-Fi.\n# @raycast.author Alexander JH Steffen\n# @raycast.authorURL https://github.com/alexjsteffen\n\nsleep 1\nopen \"tel://$1\"\n\n\n"
  },
  {
    "path": "commands/communication/cloudup/cloudup-paste.sh",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Paste\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Upload clipboard contents to [Cloudup](https://cloudup.com/).\n\n# @raycast.icon images/cloudup-logo.png\n# @raycast.mode silent\n# @raycast.packageName Cloudup\n# @raycast.schemaVersion 1\n\ntell application \"Cloudup\" to paste"
  },
  {
    "path": "commands/communication/cloudup/cloudup-pick.sh",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Pick\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open file dialog and upload to [Cloudup](https://cloudup.com/).\n\n# @raycast.icon images/cloudup-logo.png\n# @raycast.mode silent\n# @raycast.packageName Cloudup\n# @raycast.schemaVersion 1\n\ntell application \"Cloudup\" to pick"
  },
  {
    "path": "commands/communication/cloudup/cloudup-upload.sh",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Upload\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Upload path or URL in clipboard to [Cloudup](https://cloudup.com/).\n\n# @raycast.icon images/cloudup-logo.png\n# @raycast.mode silent\n# @raycast.packageName Cloudup\n# @raycast.schemaVersion 1\n\nset variable to (do shell script \"pbpaste\")\n\ntell application \"Cloudup\"\n\tupload variable\nend tell"
  },
  {
    "path": "commands/communication/duckduckgo-email-protection/README.md",
    "content": "\n# What is DuckDuckGo Email Protection?\nDuckDuckGo Email Protection is an email protection service (currently invite-only). After having been invited, DDG provides you with an intermediary e-mail address (you@duck.com). Any e-mail sent to this address will be stripped of its analytics components, before being forwarded to your actual e-mail address (you@you.com).\n\n![ddg-email-protection-marketing](images/ddg-email-protection-marketing.png)\n\n\n# About this Script Command\nThis script command lets you quickly generate a unique @duck.com address that is connected to your own e-mail address. Just like your personal you@duck.com address, the unique addresses will also forward any e-mail to your own e-mail address, after having been stripped of any tracking or analytics modules.\n\n![Raycast screenshot](images/script-command-screenshot.png)\n\n\nAt the same time, DuckDuckGo allows you to create unique private e-mail addresses. These are randomly generated @duck.com addresses that also forward to your actual e-mail address. These are basically 'throw-away' e-mail addresses that you can use for any reason.\n\n# Requirements\nIn order to configure this script command, you have to have been invited into the E-mail protection service beta. Currently, the only way to do this is through the DuckDuckGo app (iOS/Android). After you have been invited, you will need to extract your authorization ID from the DuckDuckGo desktop browser extension.\n\n# Configuring DDG Email Protection Script command\nCompleting the following commands should allow you to generate new unique @duck.com addresses from Raycast. Note: this explanation assumes the use of FireFox. \n\n1. First, make sure you've set-up the DDG extension on Firefox (or Chrome)\n2. Then, navigate go to about:debugging#/runtime/this-firefox\n3. In the list of installed extension, look for DuckDuckGo Privacy Essentials and click 'Inspect'\n4. In the inspector, navigate to the Network tab\n5. Click on the extension icon, and click on 'Create new Duck Address' (bottom)\n6. A new POST request will have appeared in the network tab, select it\n7. In the 'Request Headers' section, look for 'Authorization'\n8. Copy the string of randomized characters AFTER \"Bearer \"\n9. Open Raycast and paste the string in the Configure script command. You will receive a confirmation should the string be correct.\n\n![Locate authorization](images/locate-authorization-id.png)\n\n# Cleanup\nAfter configuring the script command, it is wise to disable the configuration command from Raycast settings."
  },
  {
    "path": "commands/communication/duckduckgo-email-protection/configure-@duck.com-script-command.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Configure\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/duckduckgo_logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"@duck.com authorizationID\" }\n# @raycast.packageName DuckDuckGo Email Protection\n\n# Documentation:\n# @raycast.description Use this script command to configure your @duck.com authorizationID\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run argv\n\tset prefix to do shell script \"curl -X POST https://quack.duckduckgo.com/api/email/addresses --header 'Authorization: Bearer \" & (item 1 of argv) & \"'\"\n\tif text 3 through 9 of prefix is \"address\" then\n\t\tsetAuthorizationID(item 1 of argv)\n\telse\n\t\ttell me to error \"Could not configure authorizationID. Duck.com API result: \" & prefix\n\tend if\nend run\n\non setAuthorizationID(authorizationID)\n\ttry\n\t\treturn do shell script \"defaults write com.dpe.ddgEmailProtection AuthorizationID \" & authorizationID\n\ton error\n\t\ttell me to error \"Authorization ID not set, please run configure script command\"\n\tend try\nend setAuthorizationID\n\n\n"
  },
  {
    "path": "commands/communication/duckduckgo-email-protection/generate-unique-email-address.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Generate Unique Address\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/duckduckgo_logo.png\n# @raycast.packageName DuckDuckGo Email Protection\n\n# Documentation:\n# @raycast.description This script command generates a unique private @duck.com email address.\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run\n\tset prefix to do shell script \"curl -X POST https://quack.duckduckgo.com/api/email/addresses --header 'Authorization: Bearer \" & getAuthorizationID() & \"'\"\n\tif text 3 through 9 of prefix is \"address\" then\n\t\tset uniqueAddress to text 13 through -3 of prefix & \"@duck.com\"\n\t\tset the clipboard to uniqueAddress\n\t\treturn uniqueAddress & \" copied to clipboard!\"\n\telse\n\t\ttell me to error \"An error has occured: \" & prefix\n\tend if\nend run\n\non getAuthorizationID()\n\ttry\n\t\treturn do shell script \"defaults read com.dpe.ddgEmailProtection AuthorizationID\"\n\ton error\n\t\ttell me to error \"Authorization ID not set, please run configure script command\"\n\tend try\nend getAuthorizationID\n\n\n"
  },
  {
    "path": "commands/communication/emojis/emoji-copy.sh",
    "content": "#!/bin/bash\n\n# Dependency: emoj (https://github.com/sindresorhus/emoj)\n# Install via npm: `npm install --global emoj`\n\n# @raycast.title Search and Copy First Related Emoji\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Copy first emoji related to input.\n\n# @raycast.icon 📙\n# @raycast.mode compact\n# @raycast.packageName Communication\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search for...\" }\n\nif ! command -v emoj &> /dev/null; then\n\techo \"emoj command is required (https://github.com/sindresorhus/emoj).\";\n\texit 1;\nfi\n\nemojis=$(emoj -c \"$1\")\n\nif [ -z \"$emojis\" ]; then\n\techo \"No emojis found for \\\"${1}\\\"\"\n\texit 0\nfi\n\necho \"Copied emoji for \\\"$1\\\"\""
  },
  {
    "path": "commands/communication/emojis/emojis-search.sh",
    "content": "#!/bin/bash\n\n# Dependency: emoj (https://github.com/sindresorhus/emoj)\n# Install via npm: `npm install --global emoj`\n\n# @raycast.title Search Emojis\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search for emojis related to input.\n\n# @raycast.icon 📙\n# @raycast.mode fullOutput\n# @raycast.packageName Communication\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search for...\" }\n\nif ! command -v emoj &> /dev/null; then\n\techo \"emoj command is required (https://github.com/sindresorhus/emoj).\";\n\texit 1;\nfi\n\nemojis=$(emoj \"$1\")\n\nif [ -z \"$emojis\" ]; then\n\techo \"No emojis found for \\\"${1}\\\"\"\n\texit 0\nfi\n\necho \"Emojis found for \\\"$1\\\":\"\necho \"\"\necho \"$emojis\"\necho \"\""
  },
  {
    "path": "commands/communication/emojis/random-emoji.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Random Emoji\n# @raycast.mode silent\n# @raycast.packageName Emojis\n\n# Optional parameters:\n# @raycast.icon 🎲\n\n# Documentation:\n# @raycast.description Copy a random emoji to the clipboard.\n# @raycast.author Tomohiro Nishimura\n# @raycast.authorURL https://github.com/Sixeight\n\nLANG=\"en_US.UTF-8\"\n\nif ! command -v jq &> /dev/null; then\n      echo \"jq command is required (https://github.com/jqlang/jq).\";\n      exit 1;\nfi\n\nIFS=$'\\n' read -d '' -r -a EMOJIS < <(curl -s https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json | jq -r '.[] | .emoji' && printf '\\0')\nEMOJI=\"${EMOJIS[$RANDOM % ${#EMOJIS[@]}]}\"\necho -n \"$EMOJI\" | pbcopy\necho \"$EMOJI\"\n"
  },
  {
    "path": "commands/communication/gmail/google-gmail.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Gmail\n# @raycast.author Michael Aigner\n# @raycast.authorURL https://github.com/tonka3000\n# @raycast.description Open gmail.com in the default browser\n\n# @raycast.icon images/google-gmail-logo.png\n# @raycast.mode silent\n# @raycast.packageName Google\n# @raycast.schemaVersion 1\n\nopen https://gmail.com\n"
  },
  {
    "path": "commands/communication/google-meet/meet.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Open Google Meet\n# @raycast.mode silent\n# @raycast.packageName Google\n# @raycast.icon images/logo.png\n# @raycast.author Mujib Azizi\n# @raycast.authorURL https://github.com/mujibazizi\n# @raycast.description Start a Google Meet session\n\nopen https://meet.google.com/new\n\nMAX_TRIES=10\nTRIES=0\n\nDEFAULT_BROWSER=$(defaults read ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist | awk -F'\\\"' '/http;/{print window[(NR)-1]}{window[NR]=$2}')\n\nget_url () {\n  if [ \"$DEFAULT_BROWSER\" = \"com.google.chrome\" ]; then\n    URL=$(osascript -e 'tell application \"Chrome\" to URL of active tab of front window as text')\n  elif [ \"$DEFAULT_BROWSER\" = \"com.brave.browser\" ]; then\n    URL=$(osascript -e 'tell application \"Brave\" to URL of active tab of front window as text')\n  elif [ \"$DEFAULT_BROWSER\" = \"com.apple.safari\" ]; then\n    URL=$(osascript -e 'tell application \"Safari\" to return URL of front document')\n  elif [ \"$DEFAULT_BROWSER\" = \"org.mozilla.firefox\" ]; then\n    URL=$(osascript -e 'tell applcation \"Firefox\" to activate')\n    echo \"There is no support for Firefox yet. Please copy the URL manually\"\n    exit 0\n  fi\n}\n\nwhile true; do\n  ((TRIES++))\n\n  # Allow some time between each iteration to perform an attempt\n  sleep 1\n\n  # As we're doing `while true`, we do want to make sure we can\n  # exit the script when we feel we've tried too many times.\n  if [[ \"$TRIES\" -gt \"$MAX_TRIES\" ]]; then\n    echo \"Could not copy Google Meet url\"\n    break;\n  fi\n\n  get_url\n\n  # First, we'll check if we are still on the Google Meet page.\n  if [[ $URL != \"https://meet.google.com\"* ]]; then\n    continue\n  fi\n\n  # Next, we want to make sure it's not still loading.\n  if [[ $URL == *\"new\"* ]]; then\n    continue\n  fi\n\n  echo $URL | pbcopy\n  echo \"Copied Google Meet url\"\n  break\ndone"
  },
  {
    "path": "commands/communication/imessage-2fa.sh",
    "content": "#!/bin/bash\n\n### Requires Raycast to have Full Disk Access:\n### https://spin.atomicobject.com/2020/05/22/search-imessage-sql/\n\n## Contributions welcome to improve regular expressions.\n\n# @raycast.title 2FA from iMessages\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n# @raycast.description Get most recent two-factor authentication code from iMessages.\n\n# @raycast.icon 🔐\n# @raycast.mode silent\n# @raycast.packageName iMessage\n# @raycast.schemaVersion 1\n\nsqlite_path=\"$HOME/Library/Messages/chat.db\"\nregex=\"(^| |\\s|\\t|\\R|G-|:)([0-9]{5,8})\"\nquery=\" \n    select\n        message.rowid,\n        ifnull(handle.uncanonicalized_id, chat.chat_identifier) AS sender,\n        message.service,\n        datetime(message.date / 1000000000 + 978307200, 'unixepoch', 'localtime') AS message_date,\n        message.text\n    from\n        message\n            left join chat_message_join\n                on chat_message_join.message_id = message.ROWID\n            left join chat\n                on chat.ROWID = chat_message_join.chat_id\n            left join handle\n                on message.handle_id = handle.ROWID\n    where\n        is_from_me = 0\n        and text is not null\n        and length(text) > 0\n        and (\n            text glob '*[0-9][0-9][0-9][0-9][0-9]*'\n            or text glob '*[0-9][0-9][0-9][0-9][0-9][0-9]*'\n            or text glob '*[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*'\n            or text glob '*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*'\n        )\n    order by\n        message.date desc\n    limit 50\n\"\n\nwhile read -r line; do  \n    IFS='|' \n    read -a columns <<< \"${line}\"\n\n    id=${columns[0]}\n    sender=${columns[1]}\n    date=${columns[3]}\n    message=${columns[4]}\n\n    if [[ $message =~ $regex ]]; then\n        matchedCode=\"${BASH_REMATCH[2]}\"\n        echo $matchedCode | pbcopy \n        echo \"Copied \\\"$matchedCode\\\" from $sender on $date\"\n        exit\n    fi\ndone <<< \"$(sqlite3 $sqlite_path \"$query\")\"\n\necho 'No two factor authentication codes found'"
  },
  {
    "path": "commands/communication/let-me-google-that.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Let Me Google That\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤡\n# @raycast.packageName Communication\n\n# Documentation:\n# @raycast.description Let Me Google That For You\n# @raycast.author Leo Fritsch\n# @raycast.authorURL https://github.com/leofritsch\n\n# Get the content of the clipboard\nclipboard=$(pbpaste)\n\n# change spaces to plus signs\nurl_encoded=$(echo \"${clipboard}\" | sed 's/ /+/g')\n\n# Construct the URL string with the encoded clipboard content\nurl=\"https://letmegooglethat.com/?q=${url_encoded}\"\n\n# Copy the URL to the clipboard\necho \"${url}\" | pbcopy\necho -e \"Copied to clipboard: ${url}\""
  },
  {
    "path": "commands/communication/mail/open-most-recent-email.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Most Recent Email\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ✉️\n# @raycast.packageName Mail\n\n# Documentation:\n# @raycast.description Open the last received email in your inbox in Mail.app\n# @raycast.author Ben Yoon\n# @raycast.authorURL https://github.com/benyn\n\ntell application \"Mail\"\n  if not (first message of inbox exists) then\n    # Trigger a check for new email just in case.\n    check for new mail\n    log \"No emails found in your inbox. Checking for new email.\"\n    return\n  end if\n\n  # Get the first email from each account inbox and find the one that was received last.\n  # `first message of inbox` is inadequate since it refers to\n  # the first message of the first account inbox.\n  set lastReceivedMessage to missing value\n  repeat with accountInbox in mailboxes of inbox\n    if first message of accountInbox exists then\n      set firstMessage to first message of accountInbox\n      if lastReceivedMessage is missing value then\n        set lastReceivedMessage to firstMessage\n      else if (date received of lastReceivedMessage) < (date received of firstMessage) then\n        set lastReceivedMessage to firstMessage\n      end if\n    end if\n  end repeat\n  open lastReceivedMessage\n  # Show nothing at the end (prevent \"missing value\" from being shown).\n  log \"\"\nend tell\n"
  },
  {
    "path": "commands/communication/messenger/messenger-open-conversation.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Messenger to be installed: https://www.messenger.com/desktop\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Conversation\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/messenger.png\n# @raycast.packageName Messenger\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the keystroke for the Search\n\t# (used only when Messenger needs to be initialized)\n\tset keystrokeDelay to 2.5\n\t# Delay time before triggering the \"⌘1\" keystroke\n\tset conversationKeystrokeDelay to 1\n\n\t### End of configuration ###\n\n\tif application \"Messenger\" is running then\n\t\tdo shell script \"open -a Messenger\"\n\telse\n\t\tdo shell script \"open -a Messenger\"\n\t\tdelay keystrokeDelay\n\tend if\n\n\ttell application \"System Events\" to tell process \"Messenger\"\n\t\tkeystroke \"k\" using command down\n\t\tkeystroke item 1 of argv\n\t\tdelay conversationKeystrokeDelay\n\t\tkeystroke \"1\" using command down\n\tend tell\n\nend run\n"
  },
  {
    "path": "commands/communication/say.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Say\n# @raycast.author Felipe Turcheti\n# @raycast.authorURL https://felipeturcheti.com\n# @raycast.description Convert text to audible speech.\n\n# @raycast.icon 🗣\n# @raycast.mode silent\n# @raycast.packageName Communication\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Say this...\", \"optional\": false }\n\nsay \"$1\"\n"
  },
  {
    "path": "commands/communication/share-secret-doppler.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Share Secret from Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/doppler-logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Expire Views (1)\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Expire Days (1)\", \"optional\": true }\n# @raycast.packageName Doppler\n\n# @Documentation:\n# @raycast.author Petr Nikolaev\n# @raycast.authorURL https://github.com/PitNikola\n# @raycast.description Share secret securely using https://share.doppler.com/.\n\nimport json\nimport sys\nimport urllib.request\nimport subprocess\n\nexpire_views = sys.argv[1]\nexpire_days = sys.argv[2]\n\nif not expire_views:\n    expire_views = 1\n\nif not expire_days:\n    expire_days = 1\n\n\ndef read_from_clipboard():\n    return subprocess.check_output(\n        'pbpaste', env={'LANG': 'en_US.UTF-8'}).decode('utf-8')\n\n\ndef write_to_clipboard(output):\n    process = subprocess.Popen(\n        'pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)\n    process.communicate(output.encode())\n\n\nurl = \"https://api.doppler.com/v1/share/secrets/plain\"\n\npayload = {\n    \"expire_views\": expire_views,\n    \"expire_days\": expire_views\n}\n\npayload['secret'] = read_from_clipboard()\n\nheaders = {\"Content-Type\": \"application/json\"}\n\nrequest = urllib.request.Request(url)\npayload = json.dumps(payload)\npayload_as_bytes = payload.encode('utf-8')\nrequest.add_header('Content-Type', 'application/json')\nrequest.add_header('Content-Length', len(payload_as_bytes))\ntry:\n    response = urllib.request.urlopen(request, payload_as_bytes)\nexcept urllib.error.HTTPError as err:\n    print(\"Failed to create secret. HTTP Error code: {}\".format(err.code))\n    sys.exit(1)\nexcept urllib.error.URLError as err:\n    print(\"Failed to create secret: {}\".format(err.reason))\n    sys.exit(1)\nelse:\n    json_response = json.load(response)\n    authenticated_url = json_response['authenticated_url']\n    write_to_clipboard(authenticated_url)\n    print(\"Secret URL copied to clipboard\")\n"
  },
  {
    "path": "commands/communication/slack/add-slack-reminder.template.sh",
    "content": "#!/bin/bash\n\n# API: https://api.slack.com/methods/reminders.add\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Reminder\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon ⏰\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"What\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"When\" }\n\n# Documentation:\n# @raycast.description Create a Slack reminder\n# @raycast.author Zeb Pykosz\n# @raycast.authorURL https://github.com/zebapy\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `reminders:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\nAPI_TOKEN=\"\"\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nRESPONSE=$(\ncurl \\\n  --header \"Content-Type: application/json\" \\\n  --header \"Authorization: Bearer $API_TOKEN\" \\\n  --request POST \\\n  --data \"{ 'text': '$1', 'time': '$2' }\" \\\n  --silent \\\n  --output /dev/null \\\n  --show-error \\\n  --fail \\\n  \"https://slack.com/api/reminders.add\"\n)\n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to add reminder in Slack\"\n  exit 1\nelse \n  echo \"Added reminder '$1 $2' in Slack!\"\n  exit 0\nfi\n"
  },
  {
    "path": "commands/communication/slack/clear-slack-DND-status.sh",
    "content": "#!/bin/bash\n\n# API: https://slack.com/api/dnd.endDnd\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Slack DND\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon images/slack-logo.png\n\n# Documentation:\n# @raycast.description Clear DND Status in Slack\n# @raycast.author Sam Ching\n# @raycast.authorURL https://github.com/samching\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `dnd:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\nAPI_TOKEN=\"XXXXXX\"\n\n\n# Main program\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nRESPONSE=$(\ncurl \\\n  --header \"Content-Type: application/json\" \\\n  --header \"Authorization: Bearer $API_TOKEN\" \\\n  --request POST \\\n  --silent \\\n  --show-error \\\n  --fail \\\n  \"https://slack.com/api/dnd.endDnd\"\n) \n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to clear DND status in Slack\"\n  exit 1\nelse \n  echo \"Cleared DND status in Slack\"\n  exit 0\nfi\n"
  },
  {
    "path": "commands/communication/slack/clear-slack-status.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file, \n# remove `.template.` from the filename and set an API token.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Status\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon 🧼\n\n# Documentation:\n# @raycast.description Clear your status in Slack.\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `users.profile:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\nAPI_TOKEN=\"\"\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nRESPONSE=$(\ncurl \\\n  --header \"Content-Type: application/json\" \\\n  --header \"Authorization: Bearer $API_TOKEN\" \\\n  --request POST \\\n  --data \"{ 'profile': { 'status_text': '', 'status_emoji': '' } }\" \\\n  --silent \\\n  --output /dev/null \\\n  --show-error \\\n  --fail \\\n  \"https://slack.com/api/users.profile.set\"\n)\n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to clear status in Slack\"\n  exit 1\nelse \n  echo \"Cleared status in Slack\"\n  exit 0\nfi"
  },
  {
    "path": "commands/communication/slack/set-slack-DND-status.sh",
    "content": "#!/bin/bash\n\n# API: https://slack.com/api/dnd.setSnooze\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set DND Status\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"number of minutes\", \"percentEncoded\": true, \"optional\": true}\n# @raycast.icon images/slack-logo.png\n\n# Documentation:\n# @raycast.description Set your DND status in Slack\n# @raycast.author Sam Ching\n# @raycast.authorURL https://github.com/samching\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `dnd:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\nAPI_TOKEN=\"XXXXXX\"\n\n# Default expiration (in mins)\nDEFAULT_STATUS_EXPIRATION_IN_MINUTES=30\n\n# Minutes until the the status will expire\nSTATUS_EXPIRATION_IN_MINUTES=\"${1}\"\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nif [[ -z \"$STATUS_EXPIRATION_IN_MINUTES\" ]]\nthen\n  STATUS_EXPIRATION_IN_MINUTES=$DEFAULT_STATUS_EXPIRATION_IN_MINUTES # default expiration\nfi\n\nRESPONSE=$(\ncurl \\\n  --header \"Content-Type: application/x-www-form-urlencoded\" \\\n  --request POST \\\n  --data \"token=$API_TOKEN&num_minutes=$STATUS_EXPIRATION_IN_MINUTES\" \\\n  --silent \\\n  --show-error \\\n  --fail \\\n  \"https://slack.com/api/dnd.setSnooze\"\n) \n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to set status in Slack\"\n  exit 1\nelse \n  echo \"Turned DND on in Slack for $STATUS_EXPIRATION_IN_MINUTES\" minutes\n  exit 0\nfi"
  },
  {
    "path": "commands/communication/slack/set-slack-status-spotify.sh",
    "content": "#!/bin/bash\n\n# API: https://api.slack.com/methods/users.profile.set\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Status in Slack to Spotify Song\n# @raycast.mode inline\n# @raycast.refreshTime 30s\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon images/slack-logo.png\n\n# Documentation:\n# @raycast.description Set your status in Slack to a song currently playing in Spotify.\n# @raycast.author alongat\n# @raycast.authorURL https://github.com/alongat\n\n# Configuration\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `users.profile:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\n\n# SLACK Token\nAPI_TOKEN=\"XXXX\"\n\n# Song playing on Spotify\nSONG=\"\" \n\n# Minutes until the the status will expire (Empty string will not expire the status)\nSTATUS_EXPIRATION_IN_MINUTES=\"2\"\n\n# Lock is used to know if this script updated the status in slack, so not to just clear the status.\nLOCK=\"spotify.lock\"\n\nfunction getSongAndState() {\n  SONG=\"$(osascript -e 'tell application \"Spotify\" to artist of current track & \" - \" & name of current track' | cut -c1-99)\"\n  STATE=$(osascript -e 'tell application \"Spotify\" to player state')\n  STATUS_EMOJI=\":heads-down:\"\n}\n\nfunction resetStatus() {\n  if [ ! -f \"$LOCK\" ]; then\n    echo \"$LOCK not exists. doing nothing\"\n    return\n  fi\n  echo 'Resetting status'\n  STATUS_EMOJI=\"\"\n  SONG=\"\"\n  STATUS_EXPIRATION_IN_MINUTES=\"\"\n  setStatus\n  rm $LOCK\n}\n\nfunction setExperation() {\n  if [[ -z \"$STATUS_EXPIRATION_IN_MINUTES\" ]]\n  then\n    STATUS_EXPIRATION=0\n  else \n    CURRENT_UNIX_TIME=$(date +%s)\n    STATUS_EXPIRATION=$(($CURRENT_UNIX_TIME + ($STATUS_EXPIRATION_IN_MINUTES * 60)))\n  fi\n}\n\nfunction setStatus() {\n  if [ ! -f \"$LOCK\" ]; then\n    echo \"$LOCK not exists. doing nothing\"\n    return\n  fi\n  setExperation\n  RESPONSE=$(\n    curl \\\n      --header \"Content-Type: application/json\" \\\n      --header \"Authorization: Bearer $API_TOKEN\" \\\n      --request POST \\\n      --data \"{ 'profile': { 'status_text': '$SONG', 'status_emoji': '$STATUS_EMOJI', 'status_expiration': $STATUS_EXPIRATION } }\" \\\n      --silent \\\n      --show-error \\\n      --fail \\\n      \"https://slack.com/api/users.profile.set\"\n    )\n}\n\n# Main program\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\npgrep Spotify > /dev/null\nif [ $? -ne 0 ]; then\n  echo 'Spotify is not running, exiting'\n  resetStatus\n  exit 0\nfi\n\ngetSongAndState\nif [[ \"$STATE\" != \"playing\" ]]; then\n  resetStatus\nelse\n  touch $LOCK\n  setStatus\nfi\n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to set status in Slack\"\n  exit 1\nelse \n  echo \"Status set to $STATUS_EMOJI : $SONG\"\n  exit 0\nfi"
  },
  {
    "path": "commands/communication/slack/set-slack-status.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file, \n# remove `.template.` from the filename and set an API token.\n# Optionally, adjust the status text and emoji as well as \n# the command title and icon to fit your Slack status.\n#\n# API: https://api.slack.com/methods/users.profile.set\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Status to Coffee\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon ☕️\n\n# Documentation:\n# @raycast.description Set your status in Slack.\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\n\n# Configuration\n\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `users.profile:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\nAPI_TOKEN=\"\"\n\n# Short status text (max. 100 characters)\nSTATUS_TEXT=\"Coffee\"\n\n# String referencing an emoji enabled for the Slack team\nSTATUS_EMOJI=\":coffee:\"\n\n# Minutes until the the status will expire (Empty string will not expire the status)\nSTATUS_EXPIRATION_IN_MINUTES=\"30\"\n\n\n# Main program\n\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nif [[ -z \"$STATUS_EXPIRATION_IN_MINUTES\" ]]\nthen\n  STATUS_EXPIRATION=0\nelse \n  CURRENT_UNIX_TIME=$(date +%s)\n  STATUS_EXPIRATION=$(($CURRENT_UNIX_TIME + ($STATUS_EXPIRATION_IN_MINUTES * 60)))\nfi\n\nRESPONSE=$(\ncurl \\\n  --header \"Content-Type: application/json\" \\\n  --header \"Authorization: Bearer $API_TOKEN\" \\\n  --request POST \\\n  --data \"{ 'profile': { 'status_text': '$STATUS_TEXT', 'status_emoji': '$STATUS_EMOJI', 'status_expiration': $STATUS_EXPIRATION } }\" \\\n  --silent \\\n  --show-error \\\n  --fail \\\n  \"https://slack.com/api/users.profile.set\"\n) \n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to set status in Slack\"\n  exit 1\nelse \n  echo \"Set status to coffee in Slack\"\n  exit 0\nfi"
  },
  {
    "path": "commands/communication/slack/set-slack-wfh-status.sh",
    "content": "#!/bin/bash\n\n# API: https://api.slack.com/methods/users.profile.set\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set WFH Status in Slack\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Slack\n# @raycast.icon images/slack-logo.png\n\n# Documentation:\n# @raycast.description Set your status in Slack to WFH or WFO depending on your WiFi\n# @raycast.author alongat\n# @raycast.authorURL https://github.com/alongat\n\n# Configuration\n# To create a new API token, do the following:\n# 1. Create a new Slack app at https://api.slack.com/authentication/basics\n# 2. Add `users.profile:write` to the user token scopes\n# 3. Install the app to your workplace\n# 4. Insert your OAuth access token below\n# 5. Fill you OFFICE_WIFI + HOME_WIFI - this will set different emoji when WFH vs WFO\n\n# SLACK Token\nAPI_TOKEN=\"XXXX\"\n\n# Minutes until the the status will expire (Empty string will not expire the status)\nSTATUS_EXPIRATION_IN_MINUTES=\"540\" # 9 hours \nCURRENT_UNIX_TIME=$(date +%s)\nSTATUS_EXPIRATION=$(($CURRENT_UNIX_TIME + ($STATUS_EXPIRATION_IN_MINUTES * 60)))\n\n# Define home and office WiFi\nHOME_WIFI=\"HOME-WIFI\"\nOFFICE_WIFI=\"OFFICE-WIFI\"\n\n# Main program\nif [[ -z \"$API_TOKEN\" ]]\nthen \n  echo \"No API token provided\"\n  exit 1\nfi\n\nwifi_name=`/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk -F: '/ SSID/{print $2}'`\nif [[ \"$wifi_name\" == \" $HOME_WIFI\" ]]; then\n  STATUS_EMOJI=\":house_with_garden:\"\n  TEXT=\"WFH\"\nelif [[ \"$wifi_name\" == \" $OFFICE_WIFI\" ]]; then\n  STATUS_EMOJI=\":office:\"\n  TEXT=\"WFO\"\nfi\n\nRESPONSE=$(\n    curl \\\n      --header \"Content-Type: application/json\" \\\n      --header \"Authorization: Bearer $API_TOKEN\" \\\n      --request POST \\\n      --data \"{ 'profile': { 'status_text': '$TEXT', 'status_emoji': '$STATUS_EMOJI', 'status_expiration': $STATUS_EXPIRATION } }\" \\\n      --silent \\\n      --show-error \\\n      --fail \\\n      \"https://slack.com/api/users.profile.set\"\n    )\n\nif [[ \"$RESPONSE\" =~ \"error\" ]]\nthen\n  echo \"Failed to set status in Slack\"\n  exit 1\nelse \n  echo \"Status set to $STATUS_EMOJI : $TEXT\"\n  exit 0\nfi"
  },
  {
    "path": "commands/communication/slack/slack-dev-mode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Launch Dev Mode\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/slack-logo.png\n# @raycast.packageName Slack\n\n# Documentation:\n# @raycast.description Open Slack with the Developer Menu enabled. ⌘⌥I to access the Developer Menu. If you find it's not working, quit Slack and run this command again.\n# @raycast.author Cody Carrell\n# @raycast.authorURL https://raycast.com/sourcecody\n\nSLACK_DEVELOPER_MENU=true open /Applications/Slack.app\n"
  },
  {
    "path": "commands/communication/slack/slack-jump-to.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Slack to be installed: https://slack.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Jump to...\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/slack-logo.png\n# @raycast.packageName Slack\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Channel / DM / File / Misc\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the keystroke for the Quick Switcher\n\t# (used only when Slack needs to be initialized)\n\tset keystrokeDelay to 5\n\t# Delay time before entering the input\n\tset inputDelay to 0.5\n\t# Delay time before triggering the \"enter\" keystroke\n\tset enterDelay to 0.5\n\n\t### End of configuration ###\n\n\tif application \"Slack\" is running then\n\t\tdo shell script \"open -a Slack\"\n\telse\n\t\tdo shell script \"open -a Slack\"\n\t\tdelay keystrokeDelay\n\tend if\n\n\ttell application \"System Events\"\n\t\tkeystroke \"k\" using command down\n\t\tdelay inputDelay\n\t\tkeystroke item 1 of argv\n\t\tdelay enterDelay\n\t\tkey code 36\n\tend tell\n\nend run\n"
  },
  {
    "path": "commands/communication/slack/slack-open-workspace-by-index.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Slack to be installed: https://slack.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Workspace by Index\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/slack-logo.png\n# @raycast.packageName Slack\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Index\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the keystroke (used only when Slack needs to be initialized)\n\tset keystrokeDelay to 5\n\n\t### End of configuration ###\n\n\tif item 1 of argv = \"\" then\n\t\tset serviceIndex to 1\n\telse\n\t\tset serviceIndex to item 1 of argv\n\tend if\n\n\tif application \"Slack\" is running then\n\t\tdo shell script \"open -a Slack\"\n\telse\n\t\tdo shell script \"open -a Slack\"\n\t\tdelay keystrokeDelay\n\tend if\n\n\ttell application \"System Events\" to keystroke serviceIndex using command down\n\nend run\n"
  },
  {
    "path": "commands/communication/slack/slack-open-workspace-by-name.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Slack to be installed: https://slack.com/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Workspace by Name\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/slack-logo.png\n# @raycast.packageName Slack\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\non run argv\n\n\t### Configuration ###\n\n\t# Delay time before triggering the click (used only when Slack needs to be initialized)\n\tset clickDelay to 5\n\n\t### End of configuration ###\n\n\tif application \"Slack\" is running then\n\t\tdo shell script \"open -a Slack\"\n\telse\n\t\tdo shell script \"open -a Slack\"\n\t\tdelay clickDelay\n\tend if\n\n\ttell application \"System Events\" to tell process \"Slack\"\n\t\tif item 1 of argv = \"\" then\n\t\t\tclick menu item 1 of menu 1 of menu item \"Workspace\" of menu 1 of menu bar item \"File\" of menu bar 1\n\t\telse\n\t\t\tset workspaces to name of menu items of menu 1 of menu item \"Workspace\" of menu 1 of menu bar item \"File\" of menu bar 1\n\t\t\tset workspaces to items 1 through -8 of workspaces\n\n\t\t\trepeat with workspace in workspaces\n\t\t\t\tif workspace contains item 1 of argv then\n\t\t\t\t\tclick menu item workspace of menu 1 of menu item \"Workspace\" of menu 1 of menu bar item \"File\" of menu bar 1\n\t\t\t\t\texit repeat\n\t\t\t\tend if\n\t\t\tend repeat\n\t\tend if\n\tend tell\n\nend run\n"
  },
  {
    "path": "commands/communication/slack/slack-send-message.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n# @raycast.schemaVersion 1\n# @raycast.title Send Message in Channel\n# @raycast.mode silent\n# @raycast.packageName Slack\n# @raycast.description This script posts a message text to a slack channel and sets active status (defaults to random good morning message in #general)\n# @raycast.needsConfirmation true\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Channel (default: #general)\", \"optional\": true, }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Message (default: good morning)\", \"optional\": true, }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Set Active? y/n\", \"optional\": true, }\n\n\n# Optional parameters:\n# @raycast.icon images/slack-logo.png\n\n\non openChannel(channel)\n\ttell application \"Slack\"\n\t\tactivate\n\t\ttell application \"System Events\"\n\t\t\tkeystroke \"k\" using {command down}\n\t\t\tdelay 0.5\n\t\t\tkeystroke channel\n\t\t\tdelay 0.5\n\t\t\tkey code 36\n\t\t\tdelay 0.5\n\t\tend tell\n\tend tell\nend openChannel\n\non sendMessage(msg)\n\ttell application \"Slack\"\n\t\tactivate\n\t\ttell application \"System Events\"\n\t\t\tkeystroke msg\n\t\t\tdelay 0.5\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend sendMessage\n\non slashCommand(cmd)\n\ttell application \"Slack\"\n\t\tactivate\n\t\ttell application \"System Events\"\n\t\t\tkey code 44\n\t\t\tdelay 0.5\n\t\t\tkeystroke cmd\n\t\t\tdelay 0.5\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend slashCommand\n\non pressReturn()\n\ttell application \"Slack\"\n\t\tactivate\n\t\ttell application \"System Events\"\n\t\t\tdelay 1\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend pressReturn\n\non run argv\n    set channel to item 1 of argv\n    set message to item 2 of argv\n    set setActive to item 3 of argv\n    set today to do shell script \"date +%A\"\n    set todayText to \"Happy \" & today & \"!\"\n    set goodMorningTexts to {\"Good Morning all!\", \"Good Morning Everyone!\", todayText }\n    set randomItemNum to random number from 1 to count of goodMorningTexts\n    set randomGoodMorningText to item randomItemNum of goodMorningTexts as string\n\n-- if no channel argument set #general as default\n    if channel = \"\" then\n        set channelToSendTo to \"#general\"\n    else\n        set channelToSendTo to channel\n    end if\n\n-- if no message argument set random good morning message as default\n    if message = \"\" then\n        set messageToSend to randomGoodMorningText\n    else\n        set messageToSend to message\n    end if\n\n    openChannel(channelToSendTo)\n    -- setting to active will not work if already active\n    if setActive = \"y\" or setActive = \"Y\" then\n        sendMessage(messageToSend)\n        slashCommand(\"Set yourself as active\")\n        pressReturn()\n        log messageToSend & \" sent To \" & channelToSendTo &\" and status set to active!\"\n    else if setActive = \"n\" or setActive = \"N\" or setActive = \"\" -- default is no\n        sendMessage(messageToSend)\n        log messageToSend & \" sent To \" & channelToSendTo &\"!\"\n    else\n        log \"Invalid argument for set active. Specify setting active using 'y' or 'n'\"\n    end if\nend run\n"
  },
  {
    "path": "commands/communication/xkcdpass.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires xkcdpass (https://github.com/redacted/XKCD-password-generator).\n# Install via pip: `pip install xkcdpass`\n\n# @raycast.title Generate Passphrase\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Use [xkcdpass](https://github.com/redacted/XKCD-password-generator) to create a passphrase.\n\n# @raycast.icon 🔐\n# @raycast.mode silent\n# @raycast.packageName Communication\n# @raycast.schemaVersion 1\n\nif ! command -v xkcdpass &> /dev/null; then\n\techo \"xkcdpass is required (https://pypi.org/project/xkcdpass/).\";\n\texit 1;\nfi\n\npassphrase=$(xkcdpass)\necho -n $passphrase | pbcopy\n\necho \"Copied passphrase\""
  },
  {
    "path": "commands/communication/zoom/leave-meeting.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n# @raycast.schemaVersion 1\n# @raycast.title Leave Meeting\n# @raycast.mode silent\n# @raycast.packageName Zoom\n# @raycast.description Leaves Current Zoom meeting\n# @raycast.needsConfirmation true\n\n\n# Optional parameters:\n# @raycast.icon images/zoom-logo.png\n\n\ntell application \"zoom.us\"\n\tactivate\n\ttell application \"System Events\"\n\t\tkeystroke \"w\" using {command down}\n\t\tdelay 0.5\n\t\tkey code 36\n\t\tlog \"Meeting left\"\n\tend tell\nend tell\n"
  },
  {
    "path": "commands/communication/zoom/rename-profile.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Rename Profile\n# @raycast.description Rename your profile in Zoom Meeting App (Mac Only) and cliclick.\n# @raycast.mode silent\n# @raycast.packageName Zoom\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"AFK for?\" }\n\n# Optional parameters:\n# @raycast.icon images/zoom-logo.png\n\n# Documentation:\n# @raycast.author Leo Voon\n# @raycast.authorURL https://github.com/leovoon\n\non run argv\n\t\n\ttell application \"System Events\"\n\t\ttell application process \"zoom.us\"\n\t\t\tset frontmost to true\n\t\t\tset windowIsOpen to false\n\t\t\tset participantsWindow to missing value\n\t\t\tset renameWindow to missing value\n\t\t\t\n\t\t\trepeat with w in windows\n\t\t\t\tif name of w contains \"Participants\" then\n\t\t\t\t\tset windowIsOpen to true\n\t\t\t\t\tset participantsWindow to w\n\t\t\t\t\texit repeat\n\t\t\t\tend if\n\t\t\tend repeat\n\t\t\t\n\t\t\tdelay 0.5\n\t\t\tset foundRename to false\n\t\t\t-- Hover on name\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick m:\" & 1183 & \",\" & 124\n\t\t\tdelay 0.5\n\n\t\t\t-- Hover on More button\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick m:\" & 1400 & \",\" & 124\n\t\t\tdelay 0.5\n\n\t\t\t-- Click More button\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick c:\" & 1400 & \",\" & 124\n\t\t\tdelay 0.5\t\n\n\t\t\t-- Click Arrow Down\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick kp:arrow-down kp:arrow-down kp:return\"\n\t\t\tdelay 0.5\n\n\t\t\t-- Target Rename and Hit Return Key\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick kp:return\"\n\t\t\t\n\t\t\t-- Edit Input, modify here for your needs\n\t\t\tdelay 0.5\n\t\t\tset newName to \"YOUR NAME -\" & ( item 1 of argv )\n\t\t\tdelay 0.5\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick c:\" & 888 & \",\" & 430\n\t\t\tdelay 0.5\n\t\t\tkey code 51 using {command down}\n\t\t\tkeystroke newName\n\t\t\tdelay 0.5\n\t\t\tdo shell script \"/opt/homebrew/bin/cliclick c:\" & 880 & \",\" & 517\n\t\t\t\n\t\t\t\n\t\tend tell\n\tend tell\nend run"
  },
  {
    "path": "commands/communication/zoom/toggle-mic.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Luigi Cardito\n# @raycast.authorURL https://github.com/lcardito\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Microphone\n# @raycast.mode silent\n# @raycast.packageName Zoom\n# @raycast.description Mute/Unmute your microphone in the current meeting\n\n\n# Optional parameters:\n# @raycast.icon images/zoom-logo.png\n\n\ntell application \"zoom.us\"\n\tactivate\n\ttell application \"System Events\"\n\t\tkeystroke \"a\" using {shift down, command down}\n\t\tlog \"Toggle mute\"\n\tend tell\nend tell\n"
  },
  {
    "path": "commands/communication/zoom/toggle-video.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Luigi Cardito\n# @raycast.authorURL https://github.com/lcardito\n# @raycast.author Faris Aziz\n# @raycast.authorURL https://github.com/farisaziz12\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Video\n# @raycast.mode silent\n# @raycast.packageName Zoom\n# @raycast.description Show/Hide your microphone in the current meeting\n\n\n# Optional parameters:\n# @raycast.icon images/zoom-logo.png\n\n\ntell application \"zoom.us\"\n\tactivate\n\ttell application \"System Events\"\n\t\tkeystroke \"v\" using {shift down, command down}\n\t\tlog \"Toggle video\"\n\tend tell\nend tell\n"
  },
  {
    "path": "commands/conversions/change-case/camelcase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Camel Case\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/camelcase-light.png\n# @raycast.iconDark ./images/camelcase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change to clipboard text to camel case\n\nimport subprocess\nimport re\n\nalways_uppercase = r\"\"\"\\bXML|HTML|CSS|JSON|FYI|AOL|ATM|BBC|CD|FAQ|GAIM|GNU|GTK|HIRD|HIV\n  |HURD|IEEE|IOU|IRA|IUPAC|JPEG|LCD|NAACP|NAC|NATO|NCAA|NOAD|OEM|PHP|ROM|SAT|SFMOMA|SQL|USA|VHDL|VHSIC|W3C\n  |LOL|WTF\\b\"\"\"\nalways_uppercase_re = re.compile(always_uppercase, re.I | re.X)\n\n\ndef __dict_replace(s, d):\n    \"\"\"Replace substrings of a string using a dictionary.\"\"\"\n    for key, value in d.items():\n        s = s.replace(key, value)\n    return s\n\n\nSMALL = \"a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|v\\.?|via|vs\\.?\"\nPUNCT = r\"\"\"!\"#$%&'‘()*+,\\-./:;?@[\\\\\\]_`{|}~\"\"\"\n\nSMALL_WORDS = re.compile(r\"^(%s)$\" % SMALL, re.I)\nINLINE_PERIOD = re.compile(r\"[a-z][.][a-z]\", re.I)\nUC_ELSEWHERE = re.compile(r\"[%s]*?[a-zA-Z]+[A-Z]+?\" % PUNCT)\nCAPFIRST = re.compile(r\"^[%s]*?([A-Za-z])\" % PUNCT)\nSMALL_FIRST = re.compile(r\"^([%s]*)(%s)\\b\" % (PUNCT, SMALL), re.I)\nSMALL_LAST = re.compile(r\"\\b(%s)[%s]?$\" % (SMALL, PUNCT), re.I)\nSUBPHRASE = re.compile(r\"([:.;?!][ ])(%s)\" % SMALL)\nAPOS_SECOND = re.compile(r\"^[dol]{1}['‘]{1}[a-z]+$\", re.I)\nALL_CAPS = re.compile(r\"^[A-Z\\s%s]+$\" % PUNCT)\nUC_INITIALS = re.compile(r\"^(?:[A-Z]{1}\\.{1}|[A-Z]{1}\\.{1}[A-Z]{1})+$\")\nMAC_MC = re.compile(r\"^([Mm]a?c)(\\w+)\")\n\n\ndef titlecase(text):\n\n    \"\"\"\n    Titlecases input text\n\n    This filter changes all words to Title Caps, and attempts to be clever\n    about *un*capitalizing SMALL words like a/an/the in the input.\n\n    The list of \"SMALL words\" which are not capped comes from\n    the New York Times Manual of Style, plus 'vs' and 'v'.\n\n    \"\"\"\n\n    lines = re.split(\"[\\r\\n]+\", text)\n    processed = []\n    for line in lines:\n        all_caps = ALL_CAPS.match(line)\n        words = re.split(\"[\\t ]\", line)\n        tc_line = []\n        for word in words:\n            if all_caps:\n                if UC_INITIALS.match(word):\n                    tc_line.append(word)\n                    continue\n                else:\n                    word = word.lower()\n\n            if APOS_SECOND.match(word):\n                word = word.replace(word[0], word[0].upper())\n                word = word.replace(word[2], word[2].upper())\n                tc_line.append(word)\n                continue\n            if INLINE_PERIOD.search(word) or UC_ELSEWHERE.match(word):\n                tc_line.append(word)\n                continue\n            if SMALL_WORDS.match(word):\n                tc_line.append(word.lower())\n                continue\n\n            match = MAC_MC.match(word)\n            if match:\n                tc_line.append(\n                    \"%s%s\" % (match.group(1).capitalize(), match.group(2).capitalize())\n                )\n                continue\n\n            hyphenated = []\n            for item in word.split(\"-\"):\n                hyphenated.append(CAPFIRST.sub(lambda m: m.group(0).upper(), item))\n            tc_line.append(\"-\".join(hyphenated))\n\n        result = \" \".join(tc_line)\n\n        result = SMALL_FIRST.sub(\n            lambda m: \"%s%s\" % (m.group(1), m.group(2).capitalize()), result\n        )\n\n        result = SMALL_LAST.sub(lambda m: m.group(0).capitalize(), result)\n\n        result = SUBPHRASE.sub(\n            lambda m: \"%s%s\" % (m.group(1), m.group(2).capitalize()), result\n        )\n\n        processed.append(result)\n\n    return \"\\n\".join(processed)\n\n\ndef titlecase_plus(text):\n    \"\"\"The titlecase module assumes words in all UPPERCASE should be ignored.\n  This works for words like HTML, FYI, ID, etc., but not generally. Just work\n  around for now by going to .lower first. Then, replace any well known\n  \"always\" uppercase\"\"\"\n    text = titlecase(text.lower())\n\n    def upcase(m):\n        return m.group().upper()\n\n    return always_uppercase_re.sub(upcase, text)\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = titlecase_plus(clipboard).replace(\" \", \"\")\nresult = result[0].lower() + result[1:]\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/change-case/kebabcase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Kebab Case\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/kebabcase-light.png\n# @raycast.iconDark ./images/kebabcase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change to clipboard text to kebab case\n\nimport subprocess\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = clipboard.lower().replace(\" \", \"-\").replace(\"_\", \"-\")\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/change-case/lowercase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Lowercase\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/lowercase-light.png\n# @raycast.iconDark ./images/lowercase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change clipboard text to lowercase\n\nimport subprocess\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = clipboard.lower()\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/change-case/snakecase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Snake Case\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/snakecase-light.png\n# @raycast.iconDark ./images/snakecase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change to clipboard text to snake case\n\nimport subprocess\nimport re\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = re.sub(r\"([a-z])([A-Z])\", r\"\\1_\\2\", clipboard)\nresult = result.lower().replace(\" \", \"_\").replace(\"-\", \"_\")\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/change-case/titlecase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Title Case\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/titlecase-light.png\n# @raycast.iconDark ./images/titlecase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change to clipboard text to title case\n\nimport re\nimport subprocess\n\nalways_uppercase = r\"\"\"\\bXML|HTML|CSS|JSON|FYI|AOL|ATM|BBC|CD|FAQ|GAIM|GNU|GTK|HIRD|HIV\n  |HURD|IEEE|IOU|IRA|IUPAC|JPEG|LCD|NAACP|NAC|NATO|NCAA|NOAD|OEM|PHP|ROM|SAT|SFMOMA|SQL|USA|VHDL|VHSIC|W3C\n  |LOL|WTF\\b\"\"\"\nalways_uppercase_re = re.compile(always_uppercase, re.I | re.X)\n\n\ndef __dict_replace(s, d):\n    \"\"\"Replace substrings of a string using a dictionary.\"\"\"\n    for key, value in d.items():\n        s = s.replace(key, value)\n    return s\n\n\nSMALL = \"a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|v\\.?|via|vs\\.?\"\nPUNCT = r\"\"\"!\"#$%&'‘()*+,\\-./:;?@[\\\\\\]_`{|}~\"\"\"\n\nSMALL_WORDS = re.compile(r\"^(%s)$\" % SMALL, re.I)\nINLINE_PERIOD = re.compile(r\"[a-z][.][a-z]\", re.I)\nUC_ELSEWHERE = re.compile(r\"[%s]*?[a-zA-Z]+[A-Z]+?\" % PUNCT)\nCAPFIRST = re.compile(r\"^[%s]*?([A-Za-z])\" % PUNCT)\nSMALL_FIRST = re.compile(r\"^([%s]*)(%s)\\b\" % (PUNCT, SMALL), re.I)\nSMALL_LAST = re.compile(r\"\\b(%s)[%s]?$\" % (SMALL, PUNCT), re.I)\nSUBPHRASE = re.compile(r\"([:.;?!][ ])(%s)\" % SMALL)\nAPOS_SECOND = re.compile(r\"^[dol]{1}['‘]{1}[a-z]+$\", re.I)\nALL_CAPS = re.compile(r\"^[A-Z\\s%s]+$\" % PUNCT)\nUC_INITIALS = re.compile(r\"^(?:[A-Z]{1}\\.{1}|[A-Z]{1}\\.{1}[A-Z]{1})+$\")\nMAC_MC = re.compile(r\"^([Mm]a?c)(\\w+)\")\n\n\ndef titlecase(text):\n\n    \"\"\"\n    Titlecases input text\n\n    This filter changes all words to Title Caps, and attempts to be clever\n    about *un*capitalizing SMALL words like a/an/the in the input.\n\n    The list of \"SMALL words\" which are not capped comes from\n    the New York Times Manual of Style, plus 'vs' and 'v'.\n\n    \"\"\"\n\n    lines = re.split(\"[\\r\\n]+\", text)\n    processed = []\n    for line in lines:\n        all_caps = ALL_CAPS.match(line)\n        words = re.split(\"[\\t ]\", line)\n        tc_line = []\n        for word in words:\n            if all_caps:\n                if UC_INITIALS.match(word):\n                    tc_line.append(word)\n                    continue\n                else:\n                    word = word.lower()\n\n            if APOS_SECOND.match(word):\n                word = word.replace(word[0], word[0].upper())\n                word = word.replace(word[2], word[2].upper())\n                tc_line.append(word)\n                continue\n            if INLINE_PERIOD.search(word) or UC_ELSEWHERE.match(word):\n                tc_line.append(word)\n                continue\n            if SMALL_WORDS.match(word):\n                tc_line.append(word.lower())\n                continue\n\n            match = MAC_MC.match(word)\n            if match:\n                tc_line.append(\n                    \"%s%s\" % (match.group(1).capitalize(), match.group(2).capitalize())\n                )\n                continue\n\n            hyphenated = []\n            for item in word.split(\"-\"):\n                hyphenated.append(CAPFIRST.sub(lambda m: m.group(0).upper(), item))\n            tc_line.append(\"-\".join(hyphenated))\n\n        result = \" \".join(tc_line)\n\n        result = SMALL_FIRST.sub(\n            lambda m: \"%s%s\" % (m.group(1), m.group(2).capitalize()), result\n        )\n\n        result = SMALL_LAST.sub(lambda m: m.group(0).capitalize(), result)\n\n        result = SUBPHRASE.sub(\n            lambda m: \"%s%s\" % (m.group(1), m.group(2).capitalize()), result\n        )\n\n        processed.append(result)\n\n    return \"\\n\".join(processed)\n\n\ndef titlecase_plus(text):\n    \"\"\"The titlecase module assumes words in all UPPERCASE should be ignored.\n  This works for words like HTML, FYI, ID, etc., but not generally. Just work\n  around for now by going to .lower first. Then, replace any well known\n  \"always\" uppercase\"\"\"\n    text = titlecase(text.lower())\n\n    def upcase(m):\n        return m.group().upper()\n\n    return always_uppercase_re.sub(upcase, text)\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = titlecase_plus(clipboard)\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/change-case/uppercase.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Uppercase\n# @raycast.mode inline\n# @raycast.packageName Change Case\n\n# Optional parameters:\n# @raycast.icon ./images/uppercase-light.png\n# @raycast.iconDark ./images/uppercase-dark.png\n\n# Documentation:\n# @raycast.author Robert Cooper\n# @raycast.authorURL https://github.com/robertcoopercode\n# @raycast.description Change to clipboard text to uppercase\n\nimport subprocess\n\ndef getClipboardData():\n    p = subprocess.Popen([\"pbpaste\"], stdout=subprocess.PIPE)\n    data = p.stdout.read()\n    return tryDecode(data)\n\ndef setClipboardData(data):\n    p = subprocess.Popen([\"pbcopy\"], stdin=subprocess.PIPE)\n    p.stdin.write(tryEncode(data))\n    p.stdin.close()\n\ndef tryDecode(s):\n    try:\n        return s.decode('utf-8')\n    except:\n        return s\n\ndef tryEncode(s):\n    try:\n        return s.encode('utf-8')\n    except:\n        return s\n\nclipboard = str(getClipboardData())\nresult = clipboard.upper()\nsetClipboardData(result)\nprint(result)\n"
  },
  {
    "path": "commands/conversions/clipboard-ocr.sh",
    "content": "#!/bin/bash\n\n# Dependency: `brew install pngpaste tesseract`\n# pngpaste required to grab image from clipboard\n# tesseract required to OCR\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title OCR Image\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Clipboard\n\n# Documentation:\n# @raycast.description OCR Image from Clipboard\n# @raycast.author xxchan\n# @raycast.authorURL https://github.com/xxchan\n\n# credit to @laixintao https://www.kawabangga.com/posts/4876\n\npngpaste - | tesseract stdin stdout\n"
  },
  {
    "path": "commands/conversions/clipboard-to-markdown.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Clipboard to Markdown\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 📋\n// @raycast.packageName Conversions\n\n// Documentation:\n// @raycast.description Automatically take the content found in the clipboard and turn it into Markdown\n// @raycast.author Alessandra Pereyra\n// @raycast.authorURL https://github.com/alessandrapereyra\n\n// Based on the code from\n// https://github.com/raycast/script-commands/blob/master/commands/conversions/create-markdown-table.js\n\nconst child_process = require(\"child_process\");\n\nfunction pbpaste() {\n  return child_process.execSync(\"pbpaste\").toString();\n}\n\nfunction pbcopy(data) {\n  return new Promise(function (resolve, reject) {\n    const child = child_process.spawn(\"pbcopy\");\n\n    child.on(\"error\", function (err) {\n      reject(err);\n    });\n\n    child.on(\"close\", function (err) {\n      resolve(data);\n    });\n\n    child.stdin.write(data);\n    child.stdin.end();\n  });\n}\n\nfunction processLine(content) {\n  if (\n    content.startsWith(\"* \") ||\n    content.startsWith(\"- \") ||\n    content.startsWith(\"+ \")\n  ) {\n    return \"* \" + processContent(content.substring(2));\n  }\n  return processContent(content);\n}\n\nfunction processLines(content) {\n  const lines = content.split(\"\\n\");\n  const markdownLines = lines.map((line) => {\n    return processLine(line);\n  });\n  return markdownLines.join(\"\\n\");\n}\n\nfunction processImageURL(content) {\n  return `![Image](${content})`;\n}\n\nfunction processURL(content) {\n  return `[${content}](${content})`;\n}\n\nfunction processText(content) {\n  return content;\n}\n\nfunction processContent(content) {\n  if (content.startsWith(\"http\")) {\n    if (content.match(/\\.(jpeg|jpg|gif|png|bmp|tiff)$/) != null) {\n      return processImageURL(content);\n    } else {\n      return processURL(content);\n    }\n  } else {\n    return processText(content);\n  }\n}\n\nfunction processStoredContent(content) {\n  if (content.includes(\"\\n\")) {\n    return processLines(content);\n  } else {\n    return processContent(content);\n  }\n}\n\nconst storedClipboardContent = pbpaste();\n\nlet markdown = processStoredContent(storedClipboardContent);\n\npbcopy(markdown);\n"
  },
  {
    "path": "commands/conversions/color-conversion.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Color Conversion\n# @raycast.mode fullOutput\n# @raycast.packageName Conversions\n\n# Optional parameters:\n# @raycast.icon 🎨\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Color (e.g. #FFEEFF | RGB(..) | RGBA(..))\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"New format (e.g. RGB | RGBA | HEX)\" }\n\n# Documentation:\n# @raycast.description Convert color formats (e.g. #FFEEFF -> rgba(255,238,255,1)\n# @raycast.author quelhasu\n# @raycast.authorURL https://github.com/quelhasu\n\nfunction rgbToHex() {\n  RGB=$(echo \"$1\" | awk -F '[()]' '{print $2}')\n  IFS=,\n  set $RGB\n  R=$1\n  G=$2\n  B=$3\n  printf \"%02x%02x%02x\" \"$R\" \"$G\" \"$B\"\n}\n\ncolor=$(echo \"$1\" | tr '[:upper:]' '[:lower:]')\nto_format=$(echo \"$2\" | tr '[:upper:]' '[:lower:]')\n\nif [ \"${color:0:1}\" = \"#\" ]; then\n  hex=$(echo \"${color:1:6}\")\nelif [ \"${color:0:4}\" = \"rgba\" ] || [ \"${color:0:3}\" = \"rgb\" ]; then\n  hex=$(rgbToHex $color)\nelse\n  echo \"Color format unknown\"\nfi\n\ncase $to_format in\n\nrgb)\n  transformed_color=$(printf \"rgb(%d,%d,%d)\" 0x${hex:0:2} 0x${hex:2:2} 0x${hex:4:2})\n  ;;\n\nrgba)\n  transformed_color=$(printf \"rgba(%d,%d,%d,1)\" 0x${hex:0:2} 0x${hex:2:2} 0x${hex:4:2})\n  ;;\n\nhex)\n  transformed_color=$(echo \"#${hex}\")\n  ;;\n\n*)\n  echo \"Use correct format {HEX|RGBA|RGB}\"\n  ;;\nesac\n\nif [ \"${transformed_color}\" ]; then\n  echo $transformed_color | pbcopy\n  echo \"Color ${color} -> ${transformed_color}\"\nfi\n"
  },
  {
    "path": "commands/conversions/column-to-comma.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires gnu-sed (also known as gsed) (https://formulae.brew.sh/formula/gnu-sed)\n# Install with Homebrew: `brew install gnu-sed`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Column to Comma\n# @raycast.description Converts column to comma separated list.\n# @raycast.mode silent\n# @raycast.packageName Conversions\n\n# Optional parameters:\n# @raycast.icon 🗂\n\nif ! command -v gsed &> /dev/null; then\n\techo \"gsed command is required (https://formulae.brew.sh/formula/gnu-sed).\";\n\texit 1;\nfi\n\nclipboard=$(pbpaste)\n\necho \"$clipboard\" | gsed ':a;N;$!ba;$s/\\n/,/g' | pbcopy\n"
  },
  {
    "path": "commands/conversions/create-gif-from-video.py",
    "content": "#!/usr/bin/env python3\n\n# Dependency: This script requires `gifski` to be installed: https://gif.ski/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create GIF from video\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📹\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Source File Path\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"FPS (Default: 20)\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Width (Default 600)\", \"optional\": true }\n# @raycast.packageName Conversions\n\n# Documentation:\n# @raycast.description Create a GIF from video, by default it takes the last screen record video\n# @raycast.author Quentin Eude\n# @raycast.authorURL https://github.com/qeude\n\nimport mimetypes\nimport os\nimport subprocess\nimport sys\n\nfrom datetime import datetime\nfrom glob import glob\nfrom pathlib import Path\nfrom shutil import which\n\nif which(\"gifski\") is None:\n    print(\"gifski is required (https://gif.ski/).\")\n    exit(1)\n\nif which(\"ffmpeg\") is None:\n    print(\"ffmpeg is required (https://www.ffmpeg.org/).\")\n    exit(1)\n\nbase_directory=f\"{os.environ['HOME']}/Desktop\"\n\ndefault_gif_filename=f\"generated_gif_{datetime.now().astimezone().isoformat()}.gif\"\n\ndef is_video_file(file_path):\n    return mimetypes.guess_type(file_path)[0].startswith('video')\n\ndef get_last_video_file_path():\n    files = [x for x in glob(f\"{base_directory}/**\") if is_video_file(os.path.abspath(x))]\n    return os.path.abspath(max(files, key=os.path.getctime))\n\ndef get_default_destination_file_path(from_file_path):\n    destination_directory_path = os.path.abspath(os.path.join(from_file_path, os.pardir))\n    return os.path.join(destination_directory_path, default_gif_filename)\n\ndef safe_get(array, index):\n    try:\n        return array[index]\n    except IndexError:\n        return None\n\ndef handle_error(stderr):\n    if stderr:\n        print(stderr)\n        exit(1)\n\nfrom_file_path=safe_get(sys.argv, 1) or get_last_video_file_path()\n\nif not from_file_path:\n    print(\"No video file have been found at the specified path.\")\n    exit(1)\n\nif os.path.isdir(from_file_path) or not is_video_file(from_file_path):\n    print(\"Source file should be a valid video file.\")\n    exit(1)\n\nframe_rate=safe_get(sys.argv, 2) or 20\nwidth=safe_get(sys.argv, 3) or 600\nto_file_path=get_default_destination_file_path(from_file_path)\n\ntry:\n    int_width = int(width)\nexcept Exception as e:\n    print(f\"Width should be a valid integer between 1 and 5120.\")\n    exit(1)\n\nif int_width > 5120 or int_width < 1:\n    print(f\"Width should be a valid integer between 1 and 5120.\")\n    exit(1)\n\ntry:\n    int_frame_rate = int(frame_rate)\nexcept Exception as e:\n    print(f\"Frame rate should be valid integer between 1 and 60.\")\n    exit(1)\n\nif int_frame_rate <= 60 and int_frame_rate >= 1:\n    mp4_filename=f\".{os.path.splitext(os.path.basename(from_file_path))[0]}_{datetime.now().astimezone().isoformat()}.mp4\"\n    mp4_file_path=os.path.join(os.path.dirname(from_file_path), mp4_filename)\n    cmd = [\"ffmpeg\", \"-y\", \"-loglevel\", \"panic\", \"-err_detect\", \"aggressive\", \"-fflags\", \"discardcorrupt\", \"-i\", from_file_path, \"-c:v\", \"libx264\", \"-preset\", \"slow\", \"-crf\", \"18\", \"-c:a\", \"copy\", mp4_file_path]\n    stderr_str = subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE).stderr\n    handle_error(stderr_str)\n    cmd = [\"gifski\", \"--repeat\", \"0\", \"-W\", str(int_width), \"--fps\", str(int_frame_rate), \"-o\", to_file_path, mp4_file_path]\n    stderr_str = subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE).stderr\n    handle_error(stderr_str)\n    os.remove(mp4_file_path)\n    subprocess.run(\"pbcopy\", universal_newlines=True, input=to_file_path)\n    print(\"GIF successfully generated 🎉\")\n    exit(0)\n\nprint(f\"Frame rate should be valid integer between 1 and 60.\")\nexit(0)\n"
  },
  {
    "path": "commands/conversions/create-markdown-table.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Markdown Table\n// @raycast.packageName Conversions\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 🧱\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Columns\" }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Rows\" }\n\n// Documentation:\n// @raycast.description Create a markdown table template\n// @raycast.author Ryan Nystrom\n// @raycast.authorURL https://github.com/rnystrom\n\nconst child_process = require(\"child_process\");\n\nfunction pbcopy(data) {\n  return new Promise(function (resolve, reject) {\n    const child = child_process.spawn(\"pbcopy\");\n\n    child.on(\"error\", function (err) {\n      reject(err);\n    });\n\n    child.on(\"close\", function (err) {\n      resolve(data);\n    });\n\n    child.stdin.write(data);\n    child.stdin.end();\n  });\n}\n\nlet [columns, rows] = process.argv.slice(2);\ncolumns = Math.max(parseInt(columns), 1);\nrows = Math.max(parseInt(rows), 1);\n\nlet emptyTemplate = \"   \";\nlet headerTemplate = \"---\";\nlet rowArr = Array(columns + 1).fill(\"|\");\n\nlet lines = [];\n\n// header\nlines.push(rowArr.join(emptyTemplate));\n// header spacer |---|\nlines.push(rowArr.join(headerTemplate));\n\n// rows\nfor (let i = 0; i < rows; i++) {\n  lines.push(rowArr.join(emptyTemplate));\n}\n\npbcopy(lines.join(\"\\n\"));\n"
  },
  {
    "path": "commands/conversions/epoch-to-human-date.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Convert Epoch to Human-Readable Date\n# @raycast.mode silent\n# @raycast.packageName Conversions\n#\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.needsConfirmation false\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Timestamp Epoch\"}\n#\n# Documentation:\n# @raycast.description Convert epoch to human-readable date.\n# @raycast.author Siyuan Zhang\n# @raycast.authorURL https://github.com/kastnerorz\n\nepoch=${1}\nsize=${#epoch}\nif [[ $size == \"10\" ]];\nthen\n        human=$(echo `date -r $epoch \"+%F %T\"`)\n        echo -n \"$human\" | pbcopy\nelse\n        human=$(echo `date -r $(($epoch/1000)) \"+%F %T\"`)\n        echo -n \"$human\" | pbcopy\nfi\n\necho \"Converted $epoch to $human\"\n"
  },
  {
    "path": "commands/conversions/google-docs-to-markdown.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires the google-docs-to-markdown npm package: https://github.com/Mr0grog/google-docs-to-markdown\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Convert Google Docs Rich Text HTML to Markdown\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Conversions\n# @raycast.description A script to take the HTML pastboard type filled by google docs and convert it to nicely formatted markdown\n\n# Documentation:\n# @raycast.author Michael Bianco\n# @raycast.authorURL https://github.com/iloveitaly\n\nset -euo pipefail\n\nswift - <<EOF | npx google-docs-to-markdown | pbcopy\nimport Cocoa\n\nlet type = NSPasteboard.PasteboardType.html\n\nguard let string = NSPasteboard.general.string(forType:type) else {\n  fputs(\"Could not find string data of type '\\(type)' on the system pasteboard\\n\", stderr)\n  exit(1)\n}\n\nprint(string)\nEOF\n\n"
  },
  {
    "path": "commands/conversions/hex-to-rgb.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Hex to RGB\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Convert hexadecimal color value to RGB value.\n\n# @raycast.icon 🎨\n# @raycast.mode silent\n# @raycast.packageName Conversions\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"#RRGGBB\" }\n\nhex=$1\nfirst=\"${hex:0:1}\"\n\nif [ \"#\" = \"$first\" ]; then\n\thex=\"${hex:1:6}\"\nfi\n\nhex_r=\"${hex:0:2}\"\nhex_g=\"${hex:2:2}\"\nhex_b=\"${hex:4:2}\"\n\nrgb_r=`echo $((0x${hex_r}))`\nrgb_g=`echo $((0x${hex_g}))`\nrgb_b=`echo $((0x${hex_b}))`\n\nrgb=\"rgb( $rgb_r, $rgb_g, $rgb_b )\"\n\necho $rgb | pbcopy\n\necho \"Converted #$hex to $rgb\""
  },
  {
    "path": "commands/conversions/hex-to-rgba.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Hex to RGBA\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Convert hexadecimal color value to RGBA value.\n\n# @raycast.icon 🎨\n# @raycast.mode silent\n# @raycast.packageName Conversions\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"#RRGGBB\" }\n\nhex=$1\nfirst=\"${hex:0:1}\"\n\nif [ \"#\" = \"$first\" ]; then\n\thex=\"${hex:1:6}\"\nfi\n\nhex_r=\"${hex:0:2}\"\nhex_g=\"${hex:2:2}\"\nhex_b=\"${hex:4:2}\"\n\nrgba_r=`echo $((0x${hex_r}))`\nrgba_g=`echo $((0x${hex_g}))`\nrgba_b=`echo $((0x${hex_b}))`\n\nrgba=\"rgba( $rgba_r, $rgba_g, $rgba_b, 1 )\"\n\necho $rgba | pbcopy\n\necho \"Converted #$hex to $rgba\""
  },
  {
    "path": "commands/conversions/human-date-to-epoch.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Convert Human-Readable Date To Epoch\n# @raycast.mode silent\n# @raycast.packageName Conversions\n#\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.needsConfirmation false\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Date\"}\n#\n# Documentation:\n# @raycast.description Convert human-readable date to timestamp epoch.\n# @raycast.author Siyuan Zhang\n# @raycast.authorURL https://github.com/kastnerorz\n\ndate=${1}\nepoch=$(echo `date -jRuf \"%F %T\" \"$date\" \"+%s\"`)\necho -n \"$epoch\" | pbcopy\n\necho \"Converted $date to $epoch\" \n"
  },
  {
    "path": "commands/conversions/inputs-to-markdown-link.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Simple Markdown Link Generator\n# @raycast.description Quickly and simply generate a markdown formatted link with your specified URL and title.\n# @raycast.mode silent\n# @raycast.packageName Conversions\n\n# Optional parameters:\n# @raycast.icon 🔗\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Title (default: Link)\", \"optional\": true }\n\n# Description:\n# Quickly and simply generate a markdown formatted link with your specified URL and title.\n# The generated link is copied to your clipboard for easy pasting.\n\n# Documentation:\n# @raycast.author atzzCokeK\n# @raycast.authorURL https://github.com/atzzCokeK\n\nURL=$1\nTITLE=${2:-Link}  # Use \"Link\" as default if title is not provided\n\nregex='(https?|ftp|file)://[-[:alnum:]\\+&@#/%?=~_|!:,.;]+'\n\nif [[ $URL =~ $regex ]]; then\n    echo \"[$TITLE]($URL)\" | pbcopy\n    echo \"Copied: [$TITLE]($URL)\"\nelse\n    echo \"Invalid URL: $URL\"\n    exit 1\nfi"
  },
  {
    "path": "commands/conversions/markdown-to-telegram.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Convert Markdown to Telegram Format\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔄\n# @raycast.packageName Conversions\n# @raycast.description Convert Markdown formatting to Telegram format, excluding processing inside code blocks or quotes\n\n# Documentation:\n# @raycast.author Maxim Borzov\n# @raycast.authorURL https://github.com/borzov\n\nimport re\nimport subprocess\n\n# Set environment variables and encoding\nenv_vars = {'LANG': 'en_US.UTF-8'}\nencoding = 'utf-8'\n\ndef paste():\n    \"\"\"Read text from the clipboard.\"\"\"\n    return subprocess.check_output('pbpaste', env=env_vars).decode(encoding)\n\ndef copy(text):\n    \"\"\"Write text to the clipboard.\"\"\"\n    process = subprocess.Popen('pbcopy', env=env_vars, stdin=subprocess.PIPE)\n    process.communicate(text.encode(encoding))\n\ndef convert_markdown(text):\n    \"\"\"Convert Markdown formatting to Telegram format.\"\"\"\n    lines = text.split('\\n')\n    converted_lines = []\n    in_code_block = False\n\n    for line in lines:\n        # Check if the line is a code block delimiter\n        if line.startswith('```'):\n            in_code_block = not in_code_block\n            converted_lines.append(line)\n            continue\n\n        # Skip quotes and only format if not in a code block\n        if not in_code_block and not line.startswith('>'):\n            # Format headers with emojis and bold text\n            if line.startswith('# '):\n                line = f\"⚫️ **{line[2:].strip()}**\\n\"\n            elif line.startswith('## '):\n                line = f\"◾️ **{line[3:].strip()}**\\n\"\n            elif line.startswith('### '):\n                line = f\"▪️ **{line[4:].strip()}**\\n\"\n            elif line.startswith('#### '):\n                line = f\"🔹 **{line[5:].strip()}**\\n\"\n            elif line.startswith('##### '):\n                line = f\"📌 **{line[6:].strip()}**\\n\"\n            elif line.startswith('###### '):\n                line = f\"🔰 **{line[7:].strip()}**\\n\"\n            else:\n                # Format bold text\n                line = re.sub(r'(?<!\\\\)\\*{2}(.*?)\\*{2}', r'**\\1**', line)\n                line = re.sub(r'(?<!\\\\)_{2}(.*?)_{2}', r'**\\1**', line)\n                # Format italic text\n                line = re.sub(r'(?<!\\\\|\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?![\\*_])', r'__\\1__', line)\n                line = re.sub(r'(?<!\\\\|_)_(?!_)(.+?)(?<!_)_(?![\\*_])', r'__\\1__', line)\n                # Format strikethrough text\n                line = re.sub(r'(?<!\\\\)~{2}(.*?)~{2}', r'~~\\1~~', line)\n                # Format spoilers\n                line = re.sub(r'(?<!\\\\)\\|\\|(.*?)\\|\\|', r'||\\1||', line)\n                # Format underline text\n                line = re.sub(r'(?<!\\\\)-{2}(.*?)-{2}', r'--\\1--', line)\n                # Format links\n                line = re.sub(r'(?<!\\\\)\\[(.*?)\\]\\((.*?)\\)', r'[\\1](\\2)', line)\n                # Format inline code\n                line = re.sub(r'(?<!\\\\)`(.*?)`', r'`\\1`', line)\n\n        converted_lines.append(line)\n\n    # Add empty lines between paragraphs\n    result = []\n    for i in range(len(converted_lines)):\n        result.append(converted_lines[i])\n        if i < len(converted_lines) - 1:\n            cur = converted_lines[i].strip()\n            next = converted_lines[i+1].strip()\n            if cur and next and not cur.startswith(('*', '-', '```', '|', '>')) and not next.startswith(('*', '-', '```', '|', '>')):\n                result.append('')\n\n    return '\\n'.join(result)\n\nif __name__ == \"__main__\":\n    try:\n        markdown_text = paste()\n        converted_text = convert_markdown(markdown_text)\n        copy(converted_text)\n        print(\"✅ Markdown converted and copied to clipboard\")\n    except Exception as e:\n        print(f\"❌ Error during conversion: {str(e)}\")"
  },
  {
    "path": "commands/conversions/paste-as-plain-text.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Paste and Match Style\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Conversions\n# @raycast.description A script to click the \"Paste and Match Style\" menu item, even if it's disabled\n\n# Documentation:\n# @raycast.author Michael Bianco\n# @raycast.authorURL https://github.com/iloveitaly\n\ntell application \"System Events\"\n  tell process 1 where frontmost is true\n    click menu item \"Paste and Match Style\" of menu \"Edit\" of menu bar 1\n  end tell\nend tell\n"
  },
  {
    "path": "commands/conversions/qr-code-screenshot-to-text.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Screenshot QR Code to Clipboard\n# @raycast.mode silent\n# @raycast.packageName QR Code\n#\n# Optional parameters:\n# @raycast.icon images/qrcode.icns\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Decode QR Code from screenshot to clipboard using https://qrserver.com/\n# @raycast.author Diego Lopes\n# @raycast.authorURL https://github.com/Dihgg\n\n\nif ! command -v jq &> /dev/null; then\n    echo  \"jq command is required (https://stedolan.github.io/jq/).\"\n    exit 1\nfi\n\nTEMP_DIR=$(mktemp -d)\n\nFILE=\"$TEMP_DIR/screenshot.png\"\n\nscreencapture -i \"$FILE\"\n\nif ! test -f \"$FILE\"; then\n    printf \"Please capture a QR code\"\n    exit 1\nfi\n\ncurl -s --location --request POST 'https://api.qrserver.com/v1/read-qr-code/' --form file=@\"$TEMP_DIR\"/screenshot.png >> \"$TEMP_DIR\"/qr-code.json\n\nDATA=$(jq -r '.[0].symbol[0].data' \"$TEMP_DIR/qr-code.json\")\n\nif [ \"$DATA\" == \"null\"  ]; then    \n    ERROR=$(jq .[0].symbol[0].error \"$TEMP_DIR/qr-code.json\")\n    printf \"%s\" \"$ERROR\"\n    exit 1\nfi\n\necho \"$DATA\" | pbcopy\n\nprintf \"Gathered QR Code Content to Clipboard\"\nexit 0;\n\n\n"
  },
  {
    "path": "commands/conversions/qrcode-generate.sh",
    "content": "#!/bin/bash\n\n# @raycast.title QR Code Generation\n# @raycast.description QR Code Generation\n# @raycast.author wyhaya\n# @raycast.authorURL https://github.com/wyhaya\n\n# @raycast.icon images/qrcode.png\n# @raycast.mode fullOutput\n# @raycast.packageName Conversions\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Content\" }\n\necho $1 | curl -s qrcode.show -d @-\n"
  },
  {
    "path": "commands/conversions/raw-html-to-rich-text-clipboard.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `pandoc`: https://pandoc.org/installing.html\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Convert Raw HTML to Rich Text on Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Conversions\n# @raycast.description This script will convert raw HTML on your clipboard to rich text. It requires pandoc to be installed on your system.\n\n# Documentation:\n# @raycast.author Michael Bianco\n# @raycast.authorURL https://github.com/iloveitaly\n\npbpaste | pandoc -f html -t rtf -s | pbcopy -pboard general -Prefer rtf"
  },
  {
    "path": "commands/conversions/rich-text-clipboard-to-markdown.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the `pandoc` cli to be installed: https://pandoc.org/\n# Install via homebrew: `brew install pandoc`\n\n# @raycast.title Rich Text to Markdown\n# @raycast.author Adam Zethraeus\n# @raycast.authorURL https://github.com/adam-zethraeus\n# @raycast.description Convert rich text clipboard data to GitHub Flavored Markdown using Pandoc\n#\n# @raycast.icon 📝\n#\n# @raycast.mode silent\n# @raycast.packageName Conversions\n# @raycast.schemaVersion 1\n\nif ! command -v pandoc &> /dev/null; then\n      echo \"pandoc is required (https://pandoc.org/).\";\n      exit 1;\nfi\n\nexport LC_CTYPE=UTF-8\nosascript -e 'the clipboard as «class RTF »' | perl -ne 'print chr foreach unpack(\"C*\",pack(\"H*\",substr($_,11,-3)))' | pandoc --from=rtf --to=gfm | pbcopy\n"
  },
  {
    "path": "commands/conversions/space-fixer.sh",
    "content": "#!/usr/bin/env bash\n\n# Add spaces between Chinese and English, number or symbols.\n#\n# Dependency: This script requires the `https://www.npmjs.com/package/pangu` package.\n# Install it via `pip install pangu` or `pnpm install -g pangu` or `npm install -g pangu`.\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Space Fixer\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📝\n# @raycast.packageName Conversions\n\n# Documentation:\n# @raycast.description Add spaces between Chinese and English, number or symbols.\n# @raycast.author RealTong\n# @raycast.authorURL https://raycast.com/RealTong\n\n# pip, pnp paths\nexport PATH=\"$HOME/.pyenv/shims:$HOME/Library/pnpm:$PATH\"\n# nvm paths\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] && \\. \"$NVM_DIR/nvm.sh\"\n# npm paths\nNPM_BIN_PATH=$(which npm)\nif [[ -n \"$NPM_BIN_PATH\" ]]; then\n    NPM_DIR=$(dirname \"$NPM_BIN_PATH\")\n    export PATH=\"$NPM_DIR:$PATH\"\nfi\n\npangu_path=$(which pangu)\n\nif [ -z \"$pangu_path\" ]; then\n  echo \"Error: pangu not found in PATH\"\n  exit 1\nfi\n\ninput=$(pbpaste)\n\nif [ -z \"$input\" ]; then\n  echo \"Input is empty\"\n  exit 1\nfi\n\n# Call pangu ： pangu -t \"text\"\n\noutput=$($pangu_path -t \"$input\")\nif [ -z \"$output\" ]; then\n  echo \"Output is empty\"\n  exit 1\nfi\n\necho $output | pbcopy\necho \"Fixed Chinese text has been copied to the clipboard\"\n"
  },
  {
    "path": "commands/conversions/strikethrough.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Strikethrough Text\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔠\n# @raycast.packageName Conversions\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text\", \"optional\": true}\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Converts given text (or clipboard if no argument) to t̶e̶x̶t̶\n\nLANG=en_US.UTF-8\n\nif [ \"$1\" = \"\" ]; then\n    input=$(pbpaste)\nelse\n    input=$1\nfi\n\noutput=$(python3 -c \"print('\\u0336'.join('$input') + '\\u0336')\")\necho $output | tee >(pbcopy)\n"
  },
  {
    "path": "commands/conversions/trim-newlines-tabs.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Trim Newlines and Tabs\n# @raycast.mode fullOutput\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Trim newlines and tabs from clipboard content.\n# @raycast.icon ✂️\n# @raycast.packageName Conversions\n\nfile=$( mktemp )\npbpaste > $file\n\noutput=$( tr '\\n' ' ' < $file )\necho \"$output\" > $file\n\noutput=$( tr '\\r' ' ' < $file )\necho \"$output\" > $file\n\noutput=$( tr '\\t' ' ' < $file )\nrm $file\n\necho -n $output\n"
  },
  {
    "path": "commands/conversions/unicode-superscript.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Unicode Superscript\n# @raycast.author Adam Zethraeus\n# @raycast.authorURL https://github.com/adam-zethraeus\n# @raycast.description Convert clipboards text to fake unicode superscript\n#\n# @raycast.icon 🦸‍♀️\n#\n# @raycast.mode silent\n# @raycast.packageName Conversion\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text to superscript\", \"optional\": false, \"percentEncoded\": true}\n\nJXA=$(cat <<-END\nfunction superscript(text) {\n  var map = {\"0\":\"⁰\",\"1\":\"¹\",\"2\":\"²\",\"3\":\"³\",\"4\":\"⁴\",\"5\":\"⁵\",\"6\":\"⁶\",\"7\":\"⁷\",\"8\":\"⁸\",\"9\":\"⁹\",\"a\":\"ᵃ\",\"b\":\"ᵇ\",\"c\":\"ᶜ\",\"d\":\"ᵈ\",\"e\":\"ᵉ\",\"f\":\"ᶠ\",\"g\":\"ᵍ\",\"h\":\"ʰ\",\"i\":\"ᶦ\",\"j\":\"ʲ\",\"k\":\"ᵏ\",\"l\":\"ˡ\",\"m\":\"ᵐ\",\"n\":\"ⁿ\",\"o\":\"ᵒ\",\"p\":\"ᵖ\",\"q\":\"ᑫ\",\"r\":\"ʳ\",\"s\":\"ˢ\",\"t\":\"ᵗ\",\"u\":\"ᵘ\",\"v\":\"ᵛ\",\"w\":\"ʷ\",\"x\":\"ˣ\",\"y\":\"ʸ\",\"z\":\"ᶻ\",\"A\":\"ᴬ\",\"B\":\"ᴮ\",\"C\":\"ᶜ\",\"D\":\"ᴰ\",\"E\":\"ᴱ\",\"F\":\"ᶠ\",\"G\":\"ᴳ\",\"H\":\"ᴴ\",\"I\":\"ᴵ\",\"J\":\"ᴶ\",\"K\":\"ᴷ\",\"L\":\"ᴸ\",\"M\":\"ᴹ\",\"N\":\"ᴺ\",\"O\":\"ᴼ\",\"P\":\"ᴾ\",\"Q\":\"Q\",\"R\":\"ᴿ\",\"S\":\"ˢ\",\"T\":\"ᵀ\",\"U\":\"ᵁ\",\"V\":\"ⱽ\",\"W\":\"ᵂ\",\"X\":\"ˣ\",\"Y\":\"ʸ\",\"Z\":\"ᶻ\",\"+\":\"⁺\",\"-\":\"⁻\",\"=\":\"⁼\",\"(\":\"⁽\",\")\":\"⁾\", \"q\":\"ᵠ\", \"Q\":\"ᵠ\", \"?\":\"ˀ\", \"!\":\"ᵎ\"};\n  var charArray = text.split(\"\");\n  for(var i = 0; i < charArray.length; i++) {\n    if( map[charArray[i].toLowerCase()] ) {\n      charArray[i] = map[charArray[i]];\n    }\n  }\n  text = charArray.join(\"\");\n  return text;\n}\nvar app = Application('System Events');  \napp.includeStandardAdditions = true;  \nvar input = decodeURIComponent(\"$1\");\nvar superscriptOutput = superscript(input);\napp.setTheClipboardTo(superscriptOutput);\nsuperscriptOutput + \" copied to clipboard\";\nEND\n)\n\necho $JXA | osascript -l JavaScript\n"
  },
  {
    "path": "commands/conversions/unix-time-reader.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Unix Time Reader From Clipboard\n# @raycast.mode compact\n# @raycast.packageName Conversions\n#\n# @raycast.icon 🕰\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Display Human-Readable Date from Unix Time in Clipboard\n# @raycast.author Francis Feng\n# @raycast.authorURL https://github.com/francisfeng\n\nunixTime=$(pbpaste)\nsize=${#unixTime}\n\nif [[ $size == \"10\" ]]\nthen\n        readable=$(echo `date -r $unixTime \"+%F %T\"`)\nelif [[ $size == \"13\" ]]\nthen\n        readable=$(echo `date -r $(($unixTime/1000)) \"+%F %T\"`)\nelse\n\techo \"Unix Time is not found\"\n\texit 1\nfi\n\necho \"$unixTime -> $readable\""
  },
  {
    "path": "commands/conversions/vaporwave-text.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Vaporwave Text\n# @raycast.author Adam Zethraeus\n# @raycast.authorURL https://github.com/adam-zethraeus\n# @raycast.description Convert clipboard text to ｖａｐｏｒｗａｖｅ\n#\n# @raycast.icon 🌇\n#\n# @raycast.mode silent\n# @raycast.packageName Conversion\n# @raycast.schemaVersion 1\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text to ｖａｐｏｒｗａｖｅ\", \"optional\": false, \"percentEncoded\": true}\n\nJXA=$(cat <<-END\nfunction vaporwave(text) {\n    var vaporwaveMap = {\n        ' ': '　',\n        '!': '！',\n        '\\\\'': '\\\\'',\n        '#': '＃',\n        '$': '＄',\n        '%': '％',\n        '&': '＆',\n        '\\\\\"': '\\\\\"',\n        '(': '（',\n        ')': '）',\n        '*': '＊',\n        '+': '＋',\n        '\\\\,': '，',\n        '-': '－',\n        '.': '．',\n        '/': '／',\n        '0': '０',\n        '1': '１',\n        '2': '２',\n        '3': '３',\n        '4': '４',\n        '5': '５',\n        '6': '６',\n        '7': '７',\n        '8': '８',\n        '9': '９',\n        ':': '：',\n        ';': '；',\n        '<': '<',\n        '=': '＝',\n        '>': '>',\n        '?': '？',\n        '@': '＠',\n        'A': 'Ａ',\n        'B': 'Ｂ',\n        'C': 'Ｃ',\n        'D': 'Ｄ',\n        'E': 'Ｅ',\n        'F': 'Ｆ',\n        'G': 'Ｇ',\n        'H': 'Ｈ',\n        'I': 'Ｉ',\n        'J': 'Ｊ',\n        'K': 'Ｋ',\n        'L': 'Ｌ',\n        'M': 'Ｍ',\n        'N': 'Ｎ',\n        'O': 'Ｏ',\n        'P': 'Ｐ',\n        'Q': 'Ｑ',\n        'R': 'Ｒ',\n        'S': 'Ｓ',\n        'T': 'Ｔ',\n        'U': 'Ｕ',\n        'V': 'Ｖ',\n        'W': 'Ｗ',\n        'X': 'Ｘ',\n        'Y': 'Ｙ',\n        'Z': 'Ｚ',\n        '[': '[',\n        '\\\\\\\\': '\\\\\\\\',\n        ']': ']',\n        '^': '^',\n        '_': '_',\n        '\\`': '\\`',\n        'a': 'ａ',\n        'b': 'ｂ',\n        'c': 'ｃ',\n        'd': 'ｄ',\n        'e': 'ｅ',\n        'f': 'ｆ',\n        'g': 'ｇ',\n        'h': 'ｈ',\n        'i': 'ｉ',\n        'j': 'ｊ',\n        'k': 'ｋ',\n        'l': 'ｌ',\n        'm': 'ｍ',\n        'n': 'ｎ',\n        'o': 'ｏ',\n        'p': 'ｐ',\n        'q': 'ｑ',\n        'r': 'ｒ',\n        's': 'ｓ',\n        't': 'ｔ',\n        'u': 'ｕ',\n        'v': 'ｖ',\n        'w': 'ｗ',\n        'x': 'ｘ',\n        'y': 'ｙ',\n        'z': 'ｚ',\n        '{': '{',\n        '|': '|',\n        '}': '}',\n        '~': '~'\n    };\n\n    return text.split('').map((c) => {\n        vc = vaporwaveMap[c];\n        return vc || c;\n    }).join('');\n}\nvar app = Application('System Events');\napp.includeStandardAdditions = true;\nvar input = decodeURIComponent(\"$1\");\nvar vaporwaveOutput = vaporwave(input);\napp.setTheClipboardTo(vaporwaveOutput);\nvaporwaveOutput + ' copied to clipboard';\n\nEND\n)\n\necho $JXA | osascript -l JavaScript\n"
  },
  {
    "path": "commands/conversions/what-day-is.py",
    "content": "#!/usr/bin/env python3\n\n# Parameters\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title What Day Is...\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Conversions\n# @raycast.icon 📅\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Date (YYYY-MM-DD)\" }\n\n\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Return the day of the week on which a particular date falls.\n\nimport sys\nfrom datetime import datetime as dt\n\nprint(dt.fromisoformat(sys.argv[1]).strftime(\"%A\"))\n"
  },
  {
    "path": "commands/conversions/zalgo-text.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Zalgo Text\n// @raycast.mode silent\n// @raycast.author Adam Zethraeus\n// @raycast.authorURL https://github.com/adam-zethraeus\n// @raycast.packageName Conversions\n// @raycast.icon 👹\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text to Z̶̶͚̯͗a̩̞͜͜l̫͕ͬͨ̿g͈̫͂ͤ͆͢o̠͚̞ͥ\" }\n// @raycast.argument2 { \"type\": \"text\", \"optional\": true, \"placeholder\": \"Intensity=5\" }\n\n// Documentation:\n// @raycast.description Converts text to z̫̫̐a̳ͩl̓͂̀ͅg͔̚o̷̦̣͢ t̳͆ḛ̊͟ẍ̮̝́t̵̔ͯ͝\n\nimport Cocoa\n\n// zalgo function credit mattt @ https://gist.github.com/mattt/b46ab5027f1ee6ab1a45583a41240033\nfunc zalgo(_ string: String, intensity: Int = 5) -> String {\n    let combiningDiacriticMarks = 0x0300...0x036f\n    let latinAlphabetUppercase = 0x0041...0x005a\n    let latinAlphabetLowercase = 0x0061...0x007a\n \n    var output: [UnicodeScalar] = []\n    for scalar in string.unicodeScalars {\n        output.append(scalar)\n        guard (latinAlphabetUppercase).contains(numericCast(scalar.value)) ||\n              (latinAlphabetLowercase).contains(numericCast(scalar.value))\n        else {\n            continue\n        }\n\n        for _ in 0...(Int.random(in: 1...intensity)) {\n            let randomScalarValue = Int.random(in: combiningDiacriticMarks)\n            output.append(Unicode.Scalar(randomScalarValue)!)\n        }\n    }\n\n    return String(String.UnicodeScalarView(output))\n}\n\nNSPasteboard.general.clearContents()\nlet text = CommandLine.arguments[1]\nlet intensityString = CommandLine.arguments[2]\nlet intensity = Int(intensityString) ?? 5\nlet zalgoText = zalgo(text, intensity: intensity)\nNSPasteboard.general.setString(zalgoText, forType: .string)\nprint(\"\\(zalgoText) copied to clipboard\")\n"
  },
  {
    "path": "commands/culture/prayer-summary.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set your city and country below.\n# Optionally, adjust the calculation method to fit your location.\n#\n# API: https://aladhan.com/prayer-times-api\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Prayer Summary\n# @raycast.mode inline\n# @raycast.refreshTime 2m\n\n# Optional parameters:\n# @raycast.icon 🕌\n# @raycast.packageName Culture\n\n# Documentation:\n# @raycast.description Get the current and next prayer times for a specific city and country.\n# @raycast.author Muneeb Ajaz\n# @raycast.authorURL https://github.com/mianmuneebajaz\n\n\n# Configuration\n\n# Set your city and country below:\n# 1. Replace CITY with your city name (e.g., \"London\")\n# 2. Replace COUNTRY with your country name (e.g., \"United Kingdom\")\nCITY=\"\"\nCOUNTRY=\"\"\n\n# Calculation method (default: 3 for Muslim World League - MWL)\n# Common methods:\n# 1 - University of Islamic Sciences, Karachi\n# 2 - Islamic Society of North America (ISNA)\n# 3 - Muslim World League (MWL)\n# 4 - Umm Al-Qura University, Makkah\n# 5 - Egyptian General Authority of Survey\n# See https://aladhan.com/prayer-times-api for all methods\nMETHOD=\"3\"\n\n\n# Main program\n\nif ! command -v jq &> /dev/null; then\n  echo \"jq is required (https://stedolan.github.io/jq/)\"\n  exit 1\nfi\n\nif [ -z \"$CITY\" ] || [ -z \"$COUNTRY\" ]; then\n  echo \"City and Country are required\"\n  exit 1\nfi\n\nDATA=$(curl -s -L \"http://api.aladhan.com/v1/timingsByCity?city=${CITY}&country=${COUNTRY}&method=${METHOD}\")\n\nif [ -z \"$DATA\" ]; then\n  echo \"Unable to fetch prayer times\"\n  exit 1\nfi\n\nget_time() {\n  echo \"$DATA\" | jq -r \".data.timings.$1\"\n}\n\nFAJR=$(get_time \"Fajr\")\nDHUHR=$(get_time \"Dhuhr\")\nASR=$(get_time \"Asr\")\nMAGHRIB=$(get_time \"Maghrib\")\nISHA=$(get_time \"Isha\")\n\n# Convert 24h to 12h format\nto_ampm() {\n  date -j -f \"%H:%M\" \"$1\" \"+%I:%M %p\" 2>/dev/null\n}\n\nPRAYER_NAMES=(\"Fajr\" \"Dhuhr\" \"Asr\" \"Maghrib\" \"Isha\")\nPRAYER_TIMES=(\"$FAJR\" \"$DHUHR\" \"$ASR\" \"$MAGHRIB\" \"$ISHA\")\n\nepoch_today() {\n  date -j -f \"%Y-%m-%d %H:%M\" \"$(date +%Y-%m-%d) $1\" \"+%s\"\n}\n\nNOW=$(date +%s)\n\nCURRENT=\"None (before Fajr)\"\nNEXT=\"\"\nNEXT_TIME=\"\"\nNEXT_EPOCH=0\nLAST=\"\"\n\nfor i in \"${!PRAYER_NAMES[@]}\"; do\n  name=\"${PRAYER_NAMES[$i]}\"\n  time=\"${PRAYER_TIMES[$i]}\"\n  ep=$(epoch_today \"$time\")\n\n  if [ \"$ep\" -le \"$NOW\" ]; then\n    LAST=\"$name\"\n  elif [ -z \"$NEXT\" ]; then\n    NEXT=\"$name\"\n    NEXT_TIME=\"$time\"\n    NEXT_EPOCH=\"$ep\"\n  fi\ndone\n\nif [ -n \"$LAST\" ]; then\n  CURRENT=\"$LAST\"\nfi\n\n# After Isha, next prayer is tomorrow's Fajr\nif [ -z \"$NEXT\" ]; then\n  NEXT=\"Fajr (tomorrow)\"\n  NEXT_TIME=\"$FAJR\"\n  NEXT_EPOCH=$(($(epoch_today \"$FAJR\") + 86400))\nfi\n\nDIFF=$((NEXT_EPOCH - NOW))\nH=$((DIFF / 3600))\nM=$(((DIFF % 3600) / 60))\nCOUNTDOWN=\"${H}h ${M}m\"\n\nNEXT_AM=$(to_ampm \"$NEXT_TIME\")\n\necho \"Current: $CURRENT | Next: $NEXT at $NEXT_AM in $COUNTDOWN\"\n"
  },
  {
    "path": "commands/culture/prayer-times.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function).\n#\n# Homebrew: https://brew.sh/\n# Coreutils: https://formulae.brew.sh/formula/coreutils\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Prayer Times\n# @raycast.mode inline\n# @raycast.packageName Culture\n\n# Optional parameters:\n# @raycast.icon 🕌\n\n# Documentation\n# @raycast.author Emircan Erkul\n# @raycast.authorURL https://emircanerkul.com\n# @raycast.description Prayer Times grabbed from the aladhan.com.\n\ndata=$(curl -s -L 'http://api.aladhan.com/v1/timingsByCity?city=derince&country=turkey&method=13')\n\nimsak=$(echo \"$data\" | jq --raw-output '.data.timings.Imsak')\ngunes=$(echo $data | jq --raw-output '.data.timings.Sunrise')\nogle=$(echo \"$data\" | jq --raw-output '.data.timings.Dhuhr')\nikindi=$(echo \"$data\" | jq --raw-output '.data.timings.Asr')\naksam=$(echo \"$data\" | jq --raw-output '.data.timings.Maghrib')\nyatsi=$(echo \"$data\" | jq --raw-output '.data.timings.Isha')\n\nNOW=$(gdate +%s)\n\nif [ $(($(gdate -d \"$imsak\" +%s) - $NOW)) -gt 0 ]; then\n    REMANINING=$(($(gdate -d \"$imsak\" +%s) - $NOW))\nelif [ $(($(gdate -d \"$gunes\" +%s) - $NOW)) -gt 0 ]; then\n    REMANINING=$(($(gdate -d \"$gunes\" +%s) - $NOW))\nelif [ $(($(gdate -d \"$ogle\" +%s) - $NOW)) -gt 0 ]; then\n    REMANINING=$(($(gdate -d \"$ogle\" +%s) - $NOW))\nelif [ $(($(gdate -d \"$ikindi\" +%s) - $NOW)) -gt 0 ]; then\n    REMANINING=$(($(gdate -d \"$ikindi\" +%s) - $NOW))\nelif [ $(($(gdate -d \"$aksam\" +%s) - $NOW)) -gt 0 ]; then\n    REMANINING=$(($(gdate -d \"$aksam\" +%s) - $NOW))\nelse\n    REMANINING=$(($(gdate -d \"$yatsi\" +%s) - $NOW))\nfi\n\nif [ $REMANINING -gt 0 ]; then\n    if [ $(($REMANINING / 3600)) -gt 0 ]; then\n        REMANINING=\"$(($REMANINING / 3600))h $(($REMANINING / 60 % 60))m $(($REMANINING % 60))s\"\n    elif [ $(($REMANINING / 60 % 60)) -gt 0 ]; then\n        REMANINING=\"$(($REMANINING / 60 % 60))m $(($REMANINING % 60))s\"\n    else\n        REMANINING=\"$(($REMANINING % 60))s\"\n    fi\n    REMANINING=\"☾ $REMANINING ☽\"\nelse\n    REMANINING=\"\"\nfi\n\noutput=\"$REMANINING $imsak ⚙︎ $gunes ⚙︎ $ogle ⚙︎ $ikindi ⚙︎ $aksam ⚙︎ $yatsi\"\n\necho $output\n"
  },
  {
    "path": "commands/dashboard/bitcoin-price-usd.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Bitcoin Price\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n# @raycast.packageName Dashboard\n\n# Optional parameters:\n# @raycast.author Tanguy Le Stradic\n# @raycast.authorURL https://github.com/tanguyls\n# @raycast.description Get current Bitcoin price from Coindesk.\n# @raycast.icon images/bitcoin-logo.png\n\nprice=$(curl -s http://api.coindesk.com/v1/bpi/currentprice.json | python -c \"import json, sys; print(json.load(sys.stdin)['bpi']['USD']['rate'])\")\n\necho \"\\$${price}\"\n"
  },
  {
    "path": "commands/dashboard/countdowns/countdown-to-christmas.sh",
    "content": "#!/bin/bash\n\n# You may need to install coreutils via homebrew to make this script work (gdate function).\n#\n# Homebrew: https://brew.sh/\n# Coreutils: https://formulae.brew.sh/formula/coreutils\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Countdown to Christmas\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon 🎅🏻\n\n# Documentation:\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n# @raycast.description See how many days until Christmas.\n\nXMAS=`gdate -d \"Dec 25\" +%j`\nTODAY=`gdate +%j`\nDAYS=$(($XMAS - $TODAY))\nif [[  $DAYS > 0 ]]; then\n        echo \"There are $DAYS days left until Xmas.\"\nelse\n        echo \"Merry Xmas and Happy New year\\!\"\nfi\n"
  },
  {
    "path": "commands/dashboard/countdowns/countdown-to-date.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script?\n#\n# It's a template which needs further setup. Duplicate the file, \n# remove `.template.` from the filename and set the date you want.\n# Optionally, adjust the raycast.title and raycast.icon according to your needs.\n# You may need to install coreutils via homebrew to make this script work (gdate function).\n#\n# Homebrew: https://brew.sh/\n# Coreutils: https://formulae.brew.sh/formula/coreutils\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Countdown to Date\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 10m\n\n# Optional parameters:\n# @raycast.icon ⏱\n\n# Documentation:\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n# @raycast.description See how many days/hours until a specific date.\n\n# Configuration\n\n# 1. Set the date you want by replacing yyyy-mm-dd in TIMESTAMP_EVENT (e.g. 2022-12-31)\n# 2. Optionaly, you can set the time by editing T00:00:00+00:00\n# 3. Write the message you want to display when the countdown is at 0 (\"Your message!\" line 46)\n\nTIMESTAMP_EVENT=`gdate -d \"yyyy-mm-ddT00:00:00+00:00\" +%s`\nTIMESTAMP_TODAY=`gdate +%s`\n\nREMAINING=$(($TIMESTAMP_EVENT - $TIMESTAMP_TODAY))\n\nDAYS_REMAINING=$(($REMAINING / 86400))\nHOURS_REMAINING=$(($REMAINING % 86400 / 3600))\n\nif [[ $DAYS_REMAINING > 0 || $HOURS_REMAINING > 0 ]]; then\n    echo \"There are $DAYS_REMAINING days and $HOURS_REMAINING hours left until your event.\"\nelse\n    echo \"Your message\\!\"\nfi\n"
  },
  {
    "path": "commands/dashboard/countdowns/create-countdown.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script?\n#\n# It's a template which needs further setup. Duplicate the file, \n# remove `.template.` from the filename and set the absolute path to the folder of your Raycast script.\n# Optionally, adjust the raycast.title and raycast.icon according to your needs.\n# You may need to install coreutils via homebrew to use the generated scripts (gdate function).\n#\n# Homebrew: https://brew.sh/\n# Coreutils: https://formulae.brew.sh/formula/coreutils\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Countdown\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Event Name\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Date (yyyy-mm-dd)\", \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://github.com/valentinchrt\n# @raycast.description Create countdowns via Raycast.\n\n# Configuration\n# 1. Specify the absolute path to the folder of your Raycast script in the DIRECTORY_SCRIPT_PATH variable below\n# 2. Adjust title, icon and wording if you want to\n# 3. Write the message you want to display when the countdown is at 0 (\"Your message!\" line 59)\n\nDIRECTORY_SCRIPT_PATH=\"<your raycast script command folder path>\"\nRAYCAST=\"@raycast\"\n\nSCRIPT=\"#!/bin/bash\\n\\\n\\n\\\n# Required parameters:\\n\\\n# $RAYCAST.schemaVersion 1\\n\\\n# $RAYCAST.title ${1} Countdown\\n\\\n# $RAYCAST.mode inline\\n\\\n\\n\\\n# Optional parameters:\\n\\\n# $RAYCAST.icon ⏱\\n\\\n# $RAYCAST.description See how many days/hours until ${1}.\\n\\\n# $RAYCAST.refreshTime 10m\\n\\\n\\n\\\nTIMESTAMP_TODAY=\\`gdate +%s\\`\\n\\\nTIMESTAMP_EVENT=\\`gdate  -d \\\"${2}T00:00:00+00:00\\\" +%s\\`\\n\\\n\\n\\\nREMAINING=\\$((\\$TIMESTAMP_EVENT - \\$TIMESTAMP_TODAY))\\n\\\n\\n\\\nDAYS_REMAINING=\\$((\\$REMAINING / 86400))\\n\\\nHOURS_REMAINING=\\$((\\$REMAINING % 86400 / 3600))\\n\\\n\\n\\\nif [[ \\$DAYS_REMAINING > 0 || \\$HOURS_REMAINING > 0 ]]; then\\n\\\n    echo \\\"There are \\$DAYS_REMAINING days and \\$HOURS_REMAINING hours left until ${1}.\\\"\\n\\\nelse\\n\\\n    echo \\\"Your message\\!\\\"\\n\\\nfi\"\n\necho -e $SCRIPT > \"$DIRECTORY_SCRIPT_PATH/countdown-${1}.sh\"\n\nchmod +x \"$DIRECTORY_SCRIPT_PATH/countdown-${1}.sh\"\n\necho Countdown created! ✅\n"
  },
  {
    "path": "commands/dashboard/crypto-portfolio.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Crypto\n# @raycast.mode inline\n# @raycast.refreshTime 5m\n# @raycast.packageName Money\n\n# Optional parameters:\n# @raycast.icon 💰\n\n# Documentation:\n# @raycast.description Gets crypto prices from Binance\n# @raycast.author Manan Mehta\n# @raycast.authorURL https://github.com/mehtamanan\n\nimport json\nfrom urllib.request import urlopen\nimport sys\n\n# Other symbols\n# ETHUSDT - Ethereum / USD\n# LTCUSDT - Litcoin / USD\n# LTCBTC  - Litecoin / Bitcoin\n# ADAUSDT - Cardano / USD\n# BNBUSDT - Binance Coin / USD\n# DOTUSDT - Polkadot / USD\n# XRPUSDT - Ripple / USD\nSYMBOLS = [ 'BTCUSDT', 'ETHBTC' ]\n\n# Fetch tickers from Binance for selected symbols\nresponses = []\nfor symbol in SYMBOLS:\n    try:\n        with urlopen('https://api.binance.com/api/v3/ticker/24hr?symbol={}'.format(symbol)) as f:\n            responses.append(json.load(f))\n    except:\n        print('Failed loading prices..')\n        sys.exit(0)\n\n# Create and print inline message\nmessages = []\nfor r in responses:\n    messages.append('{}: {:.3f} ({:+.2f}%)'.format(r['symbol'], float(r['askPrice']), float(r['priceChangePercent'])))\nprint('   '.join(messages))\n"
  },
  {
    "path": "commands/dashboard/current-weather.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Current Weather\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Get current weather report from [wttr.in](https://wttr.in/).\n\n# @raycast.icon 🌦️\n# @raycast.mode inline\n# @raycast.packageName Dashboard\n# @raycast.schemaVersion 1\n\n## Please be mindful of scalability of wttr.in if adjusting the refresh time:\n## currently limited to one million requests per day\n## (see https://github.com/chubin/wttr.in/blob/master/share/static/malformed-response.html).\n# @raycast.refreshTime 1h\n\n# get your ip\nIP=$(dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com | sed -r 's/^\"|\"$//g')\n\n# configure\nUNIT=\"m\" # celsius\n# UNIT=\"u\" # fahrenheit\n\n# Automatic location\nLOCATION=$(curl --silent \"https://ipapi.co/${IP}/postal/\") # automatic location\nCITY=$(curl --silent \"https://ipapi.co/${IP}/city/\") # for output\n# Manual location\n# LOCATION=\"Berlin\" # use this if you want to manually set your location\n# CITY=\"${LOCATION}\" \n\ncurl --silent \"https://wttr.in/${LOCATION}?format=${CITY}:+%c+%f+%w&${UNIT}\"\n"
  },
  {
    "path": "commands/dashboard/doge.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title DOGE Price\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n# @raycast.packageName Dashboard\n\n# Optional parameters:\n# @raycast.icon images/dogecoin-logo.png\n\n# Documentation:\n# @raycast.description Checking DOGE coin price\n# @raycast.author Clu Soh\n# @raycast.authorURL https://github.com/designedbyclu\n\n\nprice=$(curl -s https://api.coingecko.com/api/v3/coins/dogecoin | python -c \"import json, sys; print(json.load(sys.stdin)['market_data']['current_price']['usd'])\")\n\necho \"\\$${price}\""
  },
  {
    "path": "commands/dashboard/ethereum-price-usd.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Ethereum Price\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n# @raycast.packageName Dashboard\n\n# Optional parameters:\n# @raycast.author Clark Dinnison\n# @raycast.authorURL https://github.com/cdinnison\n# @raycast.description Get current Ethereum price from CoinGecko.\n# @raycast.icon images/ethereum-logo.png\n\nprice=$(curl -s https://api.coingecko.com/api/v3/coins/ethereum | python -c \"import json, sys; print(json.load(sys.stdin)['market_data']['current_price']['usd'])\")\n\necho \"\\$${price}\""
  },
  {
    "path": "commands/dashboard/fear-index.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Fear Index\n# @raycast.mode inline\n# @raycast.refreshTime 12h\n\n# Optional parameters:\n# @raycast.packageName Fear & Greed Index\n# @raycast.icon 😱 \n\n# Documentation:\n# @raycast.description Fear & Greed Index from CNN\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n\nurl=\"https://money.cnn.com/data/fear-and-greed/\"\nresult=$(curl -s $url )\n\nresult=$(echo \"$result\" | sed -e 's/(Fear)/↓/g')\nresult=$(echo \"$result\" | sed -e 's/(Greed)/↑/g')\n\ngreedNow=$(echo \"$result\" | sed -n -e 's/.*<li>Fear &amp; Greed Now: *\\([^<]*\\).*/\\1/p')\ngreedPrevious=$(echo \"$result\" | sed -n -e 's/.*<li>Fear &amp; Greed Previous Close: *\\([^<]*\\).*/\\1/p')\ngreedWeek=$(echo \"$result\" | sed -n -e 's/.*<li>Fear &amp; Greed 1 Week Ago: *\\([^<]*\\).*/\\1/p')\ngreedMonth=$(echo \"$result\" | sed -n -e 's/.*<li>Fear &amp; Greed 1 Month Ago: *\\([^<]*\\).*/\\1/p')\ngreedYear=$(echo \"$result\" | sed -n -e 's/.*<li>Fear &amp; Greed 1 Year Ago: *\\([^<]*\\).*/\\1/p')\n\necho \"H:$greedNow   D:$greedPrevious   W:$greedWeek   M:$greedMonth   Y:$greedYear\"\n"
  },
  {
    "path": "commands/dashboard/firebase/firebase-authentication-get-token.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# !!! This script is only template, you can use it to write own script to get your data from Firebase project !!!\n# If you use Firebase email and password authentication service, this script generates an authentication token\n# and copy it to your clipboard.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Get Authorization Token\n# @raycast.mode compact\n# @raycast.packageName Firebase Authentication\n\n# Optional parameters:\n# @raycast.icon images/firebase.png\n#\n# Documentation:\n# @raycast.description Get token from Firebase Authentication service\n# @raycast.author João Melo\n# @raycast.authorURL https://github.com/joaopcm\n\n\n# you can find API_KEY on \"Project settings -> General\" page in Firebase\nWEB_API_KEY=\"\"\n# you need to create an user with email and password on \"Authentication -> Users\" page in Firebase\nEMAIL=\"\"\nPASSWORD=\"\"\n\nif ! jq --version download &> /dev/null; then\n    echo \"download jq is required (https://stedolan.github.io/jq/).\";\n    exit 1;\nfi\n\nif [ -z \"$WEB_API_KEY\" ] || [ -z \"$EMAIL\" ] || [ -z \"$PASSWORD\" ]; then\n    echo \"Error: You must provide WEB_API_KEY, EMAIL, and PASSWORD variables\"\n    exit 1\nfi\n\n# Generate the request body\njson_data=$( jq -n -c \\\n    --arg email \"$EMAIL\" \\\n    --arg password \"$PASSWORD\" \\\n    --arg returnSecureToken true '$ARGS.named' )\n\n# Get data from Firebase Authentication service and copy the token to clipboard\ncurl -X POST \\\n    \"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=$WEB_API_KEY\" \\\n    --header 'Accept: */*' \\\n    --header 'User-Agent: Raycast' \\\n    --header 'Content-Type: application/json' \\\n    --data-raw \"$json_data\" | jq -r '.idToken' | pbcopy\n\necho 'Authorization token copied to your clipboard!'\n"
  },
  {
    "path": "commands/dashboard/firebase/firebase-realtime-db-get-data.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# !!! This script is only template, you can use it to write own script to get your data from Firebase Realtime Database !!!\n# I'm using an Arduino ESP-32 as outside weather station and I'm storing the temperature, humidity and barometric pressure into Firebase Realtime Database.\n# I wrote this script to see those values directly in Raycast. This script is changing the text color based on the Light/Dark mode.\n# Check example folder to see the result of my script and my Firebase Realtime Database structure.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Get data from Firebase\n# @raycast.mode inline\n# @raycast.refreshTime 10m\n# @raycast.packageName Firebase\n\n# Optional parameters:\n# @raycast.icon images/firebase.png\n#\n# Documentation:\n# @raycast.description Get values from Firebase Realtime Database\n# @raycast.author Marek Mašek\n# @raycast.authorURL https://github.com/marekmasek\n\n\n# you can find API_KEY on \"Project settings -> General\" page in Firebase\nWEB_API_KEY=\"\"\n# you need to create an user with email and password on \"Authentication -> Users\" page in Firebase\nEMAIL=\"\"\nPASSWORD=\"\"\n# This is URL to your Realtime Database in Firebase, example of DB_URL: \"https://${database-name}.${database-location}.firebasedatabase.app\"\nDB_URL=\"\"\n\nif ! jq --version download &> /dev/null; then\n      echo \"download jq is required (https://stedolan.github.io/jq/).\";\n      exit 1;\nfi\n\n# Generate access token\nTOKEN=$(curl -s -H \"Content-Type: application/json\" -d '{\"email\": \"'$EMAIL'\", \"password\": \"'$PASSWORD'\", \"returnSecureToken\": true}' 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key='$WEB_API_KEY | jq -r '.idToken')\n\n# Get data from Firebase Realtime Database\nRESPONSE=$(curl -s $DB_URL'/.json?auth='$TOKEN)\n\n# This script is changing color of the output text based on the light/dark mode activated in macOS\nCOLOR_MODE=$(defaults read -g AppleInterfaceStyle 2>/dev/null)\nMAIN_COLOR=\"\\u001b[97m\"\n\nif [ ${COLOR_MODE:-\"Light\"} == \"Light\" ]; then\nMAIN_COLOR=\"\\u001b[30m\"\nfi\n\n# Get specific field values, round them and print the output\necho $RESPONSE | jq -r 'def colors:\n {\n \"main\": \"'$MAIN_COLOR'\",\n \"reset\": \"\\u001b[0m\",\n}; colors.reset + \"Temp: \" + colors.main + (.outside.temp*10.0|round/10.0|tostring) + \" °C\" + colors.reset +\" Hum: \" + colors.main + (.outside.humidity|round|tostring) + \" %\" + colors.reset + \" BP: \" + colors.main + (.outside.airPressure*10.0|round/10.0|tostring) + \" hPa\" + colors.reset + \"     Room Temp: \" + colors.main + (.inside.temp*10.0|round/10.0|tostring) + \" °C\"'\n"
  },
  {
    "path": "commands/dashboard/mood-meter/add-mood.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Add Mood\n// @raycast.mode silent\n// @raycast.packageName Dashboard\n//\n// Optional parameters:\n// @raycast.icon ☕️\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"mood rating 1-5\",}\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Day number\", \"optional\":true }\n\n\n// Documentation:\n// @raycast.description Add mood value to current or specified date \n// @raycast.author Federico Miraglia\n// @raycast.authorURL https://github.com/Mitra98t\n\n\nconst { exec } = require('child_process')\nconst fs = require(\"fs\")\nconst homedir = require('os').homedir();\nconst filePath = `${homedir}/.moodTable.json`\nlet now = new Date()\n\nif (!fs.existsSync(filePath)) {\n    exec(`echo '{}' > ${filePath}`)\n}\n\n\nlet json = fs.readFileSync(filePath)\nlet parsedMoods = JSON.parse(json)\nvar moodVal = Number(process.argv.slice(2)[0])\nvar dayNum = Number(process.argv.slice(2)[1])\n\nif (parsedMoods[now.getFullYear()] == null) {\n    parsedMoods[now.getFullYear()] = [[], [], [], [], [], [], [], [], [], [], [], []]\n    fs.writeFileSync(filePath, JSON.stringify(parsedMoods))\n}\n\nif (moodVal > 0 && moodVal <= 5) {\n    let dayVal = dayNum && dayNum > 0 && dayNum <= 31 ? dayNum : now.getDate()\n    let index = parsedMoods[now.getFullYear()][now.getMonth()].findIndex(d => d.date == dayVal)\n    if (index != -1)\n        parsedMoods[now.getFullYear()][now.getMonth()][index] = { date: dayVal, mood: moodVal }\n    else\n        parsedMoods[now.getFullYear()][now.getMonth()].push({ date: dayVal, mood: moodVal })\n    fs.writeFileSync(filePath, JSON.stringify(parsedMoods))\n    console.log(\"Added mood for today ☕️\")\n}\nelse console.log(\"Mood must be between 1 and 5\")\n"
  },
  {
    "path": "commands/dashboard/mood-meter/display-mood-month.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Display Mood Month\n// @raycast.mode inline\n// @raycast.refreshTime 5s\n// @raycast.packageName Dashboard\n//\n// Optional parameters:\n// @raycast.icon ☕️\n\n// Documentation:\n// @raycast.description Displays month mood table \n// @raycast.author Federico Miraglia\n// @raycast.authorURL https://github.com/Mitra98t\n\n\nconst { exec } = require('child_process')\nconst fs = require(\"fs\")\nconst homedir = require('os').homedir();\nconst filePath = `${homedir}/.moodTable.json`\n\nif (!fs.existsSync(filePath)) {\n    exec(`echo '{}' > ${filePath}`)\n}\nlet json = fs.readFileSync(filePath)\nlet parsedMoods = JSON.parse(json)\nlet now = new Date()\nlet bars = { full: \"▓\", empty: \"░\" }\n\nif (parsedMoods[now.getFullYear()] == null) {\n    parsedMoods[now.getFullYear()] = [[], [], [], [], [], [], [], [], [], [], [], []]\n    fs.writeFileSync(filePath, JSON.stringify(parsedMoods))\n    console.log(\"loading...\")\n}\n\nlet resArr = [];\nfor (let i = 0; i < daysInMonth(now.getMonth(), now.getFullYear()); i++) {\n    let toAdd = 0\n    for (const day of parsedMoods[now.getFullYear()][now.getMonth()]) {\n        if (day.date - 1 == i) {\n            toAdd = day.mood\n        }\n    }\n    resArr.push(toAdd)\n}\n\n\nlet res = \"\";\nfor (const day of resArr) {\n    let val = \"\"\n    switch (day) {\n        case 1:\n            val = `\\x1b[38;5;88m${bars.full}\\x1b[0m`\n            break;\n        case 2:\n            val = `\\x1b[38;5;166m${bars.full}\\x1b[0m`\n            break;\n        case 3:\n            val = `\\x1b[38;5;214m${bars.full}\\x1b[0m`\n            break;\n        case 4:\n            val = `\\x1b[38;5;70m${bars.full}\\x1b[0m`\n            break;\n        case 5:\n            val = `\\x1b[38;5;46m${bars.full}\\x1b[0m`\n            break;\n\n        default:\n            val = `${bars.empty}`\n            break;\n    }\n    res += val\n}\n\n\nconsole.log(res)\n\nfunction daysInMonth(month, year) {\n    return month <= 6\n        ? (month % 2 == 0 ? 31 : month == 1 ? isLeapYear(year) ? 29 : 28 : 30)\n        : (month % 2 == 0 ? 30 : 31)\n}\n\nfunction isLeapYear(year) {\n    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);\n}\n"
  },
  {
    "path": "commands/dashboard/mood-meter/display-mood-year.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Display Mood Year\n// @raycast.mode fullOutput\n// @raycast.packageName Dashboard\n//\n// Optional parameters:\n// @raycast.icon ☕️\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Year\", \"optional\": true}\n\n// Documentation:\n// @raycast.description Displays year mood table \n// @raycast.author Federico Miraglia\n// @raycast.authorURL https://github.com/Mitra98t\n\n\nconst { exec } = require('child_process')\nconst fs = require(\"fs\")\nconst homedir = require('os').homedir();\nconst filePath = `${homedir}/.moodTable.json`\nconst monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n    \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n];\n\nif (!fs.existsSync(filePath)) {\n    exec(`echo '{}' > ${filePath}`)\n}\n\nlet json = fs.readFileSync(filePath)\nlet parsedMoods = JSON.parse(json)\nlet now = new Date()\nlet yearVal = Number(process.argv.slice(2)[0])\nlet bars = { full: \"▓\", empty: \"░\" }\n\nif (parsedMoods[now.getFullYear()] == null) {\n    parsedMoods[now.getFullYear()] = [[], [], [], [], [], [], [], [], [], [], [], []]\n    fs.writeFileSync(filePath, JSON.stringify(parsedMoods))\n}\n\nlet nowYear = yearVal && yearVal > 0 ? yearVal : now.getFullYear()\nif (parsedMoods[nowYear] == null) {\n    console.log(\"Empty year!\")\n    return\n}\nlet resArr = [];\n// * Mese parte da 0 (ottimo per index)\nfor (const month in parsedMoods[nowYear]) {\n    resArr.push([]);\n    for (let i = 0; i < daysInMonth(month, nowYear); i++) {\n        let toAdd = 0\n        let dayIndex = parsedMoods[nowYear][month].findIndex(d => d.date == i + 1)\n        if (dayIndex != -1)\n            toAdd = parsedMoods[nowYear][month][dayIndex].mood\n        resArr[month].push(toAdd)\n    }\n}\n\nlet res = \"\";\nfor (const month in resArr) {\n    res += `${monthNames[month]}\\n`\n    for (const day of resArr[month]) {\n        let val = \"\"\n\n        switch (day) {\n            case 1:\n                val = `\\x1b[38;5;88m${bars.full}\\x1b[0m`\n                break;\n            case 2:\n                val = `\\x1b[38;5;166m${bars.full}\\x1b[0m`\n                break;\n            case 3:\n                val = `\\x1b[38;5;214m${bars.full}\\x1b[0m`\n                break;\n            case 4:\n                val = `\\x1b[38;5;70m${bars.full}\\x1b[0m`\n                break;\n            case 5:\n                val = `\\x1b[38;5;46m${bars.full}\\x1b[0m`\n                break;\n\n            default:\n                val = `${bars.empty}`\n                break;\n        }\n        res += val\n    }\n    if (month != 11)\n        res += `\\n`\n}\n\nconsole.log(res)\n\nfunction daysInMonth(month, year) {\n    return month <= 6\n        ? (month % 2 == 0 ? 31 : month == 1 ? isLeapYear(year) ? 29 : 28 : 30)\n        : (month % 2 == 0 ? 30 : 31)\n}\n\nfunction isLeapYear(year) {\n    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);\n}"
  },
  {
    "path": "commands/dashboard/nextdns-status-check.py",
    "content": "#!/usr/bin/env python3\n\n# Parameters\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title NextDNS Status\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName Dashboard\n# @raycast.icon images/nextdns.png\n\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Check if this machine is using NextDNS.\n\nimport json, urllib.request\n\nrequest = urllib.request.Request(\n    method=\"GET\",\n    url=\"https://test.nextdns.io\",\n    headers={ \"User-Agent\": \"curl\" },\n)\n\ntry:\n    response = urllib.request.urlopen(request)\nexcept urllib.error.HTTPError as e:\n    print(\"Failed to get status from NextDNS:\", e.code, e.reason)\n    exit(1)\nexcept urllib.error.URLError as e:\n    print(\"Failed to reach NextDNS.\", \"Error:\", e.reason)\n    exit(1)\nelse:\n    resp_json = json.loads(response.read().decode(\"utf-8\"))\n    status = resp_json[\"status\"]\n\n    if status == \"ok\":\n        print(\"✅ \", resp_json[\"deviceName\"], \"is using NextDNS via\", resp_json[\"protocol\"])\n    else:\n        print(\"❌  This device is not using NextDNS\")\n"
  },
  {
    "path": "commands/dashboard/open-ai-usage.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n# I made this thanks to article by htnosm below\n# https://htnosm.hatenablog.com/entry/2023/04/02/090000\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Check Usage of OpenAI API\n# @raycast.mode inline\n# @raycast.packageName System\n\n#\n# Optional parameters:\n# @raycast.icon 💲\n#\n# Documentation:\n# @raycast.description Get total usage of OpenAI API\n# @raycast.author nagauta\n# @raycast.authorURL https://github.com/nagauta\n\n_ORGANIZATION=\"\"\n_OPENAI_APIKEY=\"\"\n\n_START_DATE=\"$(date -u +'%Y-%m')-01\"\n_END_DATE=\"$(date -u -v+1m +'%Y-%m')-01\"\necho \nTOTAL_USAGE=$(curl -sSf \"https://api.openai.com/dashboard/billing/usage?end_date=${_END_DATE}&start_date=${_START_DATE}\" \\\n-H \"authorization: Bearer ${_OPENAI_APIKEY}\" \\\n| jq -r '\"$\" + (.total_usage | round / 100 | tostring)')\n\necho \"Total Usage: ${TOTAL_USAGE}, Period: ${_START_DATE}-${_END_DATE}\""
  },
  {
    "path": "commands/dashboard/open-weather/weather-current.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Current Weather\n# @raycast.mode inline\n# @raycast.refreshTime 30m\n# @raycast.packageName OpenWeather\n\n# Optional parameters:\n# @raycast.icon ⛅️\n#\n# Documentation:\n# @raycast.description Get current weather from OpenWeather\n# @raycast.author Marek Mašek\n# @raycast.authorURL https://github.com/marekmasek\n\n# you can generate API KEY here: https://home.openweathermap.org/api_keys\nAPI_KEY=\"\"\n# city which will be used\nCITY=\"prague\"\n\nif ! jq --version download &> /dev/null; then\n      echo \"download jq is required (https://stedolan.github.io/jq/).\";\n      exit 1;\nfi\n\n# Get location coordinates\nLOCATION_INFO=$(curl -s 'https://photon.komoot.io/api/?lang=en&limit=1&q='$CITY)\n\nLAT=$( jq -r  '.features[0].geometry.coordinates[1]' <<< \"${LOCATION_INFO}\" )\nLON=$( jq -r  '.features[0].geometry.coordinates[0]' <<< \"${LOCATION_INFO}\" )\n\n# Get weather forecast from OpenWeather\nRESPONSE=$(curl -s 'https://api.openweathermap.org/data/2.5/onecall?lat='$LAT'&lon='$LON'&units=metric&appid='$API_KEY)\n\n# This script is changing color of the output text based on the light/dark mode activated in macOS\nCOLOR_MODE=$(defaults read -g AppleInterfaceStyle 2>/dev/null)\nMAIN_COLOR=\"\\e[97m\"\n\nif [ ${COLOR_MODE:-\"Light\"} == \"Light\" ]; then\n    MAIN_COLOR=\"\\e[30m\"\nfi\n\n# Build output string\nCURRENT_TEMP=$( jq -r '.current.temp*10.0|round/10.0|tostring' <<< \"${RESPONSE}\" )\n\n# Print output string\nprintf \"Temp: $MAIN_COLOR$CURRENT_TEMP °C\"\n"
  },
  {
    "path": "commands/dashboard/open-weather/weather-forecast.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Weather Forecast\n# @raycast.mode inline\n# @raycast.refreshTime 30m\n# @raycast.packageName OpenWeather\n\n# Optional parameters:\n# @raycast.icon ⛅️\n#\n# Documentation:\n# @raycast.description Get weather forecast from OpenWeather\n# @raycast.author Marek Mašek\n# @raycast.authorURL https://github.com/marekmasek\n\n# you can generate API KEY here: https://home.openweathermap.org/api_keys\nAPI_KEY=\"\"\n# city which will be used\nCITY=\"prague\"\n\nif ! jq --version download &> /dev/null; then\n      echo \"download jq is required (https://stedolan.github.io/jq/).\";\n      exit 1;\nfi\n\n# Get location coordinates\nLOCATION_INFO=$(curl -s 'https://photon.komoot.io/api/?lang=en&limit=1&q='$CITY)\n\nLAT=$( jq -r  '.features[0].geometry.coordinates[1]' <<< \"${LOCATION_INFO}\" )\nLON=$( jq -r  '.features[0].geometry.coordinates[0]' <<< \"${LOCATION_INFO}\" )\n\n# Get weather forecast from OpenWeather\nRESPONSE=$(curl -s 'https://api.openweathermap.org/data/2.5/onecall?lat='$LAT'&lon='$LON'&units=metric&appid='$API_KEY)\n\n# This script is changing color of the output text based on the light/dark mode activated in macOS\nCOLOR_MODE=$(defaults read -g AppleInterfaceStyle 2>/dev/null)\nMAIN_COLOR=\"\\e[97m\"\nRESET_COLOR=\"\\e[0m\"\n\nif [ ${COLOR_MODE:-\"Light\"} == \"Light\" ]; then\n    MAIN_COLOR=\"\\e[30m\"\nfi\n\n# Build output string\nOUTPUT_STRING=\n\nfor i in {0..3}\ndo\n    WORKDAY=$( date -r $( jq -r  '.daily['$i'].dt' <<< \"${RESPONSE}\") +%a)\n    TEMP_DAY=$( jq -r  '.daily['$i'].temp.day*10.0|round/10.0|tostring' <<< \"${RESPONSE}\" )\n    TEMP_NIGHT=$( jq -r  '.daily['$i'].temp.night*10.0|round/10.0|tostring' <<< \"${RESPONSE}\" )\n    \n    OUTPUT_STRING=\"$OUTPUT_STRING $WORKDAY: $MAIN_COLOR$TEMP_DAY°$RESET_COLOR / $MAIN_COLOR$TEMP_NIGHT°$RESET_COLOR\"\ndone\n\n# Print output string\nprintf \"$OUTPUT_STRING C\"\n"
  },
  {
    "path": "commands/dashboard/precious-metals.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via Homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Metals Price\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n# @raycast.packageName Dashboard\n#\n# Documentation:\n# @raycast.description Retrieves the value of precious metals per 1 oz\n# @raycast.author Stefan de Graaf\n# @raycast.authorURL https://github.com/DBZFYAM\n# @raycast.icon images/precious-metals.png\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is not installed. To install, run 'brew install jq' or visit https://stedolan.github.io/jq/\";\n\texit 1;\nfi\n\n# Configure the values below if needed. Specify the metals to retrieve and set the desired output currency\n# NOTE: Not all metals/currencies are available in all output-currencies (For example: XPT and XPD are only available in USD)\nmetals=(\"XAG\" \"XAU\" \"XPT\" \"XPD\")\nmetalsLabels=(\"Silver\" \"Gold\" \"Platinum\" \"Palladium\")\ncurrency=\"USD\"\n\n# Leave as is\nendpoint=\"https://forex-data-feed.swissquote.com/public-quotes/bboquotes/instrument\"\nmetalsLength=${#metals[@]}\noutput=\"\"\n\nfor (( i=1; i<${metalsLength}+1; i++ ));\ndo\n\turl=\"${endpoint}/${metals[$i-1]}/$currency\"\n\tdata=$(curl --silent $url)\n\tresponse=$(echo \"$data\" | jq '.[0].spreadProfilePrices[] | select(.spreadProfile==\"Standard\") | .ask')\n    \n\tif [[ $i -gt 1 ]]\n\tthen\n\t\toutput+=\" - \"\n\tfi\n\toutput+=\"${metalsLabels[$i-1]}: $response\"\ndone\n\necho $output"
  },
  {
    "path": "commands/dashboard/sabnzbd-queue-status.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title SABnzbd Queue\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.packageName Dashboard\n\n# Documentation:\n# @raycast.description Show SABnzbd's queue status\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nprotocol=\"http\"\naddress=\"127.0.0.1\"\nport=\"8080\"\napikey=\"<-- API KEY -->\"\n\nfull_queue_status=$(curl -s \"$protocol://$address:$port/sabnzbd/api?output=json&apikey=$apikey&mode=queue\")\n\nstatus=$(echo \"$full_queue_status\" | jq -j '.queue.status')\nsize_left=$(echo \"$full_queue_status\" | jq -j '.queue.sizeleft')\nsize=$(echo \"$full_queue_status\" | jq -j '.queue.size')\nspeed=$(echo \"$full_queue_status\" | jq -j '.queue.speed')\ntime_left=$(echo \"$full_queue_status\" | jq -j '.queue.timeleft')\nno_of_slots=$(echo \"$full_queue_status\" | jq -j '.queue.noofslots')\n\nif [ \"$status\" = \"Paused\" ]; then\n  time_left=\"-\"\n  speed=\"-\"\nfi\n\necho \"🚦 $status ・ 📥 $no_of_slots ・ ⏳ $time_left ・ 💿 $size_left / $size ・ 📊 $speed\"\n"
  },
  {
    "path": "commands/dashboard/speedtest.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires speedtest (https://www.speedtest.net/apps/cli)\n# Install with Homebrew: `brew tap teamookla/speedtest; brew update; brew install speedtest --force`\n# Afterward, accept license: `speedtest --accept-license`\n\n# @raycast.title Speedtest\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Test download and upload connection speed using [Speedtest](https://www.speedtest.net/apps/cli).\n\n# @raycast.icon images/speedtest-logo.png\n# @raycast.mode inline\n# @raycast.packageName Internet\n# @raycast.refreshTime 20m\n# @raycast.schemaVersion 1\n\nif ! command -v speedtest &> /dev/null; then\n\techo \"speedtest command is required (https://www.speedtest.net/apps/cli).\";\n\texit 1;\nfi\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is required (https://stedolan.github.io/jq/).\";\n\texit 1;\nfi\n\njson=$(speedtest -f json-pretty)\n\nreport_url=$(echo \"$json\" | jq -r '.result.url')\n\n    ping=$(echo \"$json\" | jq -r '.ping.latency')\nbps_down=$(echo \"$json\" | jq -r '.download.bandwidth')\n  bps_up=$(echo \"$json\" | jq -r '.upload.bandwidth')\n\ndivide_to_mbps=125000\nmbps_down=$(echo \"scale=2; $bps_down / $divide_to_mbps\" | bc)\n  mbps_up=$(echo \"scale=2;   $bps_up / $divide_to_mbps\" | bc)\n\necho \"↓ ${mbps_down}mbps  ↑ ${mbps_up}mbps  ↔ ${ping}ms\"\necho \"Full report: $report_url\""
  },
  {
    "path": "commands/dashboard/stock-portfolio.rb",
    "content": "#!/usr/bin/env ruby\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stocks\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon 📈\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Keep track of your stock portfolio.\n\n\n# Configuration\n\nSYMBOLS = [\n  \"AAPL\",\n  \"BYND\",\n  \"TSLA\",\n]\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif SYMBOLS.empty?\n  puts \"No stock symbol provided\"\n  exit(1)\nend\n\ndef fetch_stock(symbol)\n  uri = URI(\"https://api.lil.software/stocks?symbol=#{symbol}\")\n  req = Net::HTTP::Get.new(uri)\n  \n  req_options = {\n    use_ssl: uri.scheme == \"https\",\n  }\n  \n  res = Net::HTTP.start(uri.hostname, uri.port, req_options) { |http|\n    http.request(req)\n  }\n  \n  if res.code == \"200\"\n    result = JSON.parse(res.body)\n  \n    current = result[\"current\"] \n    previous_close = result[\"previous_close\"]\n    \n    growth = ((current - previous_close) / previous_close * 100).round(1)\n    \n    return \"#{symbol}: #{current} (#{growth}%)\"\n  else \n    puts \"Failed loading stock\"\n    exit(1)\n  end\nend\n\nportfolio = SYMBOLS.map { |symbol| fetch_stock symbol }\nputs \"#{portfolio * \"   \"}\""
  },
  {
    "path": "commands/dashboard/system-activity.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title System Activity\n# @raycast.mode inline\n# @raycast.refreshTime 5s\n# @raycast.packageName Dashboard\n\n# Optional parameters:\n# @raycast.icon 📈\n\ncpu_mem=$(ps -A -o %cpu,%mem | awk '{ cpu += $1; mem += $2} END {print \"CPU: \"cpu\"% MEM: \"mem\"%\"}')\n\necho \"${cpu_mem}\""
  },
  {
    "path": "commands/dashboard/tesla.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Tesla\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 🚘\n\n# Documentation:\n# @raycast.description Get the status of your Tesla vehicle\n# @raycast.author Mortada Sarheed\n# @raycast.authorURL https://github.com/mSarheed\n\n### SETUP ###\n## Get your token ##\n# On iOS you can use the app Auth app for Tesla link: https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613\n# On Android you can use the app Tesla Tokens link: https://play.google.com/store/apps/details?id=net.leveugle.teslatokens&hl=en&gl=US\n# Retrieve your refresh token and paste it into the varibale $refresh token\n\n# ONLY relevant if you have multiple Tesla Vehicles and on the same Tesla Account. \n#If you have multiple Tesla Vehicles, please identify the ID of your vehicle. You can use this tool https://tesla-info.com/tesla-token.php to get the vehicle ID\n \nrefresh_token=''\n\nurl=\"https://tesla-info.com/api/control_v2.php?refresh=$refresh_token&request=get_data\"\n\ndata=$(curl -s \"$url\")\n\n# Name of vehicle\nname=$(echo $data | grep -o '\"display_name\":\"[^\"]*\"' | awk -F':' '{print $2}' | tr -d '\"')\n\n# State\nstate=$(echo $data | grep -o '\"state\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\n# Uppercase first letter\nstate=\"$(tr '[:lower:]' '[:upper:]' <<< ${state:0:1})${state:1}\"\nif [ \"$state\" == \"Online\" ]; then\n    state=\"\\033[32m$state\\033[0m ✅\"\nelse\n    state=\"\\033[31m$state\\033[0m 💤\"\nfi\n\n# Vehicle locked or not\nlocked=$(echo $data | grep -o '\"locked\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\nlocked=$(echo $locked | tr -d ' ')\n\nif [ \"$locked\" = true ]; then\n    locked=\"\\033[32mLocked\\033[0m\"\nelse\n    locked=\"\\033[31mUnlocked\\033[0m\"\nfi\n\n# Sentry mode\nsentry=$(echo $data | grep -o '\"dashcam_state\":\"[^\"]*\"' | awk -F':' '{print $2}' | tr -d '\"')\n\nif [ \"$sentry\" == \"Recording\" ]; then\n    sentry=\"\\033[31mRecording\\033[0m\"\nelse\n    sentry=\"\\033[32mOff\\033[0m\"\nfi\n\nbattery_level=$(echo $data | grep -o '\"battery_level\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\n\nest_battery_range=$(echo $data | grep -o '\"est_battery_range\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\n# Tesla shows the battery range estimate miles. If you need to show this in kilometeres instead, just uncomment the line below\nest_battery_range=$(echo \"$est_battery_range * 1.60934\" |  bc)\n# Limit kilometers to no decimals\nest_battery_range=$(printf \"%.0f\\n\" \"$est_battery_range\")\n\ncharging_state=$(echo $data | grep -o '\"charging_state\":\"[^\"]*\"' | awk -F':' '{print $2}' | tr -d '\"')\n\nminutes_to_full_charge=$(echo $data | grep -o '\"minutes_to_full_charge\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\n\ncharge_limit=$(echo $data | grep -o '\"charge_limit_soc\":[^,]*' | awk -F':' '{print $2}' | tr -d '\"')\n\nif [ \"$name\" == \"\" ]; then\n    echo -e \"⚠️ \\033[31mSORRY! - Something went wrong.\\033[0m ⚠️\"\n    echo -e ''\n    echo -e \"\\033[31mEither a bad token or the API service is down!\\033[0m\"\nelse\n    echo -e \"🚘 Status of: \\033[34m$name\\033[0m 🚘\"\n    echo ''\n\n    echo -e \"➡️ Vehicle State: $state\"\n    echo ''\n\n    echo -e \"➡️ Doors: $locked 🔐\"\n    echo ''\n\n    echo -e \"➡️ Sentry: $sentry 📸\"\n    echo ''\n\n    echo -e \"➡️ Battery: \\033[34m$battery_level%\\033[0m 🔋\"\n    echo ''\n\n    echo -e \"➡️ Est. range: \\033[34m$est_battery_range km\\033[0m 🛣️\"\n    echo ''\n\n    if [ \"$charging_state\" == \"Charging\" ]; then\n        echo -e \"➡️ SoC Limit: \\033[34m$charge_limit%\\033[0m ⚡️\"\n        echo ''\n        echo -e \"➡️ Time left to charge limit: \\033[34m$minutes_to_full_charge minutes\\033[0m ⏰\"\n    else\n        echo -e \"➡️ Charging state: \\033[31mNot charging\\033[0m 🔌\"\n    fi\nfi"
  },
  {
    "path": "commands/dashboard/twitter-statistics.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename, set a bearer token and\n# specify your Twitter username.\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Twitter Statistics\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName Twitter\n# @raycast.icon images/twitter.png\n\n# Documentation:\n# @raycast.description Shows the followers, favorites and friends count of your Twitter account.\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\n\n# Configuration\n\n# Get a new bearer token from https://developer.twitter.com\nBEARER_TOKEN = \"\"\n\n# Twitter username\nUSER_NAME = \"raycastapp\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif BEARER_TOKEN.empty?\n  puts \"No bearer token provided\"\n  exit(1)\nend\n\nuri = URI(\"https://api.twitter.com/1.1/users/show.json?screen_name=#{USER_NAME}\")\nreq = Net::HTTP::Get.new(uri)\nreq[\"Authorization\"] = \"Bearer #{BEARER_TOKEN}\"\n\nreq_options = {\n  use_ssl: uri.scheme == \"https\",\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  result = JSON.parse(res.body)\n\n  followers_count = result[\"followers_count\"]\n  favorites_count = result[\"favorites_count\"]\n  friends_count = result[\"friends_count\"]\n\n  puts \"#{followers_count} Followers, #{favorites_count} Favorites and #{friends_count} Friends\"\nelse\n  puts \"Failed loading statistics\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/dashboard/world-time.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title World Time\n# @raycast.mode inline\n# @raycast.refreshTime 5s\n# @raycast.packageName Dashboard\n\n# Optional parameters:\n# @raycast.icon 🕐\n#\n# Documentation:\n# @raycast.description Show the time from elsewhere in the world\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\n# Timezones can be found in /usr/share/zoneinfo\n\nnyc=$(TZ=America/New_York date +\"%H:%M\")\nlon=$(TZ=Europe/London date +\"%H:%M\")\nbne=$(TZ=Australia/Brisbane date +\"%H:%M\")\n\necho \"New York City: $nyc | London: $lon | Brisbane: $bne\"\n"
  },
  {
    "path": "commands/dashboard/year-progress.sh",
    "content": "#!/bin/bash\n\n# Inspired by https://twitter.com/year_progress\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Year Progress\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.packageName Dashboard\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description See the year progress on your desktop.\n\n\n# Configuration\n\nOUTPUT_INCLUDES_BAR=true\nBAR_LENGTH=33\n\n\n# Main program\n\ncurrent_year=$(date +%Y)\ncurrent_day=$(date +%j)\n\nif [ $((current_year % 400)) -eq 0 ]\nthen\n  DAYS=366\nelif [ $((current_year % 100)) -eq 0 ]\nthen\n  DAYS=365\nelif [ $((current_year % 4)) -eq 0 ]\nthen\n  DAYS=366\nelse\n  DAYS=365\nfi\n\npercentage=$((100 * 10#$current_day / $DAYS))\n\nfilled_element_count=$(($BAR_LENGTH * $percentage / 100))\nblank_element_count=$(($BAR_LENGTH - $filled_element_count))\nbar=\"\"\nfor ((i = 0; i < $filled_element_count; i++)) {\n  bar=${bar}\"▓\"\n}\nfor ((i = 0; i < $blank_element_count; i++)) {\n  bar=${bar}\"░\"\n}\n\nif [ \"$OUTPUT_INCLUDES_BAR\" = true ]\nthen\n  echo ${bar}\" \"${percentage}\"%\"\nelse \n  echo ${percentage}\"%\"\nfi"
  },
  {
    "path": "commands/dashboard/youtube-statistics.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title YouTube Statistics\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName YouTube Statistics\n# @raycast.icon images/youtube.png\n\n# Documentation:\n# @raycast.description Shows YouTube Subscribers, Views and Videos\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\n# Channel ID is required\n# To find your ID please follow instructions here: https://support.google.com/youtube/answer/3250431?hl=en\nCHANNEL_ID = \"\"\n\n# Channel KEY is required\n# To create your credentials please follow instructions here: https://developers.google.com/youtube/registering_an_application\nCHANNEL_KEY = \"\"\n\nuri = URI(\"https://www.googleapis.com/youtube/v3/channels?part=statistics&id=#{CHANNEL_ID}&key=#{CHANNEL_KEY}&part=snippet\")\n\nreq = Net::HTTP::Get.new(uri)\n\nreq_options = {\n  use_ssl: uri.scheme == \"https\",\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  result = JSON.parse(res.body)\n   item = result[\"items\"][0] \n   statistics = item[\"statistics\"]\n\n   title = item[\"snippet\"][\"title\"]\n   subs = statistics[\"subscriberCount\"]\n   views = statistics[\"viewCount\"]\n   videos = statistics[\"videoCount\"]\n\n  puts \"Channel: #{title}, Subs: #{subs}, Views: #{views}, Videos: #{videos}\"\nelse\n  puts \"Failed loading statistics\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/dashboards/iperf-speed-test.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `iPerf` to be installed: https://iperf.fr/iperf-download.php\n# Install via homebrew: `brew install iperf`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Speed Test\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n# @raycast.packageName iPerf\n\n# Optional parameters:\n# @raycast.icon 💾\n\n# Documentation:\n# @raycast.description Runs an iPerf Speed Test.\n# @raycast.author Sam Wright\n# @raycast.authorURL https://raycast.com/samywamy10\n\n# Add the IP address of your iPerf server here\nip_address='192.168.86.44'\n\nif ! command -v iperf &> /dev/null; then\n    echo \"iperf command is required ('brew install iperf' or https://iperf.fr/iperf-download.php).\";\n    exit 1;\nfi\n\n{ iperf3 -c $ip_address | grep 'sender' | tail -n 1 | awk '{print $7 \" \" $8}' && date +'%-I:%M%p'; } | tr '\\n' ' ' | awk '{$3=\"@ \"$3; print $0}'\n\n"
  },
  {
    "path": "commands/developer-utils/add-ssh-keys.template.applescript",
    "content": "#!/usr/bin/osascript\n\n#######################################################\n## Set keyPaths array with paths to SSH keys to add. ##\n#######################################################\n\n# Array of paths to SSH keys.\n# Example: set keyPaths to { \"~/.ssh/id_ed25519\" }\nset keyPaths to {}\n\n# @raycast.title Add SSH Keys (with Terminal)\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Add one or multiple SSH keys to your SSH agent (with Terminal).\n\n# @raycast.icon 🔑\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\non implode( array, delimiter )\n\tset AppleScript's text item delimiters to delimiter\n\tset implodedArray to array as string\n\tset AppleScript's text item delimiters to \"\"\n\treturn implodedArray\nend implode\n\nset cmd to \"clear; ssh-add \" & implode( keyPaths,\"; clear; ssh-add \" )\n\ntell application \"Terminal\"\n\tdo script cmd\n\tactivate\nend tell"
  },
  {
    "path": "commands/developer-utils/aws/amazon-s3-download.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title S3 Download\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon images/amazon-s3.png\n# @raycast.packageName AWS\n\n# Documentation:\n# @raycast.description Download from Amazon S3 via URL\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"s3://bucket/key\" }\n# @raycast.author Chris Cook\n# @raycast.authorURL https://github.com/zirkelc\n\nURL=$1\n\n# Ensure AWS CLI is installed\nif ! command -v aws &> /dev/null; then\n\techo \"AWS CLI not found. Please install AWS CLI.\"\n\techo \"Installation instructions: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html\"\n\texit 1\nfi\n\n# Try matching different S3 URL patterns\n# https://dev.to/aws-builders/format-and-parse-amazon-s3-url-5e10\nif [[ $URL =~ ^https?://s3\\.([a-z0-9-]+)\\.amazonaws\\.com/([^/]+)(/(.*))?$ ]]; then\n    # Regional hostname with path-style\n\t\t# Example: https://s3.us-east-1.amazonaws.com/bucket/key\n\t\tBUCKET=\"${BASH_REMATCH[2]}\"\n\t\tKEY=\"${BASH_REMATCH[4]}\"\nelif [[ $URL =~ ^https?://([^/]+)\\.s3\\.([a-z0-9-]+)\\.amazonaws\\.com(/(.*))?$ ]]; then\n    # Regional hostname with virtual-hosted-style\n\t\t# Example: https://bucket.s3.us-east-1.amazonaws.com/key\n\t\tBUCKET=\"${BASH_REMATCH[1]}\"\n\t\tKEY=\"${BASH_REMATCH[4]}\"\nelif [[ $URL =~ ^https?://s3\\.amazonaws\\.com/([^/]+)(/(.*))?$ ]]; then\n    # Legacy hostname with path-style\n\t\t# Example: https://s3.amazonaws.com/bucket/key\n\t\tBUCKET=\"${BASH_REMATCH[1]}\"\n\t\tKEY=\"${BASH_REMATCH[3]}\"\nelif [[ $URL =~ ^https?://([^/]+)\\.s3\\.amazonaws\\.com(/(.*))?$ ]]; then\n    # Legacy hostname with virtual-hosted-style\n\t\t# Example: https://bucket.s3.amazonaws.com/key\n\t\tBUCKET=\"${BASH_REMATCH[1]}\"\n\t\tKEY=\"${BASH_REMATCH[3]}\"\nelif [[ $URL =~ ^s3://([^/]+)(/(.*))?$ ]]; then\n    # S3 URI\n\t\t# Example: s3://bucket/key\n\t\tBUCKET=\"${BASH_REMATCH[1]}\"\n\t\tKEY=\"${BASH_REMATCH[3]}\"\nelse\n    echo \"Invalid URL: $URL\"\n    echo \"URL must match recognized S3 patterns.\"\n    echo \"Patterns:\"\n    echo \"- Global S3 URI: s3://bucket/key\"\n    echo \"- Regional Path-Style URL: https://s3.region.amazonaws.com/bucket/key\"\n    echo \"- Regional Virtual-Hosted-Style URL: https://bucket.s3.region.amazonaws.com/key\"\n    echo \"- Legacy Path-Style URL: https://s3.amazonaws.com/bucket/key\"\n    echo \"- Legacy Virtual-Hosted-Style URL: https://bucket.s3.amazonaws.com/key\"\n    exit 1\nfi\n\n# Trim leading slash from KEY if present\nKEY=\"${KEY#/}\"\n\n# Check for empty bucket\nif [[ -z \"$BUCKET\" ]]; then\n    echo \"Error extracting bucket from URL: $URL\"\n    exit 1\nfi\n\nDOWNLOAD_FOLDER=\"$HOME/Downloads\"\n\n# Ensure download folder exists\nif [ ! -d \"$DOWNLOAD_FOLDER\" ]; then\n    echo \"Download folder does not exist\"\n    exit 1\nfi\n\n# Print bucket and key\necho \"Bucket: $BUCKET\"\necho \"Key: ${KEY:-<entire bucket>}\"\necho \"Download: $DOWNLOAD_FOLDER\"\necho \"\"\n\nif [ -z \"$KEY\" ]; then\n    # No key provided, download entire bucket\n    DOWNLOAD_PATH=\"$DOWNLOAD_FOLDER/$BUCKET\"\n    echo \"Downloading entire bucket s3://$BUCKET to $DOWNLOAD_PATH...\"\n    RECURSIVE=\"--recursive\"\nelse\n    # Check if the key ends with a slash, indicating it's likely a directory\n    if [[ \"$KEY\" == */ ]]; then\n        DOWNLOAD_PATH=\"$DOWNLOAD_FOLDER/$BUCKET/$KEY\"\n        echo \"Downloading directory s3://$BUCKET/$KEY to $DOWNLOAD_PATH...\"\n        RECURSIVE=\"--recursive\"\n    else\n        # Check if the object exists as a file\n        if aws s3api head-object --bucket \"$BUCKET\" --key \"$KEY\" &>/dev/null; then\n            # It's a file\n            FILENAME=$(basename \"$KEY\")\n            DOWNLOAD_PATH=\"$DOWNLOAD_FOLDER/$FILENAME\"\n            echo \"Downloading file s3://$BUCKET/$KEY to $DOWNLOAD_PATH...\"\n            RECURSIVE=\"\"\n        else\n            # It might be a directory without a trailing slash or it doesn't exist\n            # Try to list objects with this prefix\n            if aws s3api list-objects-v2 --bucket \"$BUCKET\" --prefix \"$KEY/\" --max-items 1 --query 'Contents[0].Key' --output text &>/dev/null; then\n                # It's a directory\n                DOWNLOAD_PATH=\"$DOWNLOAD_FOLDER/$BUCKET/$KEY\"\n                echo \"Downloading directory s3://$BUCKET/$KEY to $DOWNLOAD_PATH...\"\n                RECURSIVE=\"--recursive\"\n            else\n                echo \"Error: No file or directory found at s3://$BUCKET/$KEY\"\n                exit 1\n            fi\n        fi\n    fi\nfi\n\n# Perform the download\nif aws s3 cp \"s3://$BUCKET/${KEY:+$KEY}\" \"$DOWNLOAD_PATH\" $RECURSIVE; then\n    echo \"Downloaded successfully.\"\n    if [[ -n \"$RECURSIVE\" ]]; then\n        open \"$DOWNLOAD_FOLDER/$BUCKET\"\n    else\n        open \"$DOWNLOAD_FOLDER\"\n    fi\nelse\n    echo \"Download failed. Error code: $?\"\n    exit 1\nfi\n"
  },
  {
    "path": "commands/developer-utils/aws/aws-sso-util.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `aws-sso-util` installed: https://github.com/benkehoe/aws-sso-util\n# Install via pipx: `pipx install aws-sso-util` following the instructions on https://github.com/benkehoe/aws-sso-util\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Single Sign-On\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/aws-sso-util.png\n# @raycast.packageName AWS\n\n# Documentation:\n# @raycast.description Login to AWS using aws-sso-util\n# @raycast.author David Molinero\n# @raycast.authorURL https://github.com/doktor500\n\nexport PATH=\"$PATH:${HOME}/.local/bin/\";\n\nif ! aws-sso-util &> /dev/null; then\n  echo \"aws-sso-util is required (https://github.com/benkehoe/aws-sso-util)\";\n  exit 1;\nfi\n\naws-sso-util login --all;\n"
  },
  {
    "path": "commands/developer-utils/aws/whatismyregion.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires curl (https://curl.se/)\n# Install via homebrew: `brew install curl`\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via homebrew: `brew install jq`\n\n# Dependency: requires grepcidr (http://www.pc-tools.net/unix/grepcidr/)\n# Install via homebrew: `brew install grepcidr`\n\n# @raycast.schemaVersion 1\n# @raycast.author Oğuzhan Yılmaz\n# @raycast.authorURL https://github.com/c1982\n# @raycast.title Find AWS Region by IP\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n# @raycast.icon 🤖\n# @raycast.description Copies the AWS IPv4 to the clipboard.\n\nIPADDR=$(pbpaste)\nIPRANGEFILE=\"${PWD}/ip-ranges.json\"\n\ndownload_ipranges_file(){\n    curl -o $IPRANGEFILE https://ip-ranges.amazonaws.com/ip-ranges.json\n}\n\ncheck_file_existence(){\n    if [ ! -f \"$IPRANGEFILE\" ]; then\n        echo \"$IPRANGEFILE does not exists. Downloading...\"\n        download_ipranges_file\n    fi\n}\n\ncheck_file_older_than_7days(){\n    if test `find \"$IPRANGEFILE\" -cmin +10080`\n    then\n        echo \"$IPRANGEFILE file too old. Downloading...\"\n        download_ipranges_file\n    fi\n}\n\nfind_aws_prefix(){\n    for range in $AWS_RANGES; do\n       prefix=$(grepcidr \"$range\" <(echo \"$IPADDR\") >/dev/null && echo \"$range\")\n       if [[ ! -z $prefix ]]; then\n            echo $prefix\n            exit\n        fi\n    done\n}\n\ncheck_requirements(){\n    if [ -z $(which grepcidr) ]; \n    then\n        echo \"grepcidr not installed\"\n        exit\n    fi\n\n    if [ -z $(which curl) ]; \n    then\n        echo \"curl not installed\"\n        exit\n    fi\n\n    if [ -z $(which jq) ]; \n    then\n        echo \"jq not installed\"\n        exit\n    fi\n}\n\ncheck_valid_ipv4(){\n    if [[ ! $IPADDR =~ ^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then\n        echo \"Couldn't read valid IPv4 address from clipboard\"\n        exit\n    fi\n}\n\ncheck_requirements\ncheck_file_existence\ncheck_file_older_than_7days\ncheck_valid_ipv4\n\nAWS_RANGES=$(cat $IPRANGEFILE | jq -r '.prefixes[] | select(.service==\"EC2\") | select(.ip_prefix) | .ip_prefix')\nPREFIX=$(find_aws_prefix)\nif [[ -z $PREFIX ]]; then\n    echo \"$IPADDR is not in AWS range\"\n    exit\nfi\n\nSHOW_RANGE=$(cat $IPRANGEFILE | jq '.prefixes[] | select(.service==\"EC2\" and .ip_prefix==\"'$PREFIX'\")')\necho $SHOW_RANGE | jq --arg ip $IPADDR '. + {\"ip\":\"'$IPADDR'\"}'\n"
  },
  {
    "path": "commands/developer-utils/base-converter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Base Converter\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.packageName Developer Utilities\n# @raycast.author Saimir S.\n# @raycast.authorURL https://www.saimirsulaj.com\n# @raycast.description Utility to convert numbers between bases. Can be one number or a list of string-delimited numbers.\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"from base\", \"optional\": false }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"to base\", \"optional\": false }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"value\", \"optional\": false }\n\n\nnum_re='^[0-9]+$'\ninput_base=$1;\noutput_base=$2;\n\nif [ -z \"$input_base\" ]; then\n  echo \"Error: \\\"from base\\\" must be defined\";\n  exit 1;\nfi\nif ! [[ $input_base =~ $num_re ]] ; then\n   echo \"Error: Input base must be a number\" >&2;\n   exit 1;\nfi\n\nif [ -z \"$output_base\" ]; then\n  echo \"Error: \\\"to base\\\" must be defined\";\n  exit 1;\nfi\nif ! [[ $output_base =~ $num_re ]] ; then\n   echo \"Error: Output base must be a number\" >&2;\n   exit 1;\nfi\n\nif [ -z \"$3\" ]; then\n  echo \"Error: \\\"value\\\" must be defined\";\n  exit 1;\nfi\n\n# Output base has to be expressed in the base of the input base.\noutput_base_cov=$(echo \"ibase=10; obase=$input_base; $output_base\" | bc);\n\noutput=\"\";\nfor num in $3; do\n  if ! [[ $num =~ $num_re ]] ; then\n     echo \"Error: \\\"$num\\\" is not a number\" >&2;\n     exit 1;\n  fi\n  num_cov=$(echo \"ibase=$input_base; obase=$output_base_cov; $num\" | bc);\n  output=\"$output $num_cov\";\ndone\n\n# Trim whitespace\noutput=\"${output##}\";\n\necho \"$output\";\necho \"$output\" | pbcopy;\n"
  },
  {
    "path": "commands/developer-utils/base64-decode-input.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Base64 Decode\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n#\n# Optional parameters:\n# @raycast.icon 🔓\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"optional\": false }\n#\n# Documentation:\n# @raycast.description Decode the base64 string \n# @raycast.author Bin Hua\n# @raycast.authorURL https://github.com/hzb\n\n\necho $1 | base64 --decode | pbcopy\necho \"Copied to clipboard\""
  },
  {
    "path": "commands/developer-utils/base64-encode-input.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Base64 Encode\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n#\n# Optional parameters:\n# @raycast.icon 🔐\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"optional\": false }\n#\n# Documentation:\n# @raycast.description Encode any text data by using base64\n# @raycast.author Bin Hua\n# @raycast.authorURL https://github.com/hzb\n\necho $1 | base64 | pbcopy\necho \"Copied to clipboard\""
  },
  {
    "path": "commands/developer-utils/brew/brew-cask-upgrade.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires brew-cask-upgrade cli installed: https://github.com/buo/homebrew-cask-upgrade\n# Install via Homebrew: brew tap buo/cask-upgrade\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Cask Upgrade\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Updates brew and upgrades every outdated app\n# @raycast.author LanikSJ\n# @raycast.authorURL https://github.com/LanikSJ\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nif ! command -v brew cu &> /dev/null; then\n  echo \"brew cask upgrade command is required (https://github.com/buo/homebrew-cask-upgrade).\";\n  exit 1;\nfi\n\nbrew cu -ay\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-doctor.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Doctor\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Run Brew Doctor\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew doctor\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-install.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Install a package\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n# @raycast.needsConfirmation true\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Package name\"}\n#\n# Documentation:\n# @raycast.description Installs specified brew package.\n# @raycast.author Alex Zotov\n# @raycast.authorURL https://github.com/lex4hex\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew install $1\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-leaves.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Leaves\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Show list of installed brew formulae that are not dependencies of other installed formula.\n# @raycast.author owpac\n# @raycast.authorURL https://github.com/Owpac\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew leaves\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-list.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Show Brew List\n# @raycast.author chengzhiqi\n# @raycast.authorURL https://twitter.com/1872Fate\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew list\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-outdated.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Outdated List\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Show list of outdated formulae\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew outdated --quiet\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-services-list.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Services List\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Show Brew Services List\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew services list\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-services-restart.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart Service\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n# @raycast.argument1 {\"type\":\"text\", \"placeholder\": \"Service Name\" }\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Restart Service in Brew\n# @raycast.author es183923\n# @raycast.authorURL github.com/es183923\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew services restart $1\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-services-start.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Service\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n# @raycast.argument1 {\"type\":\"text\", \"placeholder\": \"Service Name\" }\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Start Service in Brew\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew services start $1\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-services-stop.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Service\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n# @raycast.argument1 {\"type\":\"text\", \"placeholder\": \"Service Name\" }\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Stop Service in Brew\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew services stop $1\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-uninstall-application.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Uninstall\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🍺\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Application\" }\n# @raycast.packageName Brew\n\n# Documentation:\n# @raycast.description Uninstalls an Specified Application Using Homebrew\n# @raycast.author StevenRCE0\n# @raycast.authorURL https://github.com/StevenRCE0\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\n# Workaround for the error message\nexec 2>/dev/null\n\nbrew cat --cask \"$1\";\nif [[ ${PIPESTATUS[0]} -ne 0 ]]; then\n  brew cat \"$1\";\n  if [[ ${PIPESTATUS[0]} -ne 0 ]]; then\n    echo \"That's not a cask nor a formula. Check the spelling or try uninstalling it manually.\";\n    exit 2;\n  fi\n  echo \"brew uninstall --force --zap \\\"$1\\\"\" | pbcopy;\nelse\n  echo \"brew uninstall --cask --force --zap \\\"$1\\\"\" | pbcopy;\nfi\n\necho \"Copied command to clipboard.\";\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-update.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Update\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Run Brew Update\n# @raycast.author chengzhiqi\n# @raycast.authorURL https://twitter.com/1872Fate\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew update\n"
  },
  {
    "path": "commands/developer-utils/brew/brew-upgrade.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Upgrade\n# @raycast.mode fullOutput\n# @raycast.packageName Brew\n#\n# Optional parameters:\n# @raycast.icon 🍺\n#\n# Documentation:\n# @raycast.description Run Brew Upgrade\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n\nif ! command -v brew &> /dev/null; then\n  echo \"brew command is required (https://brew.sh).\";\n  exit 1;\nfi\n\nbrew upgrade\n"
  },
  {
    "path": "commands/developer-utils/cheat.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Query cheat.sh\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon images/cheat.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Language / Command\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Question\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Query the cheat.sh service (https://github.com/chubin/cheat.sh). You can change the color style in the script.\n\nlanguage=$1\nquestion=${2// /+}\n# Available styles: https://cht.sh/:styles-demo\nstyle=\"paraiso-dark\"\n\n# get a random answer each time\nrandnum=$((1 + (RANDOM%4)))\n\n# https://github.com/chubin/cheat.sh#usage\nif [ -z \"$question\" ]; then\n  curl -s cht.sh/$language?style=$style\nelse\n  curl -s cht.sh/$language/$question/$randnum?style=$style\nfi\n"
  },
  {
    "path": "commands/developer-utils/check-domain.template.sh",
    "content": "#!/bin/bash\n\n# How to use this script\n# It's a template which needs some setup.\n# 1. Duplicate the file,\n# 2. remove `.template.` from the filename, and\n# 3. replace <token> with your API token.\n# Optionally, customize the script title, icon, and output.\n#\n# API docs:\n# https://vercel.com/docs/api#endpoints/domains/check-a-domain-availability\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Check Domain\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🌐\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"example.com\" }\n# @raycast.packageName Developer Utils\n\n# @Documentation:\n# @raycast.description Check the availability of a domain with the Vercel API.\n# @raycast.author Ted Spare\n# @raycast.authorURL https://y.at/🤘🐊🗿🚀\n\n\n# Setup\n\n# Indicate that the script has started\necho \"Checking domain \"$1\"...\"\n\n# Vercel API base URL\nAPI_URL=\"https://api.vercel.com/v4/domains/\"\n\n# Authorization header required for making requests\n# <token> should be replaced with your token: https://vercel.com/account/tokens\nAUTH_HEADER=\"Authorization: Bearer <token>\"\n\n\n# Main program\n\n# Query the Vercel API for the availability of the domain\navailable=$(curl -s $API_URL\"status?name=\"$1 -H \"${AUTH_HEADER}\")\n\n# If the domain is available, check its price. If unavailable, tell the user.\n# If there is an auth or other error, alert the user and throw an error.\ncase $available in\n\t*\"true\"*)\n\t\tprice=$(curl -s $API_URL\"price?name=\"$1 -H \"${AUTH_HEADER}\")\n\t\t# Alert the user if the TLD is invalid\n\t\tif [[ $price = *\"tld\"* ]]; then\n\t\t\ttld=$(echo $1 | cut -d '.' -f2)\n\t\t\techo \"Invalid TLD .\"$tld\n\t\t\texit 1\n\t\tfi\n\t\t# Extract the price from the JSON-formatted result\n\t\tprice=${price%,*}\n\t\tprice=${price##*:}\n\t\techo $1\" is available for $\"$price\"! 🤑\"\n\t\texit 0\n\t\t;;\n\t*\"false\"*)\n\t\techo $1\" is not available 😢\"\n\t\texit 0\n\t\t;;\n\t*\"auth\"*)\n\t\techo \"Please provide a valid API token\"\n\t\texit 1\n\t\t;;\n\t*)\n\t\techo \"Something went wrong\"\n\t\texit 1\n\t\t;;\nesac\n"
  },
  {
    "path": "commands/developer-utils/clear-derived-data.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Derived Data\n# @raycast.mode compact\n# @raycast.packageName Xcode\n\n# Optional parameters:\n# @raycast.icon 🧹\n\n# Documentation:\n# @raycast.description Clear the derived data of Xcode.\n\nrm -rf ~/Library/Developer/Xcode/DerivedData\necho \"Removed all derived data\"\n"
  },
  {
    "path": "commands/developer-utils/clear_xcode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear All Related Junk\n# @raycast.mode compact\n# @raycast.packageName Xcode\n#\n# Optional parameters:\n# @raycast.icon 🧹\n#\n# Documentation:\n# @raycast.description This script clears all Xcode related junk.\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\nrm -rf ~/Library/Caches/CocoaPods\nrm -rf ~/Library/Caches/org.carthage.CarthageKit\n\nxcrun simctl delete unavailable \n\nrm -rf ~/Library/Developer/Xcode/Archives\nrm -rf ~/Library/Developer/Xcode/DerivedData\nrm -rf ~/Library/Developer/Xcode/iOS\\ Device\\ Logs/\n\necho \"Junk removed!\"\n"
  },
  {
    "path": "commands/developer-utils/cloudflare/purge-cloudflare-cache.template.sh",
    "content": "#!/bin/bash\n\n##################################################\n### Enter zone ID, email address, and API key. ###\n##################################################\n\ncf_zone_id=''\ncf_email_address=''\ncf_api_key=''\n\n# @raycast.title Purge Cloudflare cache\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Purge Cloudflare cache for zone.\n\n# @raycast.icon images/cloudflare-logo.png\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\nif [ -z ${cf_zone_id+x} ]; then\n\techo \"Zone ID is missing.\";\n\texit 1;\nfi\n\nif [ -z ${cf_email_address+x} ]; then\n\techo \"Email address is missing.\";\n\texit 1;\nfi\n\nif [ -z ${cf_api_key+x} ]; then\n\techo \"API key is missing.\";\n\texit 1;\nfi\n\ncurl -X POST \"https://api.cloudflare.com/client/v4/zones/${cf_zone_id}/purge_cache\" \\\n     -H \"X-Auth-Email: $cf_email_address\" \\\n     -H \"X-Auth-Key: $cf_api_key\" \\\n     -H \"Content-Type: application/json\" \\\n     --data '{\"purge_everything\":true}'\n\necho \"Purged cache\""
  },
  {
    "path": "commands/developer-utils/copy-focused-finder-window-path.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Focused Finder Window Path\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📁\n# @raycast.packageName Developer Utils\n\n# Documentation:\n# @raycast.description Copies full path of the currently focused Finder window\n# @raycast.author Vishal Telangre\n# @raycast.authorURL https://github.com/vishaltelangre\n\npath=$(osascript <<'EOF'\n    tell application \"Finder\"\n        if exists Finder window 1 then\n            get the POSIX path of (target of Finder window 1 as alias)\n        else\n            get the POSIX path of (desktop as alias)\n        end if\n    end tell\nEOF\n)\necho $path | tr -d '\\n' | pbcopy\necho \"Copied $path to clipboard\"\n"
  },
  {
    "path": "commands/developer-utils/copy-ssh-public-key.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy SSH Public Key\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔑\n# @raycast.packageName Developer Utils\n\n# Documentation:\n# @raycast.description Copying the default SSH public key to the clipboard\n# @raycast.author Angelos Michalopoulos\n# @raycast.authorURL https://github.com/miagg\n\nif [ -f \"$HOME/.ssh/id_rsa.pub\" ]; then\n  pbcopy < \"$HOME/.ssh/id_rsa.pub\"\nelif [ -f \"$HOME/.ssh/id_dsa.pub\" ]; then\n  pbcopy < \"$HOME/.ssh/id_dsa.pub\"\nelif [ -f \"$HOME/.ssh/id_ed25519.pub\" ]; then\n  pbcopy < \"$HOME/.ssh/id_ed25519.pub\"\nelse\n  echo \"No SSH public key was found\"\n  exit 1\nfi\n\necho \"SSH public key was copied to the clipboard\"\n\n"
  },
  {
    "path": "commands/developer-utils/count-characters.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Count Characters Bash\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text\", \"optional\": true }\n# @raycast.packageName Developer Utilities\n\n# Documentation:\n# @raycast.description Counts the characters of either the clipboard or the passed argument\n# @raycast.author es183923\n\narg=$1\n\nif [ -z \"$arg\" ]\nthen\n    # arg is NULL\n    str=$(pbpaste)\n    echo \"${#str} chars\"\nelse\n    echo \"${#arg} chars\"\nfi\n"
  },
  {
    "path": "commands/developer-utils/create-image-from-code.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Image from Code\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/ray-so.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"optional\": true, \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.description Create beautiful images of your code with https://ray.so\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\n# Customization:\n# Set colors. Available options: candy, breeze, midnight or sunset\nCOLORS=\"midnight\" \n# Toggle background. Available options: true or false\nBACKGROUND=\"true\"\n# Toggle dark mode. Available options: true or false\nDARK_MODE=\"true\"\n# Set padding. Available options: 16, 32, 64 or 128\nPADDING=\"64\"\n# Set language. Available options: shell, cpp (C/C++), csharp, clojure, coffeescript, crystal, css, d, dart, diff, dockerfile, elm, erlang, fortran, gherkin,\n# go, groovy, haskell, xml, java, javascript, json, jsx, julia, kotlin, latex, lisp, lua, markdown, mathematica, octave, nginx, objectivec, ocaml (F#), perl, php,\n# powershell, python, r, ruby, rust, scala, smalltalk, sql, swift, typescript, (for Tsx, use jsx), twig, verilog, vhdl, xquery, yaml\nLANGUAGE=\"auto\"\n\n# Main:\nTITLE=${1:-\"Untitled\"}\n\nCODE=$(pbpaste | base64)\n# Urlencode any + symbols in the base64 encoded string\nCODE=${CODE//+/%2B}\n\nopen \"https://ray.so?#title=$TITLE&code=$CODE&colors=$COLORS&background=$BACKGROUND&darkMode=$DARK_MODE&padding=$PADDING&title=$TITLE&code=$CODE&language=$LANGUAGE\"\n"
  },
  {
    "path": "commands/developer-utils/decode-base64.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Decode Base64\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Decodes clipboard content to Base64 and copies it again.\n\npbpaste | base64 -d | pbcopy\necho \"Decoded\"\n"
  },
  {
    "path": "commands/developer-utils/decode-jwt.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Decode JWT\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon images/jwt-logo.png\n\n# Documentation:\n# @raycast.description Decodes JSON web token from the clipboard.\n\n# JWT function from: \n# https://www.jvt.me/posts/2019/06/13/pretty-printing-jwt-openssl/\nfunction jwt() {\n  for part in 1 2; do\n    b64=\"$(cut -f$part -d. <<< \"$1\" | tr '_-' '/+')\"\n    len=${#b64}\n    n=$((len % 4))\n    if [[ 2 -eq n ]]; then\n      b64=\"${b64}==\"\n    elif [[ 3 -eq n ]]; then\n      b64=\"${b64}=\"\n    fi\n    d=\"$(openssl enc -base64 -d -A <<< \"$b64\")\"\n    python -mjson.tool <<< \"$d\"\n    # don't decode further if this is an encrypted JWT (JWE)\n    if [[ 1 -eq part ]] && grep '\"enc\":' <<< \"$d\" >/dev/null ; then\n        exit 0\n    fi\n  done\n}\n\njwt $(pbpaste)"
  },
  {
    "path": "commands/developer-utils/decode-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Decode URL\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Decodes clipboard content url and copies it again.\n\nfunction urldecode() {\n    local url_encoded=\"${1//+/ }\"\n    printf '%b' \"${url_encoded//%/\\\\x}\"\n}\n\nurldecode $(pbpaste) | pbcopy\necho \"Decoded URL\"\n"
  },
  {
    "path": "commands/developer-utils/delete-current-line.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Delete Current Line\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon ⌨️\n\n# Documentation:\n# @raycast.description This script deletes the line at cursor position.\n# @raycast.author Annie Ma\n# @raycast.authorURL http://www.anniema.co/\n\ntell application \"System Events\"\n    keystroke \"k\" using control down\n    keystroke (ASCII character 8) using command down\nend tell\n"
  },
  {
    "path": "commands/developer-utils/dig.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `dig` to be installed and in $PATH\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Dig\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.icon 🌍\n# @raycast.packageName Internet\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"name\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"type\", \"optional\": true }\n#\n# @raycast.description Perform a dig command with the specified options\n# @raycast.author Tommaso Panozzo\n# @raycase.authorURL https://github.com/tom139\n\ndig $1 $2\n"
  },
  {
    "path": "commands/developer-utils/docker/clean-docker.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clean\n# @raycast.mode compact\n# @raycast.packageName Docker\n\n# Optional parameters:\n# @raycast.icon 🧹\n# @raycast.needsConfirmation true\n\n# Documentation:\n# @raycast.description Script that cleans Docker images, volumes, and containers\n# @raycast.author Quentin Eude\n# @raycase.authorURL https://github.com/qeude\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\ndocker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)\ndocker image prune -a -f\ndocker system prune --volumes -f\ndocker system -df\necho \"Successfully cleaned Docker ✨\"\n"
  },
  {
    "path": "commands/developer-utils/docker/docker-images.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Images\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.icon images/docker.png\n# @raycast.packageName Docker\n#\n# @raycast.description List images in Docker\n# @raycast.author Sebastian Kroll\n# @raycase.authorURL https://github.com/skrollme\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\ndocker images\n"
  },
  {
    "path": "commands/developer-utils/docker/docker-ps.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Containers\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.icon images/docker.png\n# @raycast.packageName Docker\n#\n# @raycast.description List containers in Docker\n# @raycast.author Sebastian Kroll\n# @raycase.authorURL https://github.com/skrollme\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\ndocker ps\n"
  },
  {
    "path": "commands/developer-utils/docker/docker-system-prune.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title System Prune\n# @raycast.mode compact\n#\n# Optional parameters:\n# @raycast.icon images/docker.png\n# @raycast.packageName Docker\n#\n# @raycast.description Remove unused data (system prune)\n# @raycast.author Sebastian Kroll\n# @raycase.authorURL https://github.com/skrollme\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\ndocker system prune -f\n"
  },
  {
    "path": "commands/developer-utils/docker/run-docker.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run\n# @raycast.mode compact\n# @raycast.packageName Docker\n\n# Optional parameters:\n# @raycast.icon ▶️\n# @raycast.needsConfirmation true\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Port Machine\" }  \n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Port Docker\" }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Image\", \"percentEncoded\": true}\n\n# Documentation:\n# @raycast.description Runs a Docker container\n# @raycast.author Fabián Delgado\n# @raycase.authorURL https://github.com/fabdelgado\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\nif ! [[ \"$(docker image inspect $3 2> /dev/null)\" == \"\" ]]; then\n    docker pull $3\nfi\n\ndocker run -d --rm -p $(($1)):$(($2)) $3\n\necho \"Successfully running ${3}🚀\""
  },
  {
    "path": "commands/developer-utils/docker/stop-docker.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `docker for mac` to be installed: https://docs.docker.com/docker-for-mac/install/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop\n# @raycast.mode compact\n# @raycast.packageName Docker\n\n# Optional parameters:\n# @raycast.icon ⏹️\n# @raycast.needsConfirmation true\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Image\", \"percentEncoded\": true}\n\n# Documentation:\n# @raycast.description Stops a Docker container\n# @raycast.author Fabián Delgado\n# @raycase.authorURL https://github.com/fabdelgado\n\nif ! command -v docker &> /dev/null; then\n      echo \"docker for mac is required (https://docs.docker.com/docker-for-mac/install/).\";\n      exit 1;\nfi\n\ndocker stop $1\n\necho \"Successfully stopped $1 ⏹️\""
  },
  {
    "path": "commands/developer-utils/encode-base64.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Encode Base64\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Encodes clipboard content to Base64 and copies it again.\n\npbpaste | base64 | pbcopy\necho \"Encoded\"\n"
  },
  {
    "path": "commands/developer-utils/encode-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Encode URL\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Encodes clipboard content url and copies it again.\n\npbpaste | ( curl -Gso /dev/null -w %{url_effective} --data-urlencode @- \"\" | cut -c 3- || true) | pbcopy\necho \"Encoded URL\"\n"
  },
  {
    "path": "commands/developer-utils/error-info.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires mint and errorinfo\n# Instal via mint Homebrew and errorinfo via Mint: `brew install mint && mint install errorinfo`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Error Info\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon ℹ️\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Error term\" }\n\n# Documentation:\n# @raycast.description Get info about Apple API errors\n# @raycast.author Ronan Rodrigo Nunes\n# @raycast.authorURL https://ronanrodrigo.dev\n\nerrorinfo $1\n"
  },
  {
    "path": "commands/developer-utils/escape-shell-chars.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Escape String for Shell\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Escapes shell character string and copies it again.\n\nescaped=$(pbpaste) && printf '%q' \"$escaped\" | pbcopy\necho \"Escaped string for shell\"\n"
  },
  {
    "path": "commands/developer-utils/flutter-create.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Flutter Create Project\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon images/flutter.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"ProjectName\" }\n# @raycast.packageName flutter-create\n\n# Documentation:\n# @raycast.description Creates A Flutter Project from Raycast\n# @raycast.author Kabilan VS\n# @raycast.authorURL https://github.com/KABILAN235\n\n# Flutter SDK Path. Eg: /Users/$USER/Devtools/flutter/bin\nSDK_PATH=\"/Users/$USER/DevTools/flutter/bin\"\n\n# Default Project Path, ie- This is Where Your Projects will be Stored\nPROJECT_PATH=\"/Users/$USER/Desktop/Dev/FlutterProjects/\"\n\nexport PATH=\"$PATH:$SDK_PATH\"\nexport PATH\nfirst_argument=${1// /+}\ncd $PROJECT_PATH;\nflutter create $first_argument\n\n\n"
  },
  {
    "path": "commands/developer-utils/format-swift.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires swiftformat (https://github.com/nicklockwood/SwiftFormat).\n# Install via homebrew: `brew install swiftformat`\n\n# @raycast.title Format Swift\n# @raycast.author Dean Moore\n# @raycast.authorURL https://github.com/moored\n# @raycast.description Use [swiftformat](https://github.com/nicklockwood/SwiftFormat) to format clipboard content.\n\n# @raycast.icon images/swift.png\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\nif ! command -v swiftformat &> /dev/null; then\n      echo \"swiftformat command is required (https://github.com/nicklockwood/SwiftFormat).\";\n      exit 1;\nfi\n\npbpaste | swiftformat --output stdout | pbcopy\necho \"Swift formatted\"\n"
  },
  {
    "path": "commands/developer-utils/generate-git-ignore.sh",
    "content": "#!/bin/bash\n\n# List of available gitignore types: https://www.toptal.com/developers/gitignore/api/list\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create .gitignore\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 🤐\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Types (react,node,vscode)\", \"optional\": false }\n\n# Documentation:\n# @raycast.description Generates a .gitignore file via https://gitignore.io\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com\n\nparams=\"$1\"\n\nif [[ -z \"$params\" ]]\nthen\n\techo \"Missing params\"\n\texit 1\nfi\n\nresult=$(curl -s \"https://www.toptal.com/developers/gitignore/api/$params\" | sed -e \"1d\")\n\nif [[ \"$result\" =~ !!\\ ERROR.+!! ]]\nthen\n\techo \"Unsupported gitignore type\"\n\texit 1\nfi\n\necho \"$result\" | pbcopy\n\necho \"Copied to clipboard!\"\n"
  },
  {
    "path": "commands/developer-utils/generate-password.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires gpg (https://www.gnupg.org/)\n# Download: https://www.gnupg.org/download/#sec-1-1\n\n# @raycast.schemaVersion 1\n# @raycast.title Generate Password\n# @raycast.mode silent\n# @raycast.author Sven Hofmann\n# @raycast.authorURL https://github.com/hofmannsven\n# @raycast.description Generates a random password and copies it to the clipboard.\n# @raycast.packageName Developer Utilities\n# @raycast.icon 🔐\n\nif ! command -v gpg &> /dev/null; then\n\techo \"gpg command is required (https://www.gnupg.org/).\";\n\texit 1;\nfi\n\ngpg --gen-random -a 0 30 | pbcopy\necho \"Password Generated\"\n"
  },
  {
    "path": "commands/developer-utils/generate-ulid.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `ulid` installed: https://github.com/ulid/javascript\n# Install via npm: `npm install -g ulid`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Generate ULID\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 💻\n# @raycast.packageName Developer Utilities\n\n# Documentation:\n# @raycast.description Generates a ULID and copies it to the clipboard.\n# @raycast.author David Molinero\n# @raycast.authorURL https://github.com/doktor500\n\nNODE_PATH=$(which node | xargs readlink | xargs dirname);\n\nexport PATH=\"$PATH:${NODE_PATH}\";\n\nif ! ulid &> /dev/null; then\n  echo \"ulid is required (https://github.com/ulid/javascript)\";\n  exit 1;\nfi\n\nid=$(ulid);\necho \"$id\" | pbcopy;\necho \"$id\";\n"
  },
  {
    "path": "commands/developer-utils/generate-uuid.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Generate UUID\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Generates a UUID and copies it to the clipboard.\n\nuuidgen | pbcopy\necho \"UUID Generated\"\n"
  },
  {
    "path": "commands/developer-utils/genpasswd.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Generate Password\n# @raycast.mode silent\n# @raycast.packageName Security\n\n# Optional parameters:\n# @raycast.icon images/genpasswd.png\n# @raycast.iconDark images/genpasswd-iconDark.png\n\n# Documentation:\n# @raycast.description Generates an iOS style password\n# @raycast.author everdrone\n# @raycast.authorURL https://github.com/everdrone\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"Sets (3)\", \"optional\": true}\n# @raycast.argument2 {\"type\": \"text\", \"placeholder\": \"Length (6)\", \"optional\": true}\n\nimport sys\nimport string\nimport random\nimport subprocess\nfrom textwrap import wrap\n\n\ndef charset(length: int = 6) -> str:\n    return ''.join(random.choices(string.ascii_lowercase, k=length))\n\n\ndef superset(\n    length: int = 3,\n    set_length: int = 6,\n    numbers: int = 1,\n    uppercase: int = 1,\n    separator: str = '-'\n) -> str:\n    sets = []\n\n    for _ in range(length):\n        sets.append(charset(set_length))\n\n    all = ''.join(sets)\n\n    # insert uppercase\n    for _ in range(uppercase):\n        pick_again = True\n        while pick_again:\n            index = random.randrange(len(all))\n            if all[index].isalpha() and all[index].islower():\n                pick_again = False\n\n        all = list(all)\n        all[index] = all[index].upper()\n        all = ''.join(all)\n\n    # insert numbers\n    for _ in range(numbers):\n        pick_again = True\n        while pick_again:\n            index = random.randrange(len(all))\n            if all[index].isalpha() and all[index].islower():\n                pick_again = False\n\n        all = list(all)\n        all[index] = random.choice(string.digits)\n        all = ''.join(all)\n\n    # split and join with separators\n    sets = wrap(all, set_length)\n    result = separator.join(sets)\n\n    subprocess.run(\"pbcopy\", universal_newlines=True, input=result)\n\n    return result\n\n# stops a crash if this doesn't exist\nif len(sys.argv) > 1:\n    sets = sys.argv[1]\n    if sets.isdigit():\n        sets = int(sets)\nelse:\n    # do not crash, set fallback value\n    sets = 3\n# stops a crash if this doesn't exist\nif len(sys.argv) > 2:\n    s_len = sys.argv[2]\n    if s_len.isdigit():\n        s_len = int(s_len)\nelse:\n    s_len = 6\n\n# This auto copies the password to the user's clipboard\ngeneratedPassword = superset(length=sets, set_length=s_len)\nsubprocess.run(\"pbcopy\", universal_newlines=True, input=generatedPassword)\nprint(generatedPassword)\n"
  },
  {
    "path": "commands/developer-utils/get-ttfb.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Get TTFB (Time to First Byte)\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 🕐\n# @raycast.packageName Developer Utils\n\n# Documentation:\n# @raycast.description Get the TTFB (Time to First Byte) of a website\n# @raycast.author Angelos Michalopoulos\n# @raycast.authorURL https://github.com/miagg\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif [ -z \"$1\" ]; then\n  echo \"Please provide a domain\"\n  exit 1\nfi\n\n# If no url scheme is provided, add https://\nif [[ \"$1\" == http* ]]; then\n  url=\"$1\"\nelse\n  url=\"https://$1\"\nfi\n\necho \"Pinging: $url...\"\n\ncurl -o /dev/null \\\n    -H 'Cache-Control: no-cache' \\\n    -s \\\n    -w \"\\nLookup time:\\t\\t\\t%{time_namelookup}\\nConnect time:\\t\\t%{time_connect}\\nSSL handshake time:\\t%{time_appconnect}\\nPre-Transfer time:\\t%{time_pretransfer}\\nRedirect time:\\t\\t%{time_redirect}\\nTime to first byte:\\t%{time_starttransfer}\\n\\nTotal time:\\t\\t\\t%{time_total}\\n\" \\\n    --fail \\\n    --silent \\\n    --show-error \\\n    \"$url\"\n"
  },
  {
    "path": "commands/developer-utils/git/git-clear-changes.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clear Changes\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.needsConfirmation true\n# @raycast.currentDirectoryPath ~/Developer/script-commands\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Clear all changes\n\ngit clean -d -x --force\ngit reset --hard\n\necho \"Cleared changes\""
  },
  {
    "path": "commands/developer-utils/git/git-save-changes.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Save Changes\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Message\", \"optional\": true }\n# @raycast.currentDirectoryPath ~/Developer/script-commands\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Commit all pending changes. If no commit message is provided, it will amend the changes.\n\nSTATUS=$(git status --short)\n\nif [ -z \"$STATUS\" ]; then\n  echo \"No changes to save\"\n  exit 1\nfi\n\nif [ -n \"$1\" ]; then\n  git commit --all --message \"$1\"\n  echo \"Committed changes\"\nelse\n  git commit -all --amend --no-edit\n  echo \"Amended changes\"\nfi"
  },
  {
    "path": "commands/developer-utils/git/git-standup.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Standup\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Project Path\"}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Since (e.g: 1 week)\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Lists your commits from the last 24 hours. Optionally specify since when, e.g. \"1 week\".\n\nif [ -n \"$1\" ]; then\n  PROJECT_PATH=\"$1\"\nelse\n  echo \"Please give project path\"\n  exit 1\nfi\n\nif [ -n \"$2\" ]; then\n  SINCE=\"$2\"\nelse\n  SINCE=\"yesterday.midnight\"\nfi\ncd \"$PROJECT_PATH\" || exit 1\n\nUSER_NAME=$(git config user.name)\ngit log --author=\"$USER_NAME\" --since=\"$SINCE\" --oneline --pretty=format:\"%s %Cblue(%ar)%Creset\" --color\n"
  },
  {
    "path": "commands/developer-utils/git/git-status.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Status\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 5m\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.currentDirectoryPath ~/Developer/script-commands\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Shows the status of your Git repository.\n\nMESSAGE=\"\"\n\nADDED=$(git status --short | grep -c \" A\")\nif [ $ADDED -gt 0 ]; then\n  MESSAGE=\"$MESSAGE \\\\033[32m$ADDED Added\\\\033[0m\"\nfi\n\nMODIFIED=$(git status --short | grep -c \" M\")\nif [ $MODIFIED -gt 0 ]; then\n  MESSAGE=\"$MESSAGE \\\\033[33m$MODIFIED Modified\\\\033[0m\"\nfi\n\nDELETED=$(git status --short | grep -c \" D\")\nif [ $DELETED -gt 0 ]; then\n  MESSAGE=\"$MESSAGE \\\\033[31m$DELETED Deleted\\\\033[0m\"\nfi\n\nUNTRACKED=$(git status --short | grep -c \"??\")\nif [ $UNTRACKED -gt 0 ]; then\n  MESSAGE=\"$MESSAGE \\\\033[34m$UNTRACKED Untracked\\\\033[0m\"\nfi\n\nif [ -z \"$MESSAGE\" ]; then\n  MESSAGE=\"No pending changes\"\nfi\n\necho -e $MESSAGE"
  },
  {
    "path": "commands/developer-utils/git/git-switch-branch.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch Branch\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n# @raycast.currentDirectoryPath ~/Developer/script-commands\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Switch to a new branch. If not name was provided, it checks out the default branch.\n\nif [ -n \"$1\" ]; then\n  BRANCH_NAME=\"$1\"\nelse\n  BRANCH_NAME=$(git symbolic-ref --short HEAD)\nfi\n\ngit checkout --branch $BRANCH_NAME"
  },
  {
    "path": "commands/developer-utils/git/git-sync-changes.sh",
    "content": "#!/bin/bash\n\n# Note: Set currentDirectoryPath to your local repository.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Sync Changes\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon ./images/git.png\n# @raycast.packageName Git\n# @raycast.currentDirectoryPath ~/Developer/script-commands\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Pulls, rebases and pushes your changes.\n\ngit pull --rebase\ngit push\n\necho \"Synced changes\""
  },
  {
    "path": "commands/developer-utils/github/create-github-gist.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via Homebrew: `brew install jq`\n\n####################################################\n## Set GitHub username and personal access token. ##\n####################################################\n\n# GitHub username\nuser=\n\n# GitHub personal access token\naccess_key=\n\n# @raycast.title Create GitHub Gist from Clipboard\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Create a GitHub Gist from clipboard contents and copy Gist URL.\n\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n# @raycast.mode compact\n# @raycast.needsConfirmation true\n# @raycast.packageName GitHub\n# @raycast.schemaVersion 1\n\nif [ -z ${user+x} ]; then\n\techo \"GitHub username is missing.\";\n\texit 1;\nfi\n\nif [ -z ${access_key+x} ]; then\n\techo \"GitHub personal access token is missing.\";\n\texit 1;\nfi\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is required (https://stedolan.github.io/jq/).\";\n\texit 1;\nfi\n\nclipboard=$(pbpaste)\ngist_content=\"$( jq -nc --arg str \"$clipboard\" '{ \"public\": false, \"files\": { \"gistfile1.txt\": { \"content\": $str } } }' )\"\n\nauth=$(echo -n \"$user:$access_key\" | base64)\nresponse=$( curl -s -X POST -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"Authorization: Basic $auth\" https://api.github.com/gists -d \"$gist_content\" )\n\necho \"$response\" | jq -r '.html_url' | pbcopy\necho \"Created gist and copied URL\"\n"
  },
  {
    "path": "commands/developer-utils/github/github-contributions.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title GitHub Contributions\n# @raycast.mode inline\n# @raycast.refreshTime 2h\n\n# Optional parameters:\n# @raycast.packageName GitHub Contributions\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n\n# Documentation:\n# @raycast.description Show GitHub user contributions from the current year\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n\n# GitHub username is required\nusername=\"\"\n\nurl=\"https://github.com/users/${username}/contributions\"\nresult=$(curl -s $url )\nresultFilter=$(echo \"$result\" | sed -n -e '/<h2 class=\"f4 text-normal mb-2\">/,/<\\/h2>/p')\nresultCleanup=$(echo \"$resultFilter\" | sed -e 's/<[^>]*>//g')\n\necho $resultCleanup\n"
  },
  {
    "path": "commands/developer-utils/github/github-open-commit-history.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Commit History\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/github-logo.png\n# @raycast.iconDark ./images/github-logo-iconDark.png\n# @raycast.packageName GitHub\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Opens the commit history of the filepath in the clipboard or the frontmost window. Alternatively can open the file view on GitHub.\n\n# Configuration:\n\n# Set the branch to open on GitHub.\nBRANCH=\"master\"\n# Set the page to open for the file. Available values: commits, blob, blame\nPAGE=\"commits\"\n# Enable to get verbose output.\nDEBUG=false\n\n# Utils:\n\nget_current_filepath_of_frontmost_application() {\n  osascript -e '\n    tell application \"System Events\" to set frontmostApplication to name of first process whose frontmost is true\n\n    if (frontmostApplication is \"Finder\") then\n      tell application \"Finder\" \n        get POSIX path of (selection as alias)\n      end tell\n    else if (frontmostApplication is \"iTerm2\") then\n      tell application \"iTerm\"\n        tell current session of current window\n          get variable named \"session.path\"\n        end tell\n      end tell\n    else\n      tell application \"System Events\"\n        tell (first process where frontmost is true)\n          get value of attribute \"AXDocument\" of first window\n        end tell\n      end tell\n    end if\n  '\n}\n\n# Main:\n\nCLIPBOARD_CONTENTS=$(pbpaste)\nif [[ -d $CLIPBOARD_CONTENTS || -f $CLIPBOARD_CONTENTS ]]; then\n  FILEPATH=$CLIPBOARD_CONTENTS\nelse\n  FRONTMOST_FILEPATH=$(get_current_filepath_of_frontmost_application)\n  FILEPATH=${FRONTMOST_FILEPATH#\"file://\"}\nfi\n\nif [ \"$DEBUG\" = true ] ; then\n  echo \"Extracted filepath: $FILEPATH\"\nfi\n\nif [[ -d $FILEPATH || -f $FILEPATH ]]; then\n  cd `dirname $FILEPATH`\n\n  if git rev-parse > /dev/null 2>&1; then\n    GIT_REPOSITORY_ROOT_PATH=$(git rev-parse --show-toplevel)\n    RELATIVE_FILEPATH=${FILEPATH#\"$GIT_REPOSITORY_ROOT_PATH/\"}\n\n    BASE=$(git config --get remote.origin.url | sed s/\\\\.git// | sed 's/:/\\//' | sed 's/.*github.com/https:\\/\\/github.com/')\n    URL=\"$BASE/$PAGE/$BRANCH/$RELATIVE_FILEPATH\"\n\n    open $URL\n  else\n    echo \"Not a Git repostiory\"\n    exit 1\n  fi\nelse\n  echo \"Not a valid filepath\"\n  exit 1\nfi"
  },
  {
    "path": "commands/developer-utils/github/github-open-pull-requests-details.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Open Pull Requests\n# @raycast.mode fullOutput\n# @raycast.description Display (detailed) GitHub pull requests\n#\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n#\n# Credits\n# @raycast.author Faye Sipiano\n# @raycast.authorURL https://github.com/FSipiano\n\nrequire 'json'\nrequire 'net/http'\nrequire 'uri'\n\n# Insert a personal access token (https://github.com/settings/tokens)\nAPI_TOKEN = ''\n\nif API_TOKEN.empty?\n  puts 'No API token provided'\n  exit(1)\nend\n\nuri = URI('https://api.github.com/graphql')\nreq = Net::HTTP::Post.new(uri)\nreq['Authorization'] = \"token #{API_TOKEN}\"\nreq.body = '{ \"query\": \"query { viewer { pullRequests(first: 10 states: OPEN) { nodes { baseRepository { name } title number url } } } }\" }'\nreq_options = {\n  use_ssl: uri.scheme == 'https'\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\n  http.request(req)\nend\n\nif res.code == '200'\n  result = JSON.parse(res.body)\n  pull_requests = result['data']['viewer']['pullRequests']['nodes']\n\n  if pull_requests.length == 0\n    puts 'No open pull requests 🎉'\n  else\n    puts \"You have #{pull_requests.length} open pull requests\"\n    pull_requests.each do |pr|\n      puts \"##{pr['number']} #{pr['title']} (#{pr['url']})\"\n    end\n  end\nelse\n  puts 'Failed loading GitHub pull requests'\n  exit(1)\nend\n"
  },
  {
    "path": "commands/developer-utils/github/github-open-pull-requests-page.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Pull Requests page\n# @raycast.mode silent\n# @raycast.description Open your GitHub pull requests page\n#\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n#\n# Credits\n# @raycast.author Faye Sipiano\n# @raycast.authorURL https://github.com/FSipiano\n\nopen https://github.com/pulls/\n"
  },
  {
    "path": "commands/developer-utils/github/github-open-pull-requests.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Pull Requests\n# @raycast.mode inline\n# @raycast.description Display number of open pull requests\n#\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n#\n# Conditional parameters:\n# @raycast.refreshTime 5m\n#\n# Credits\n# @raycast.author Faye Sipiano\n# @raycast.authorURL https://github.com/FSipiano\n\nrequire 'json'\nrequire 'net/http'\nrequire 'uri'\n\n# Insert a personal access token (https://github.com/settings/tokens)\nAPI_TOKEN = ''\n\nif API_TOKEN.empty?\n  puts 'No API token provided'\n  exit(1)\nend\n\nRED = 31\nGREEN = 32\nYELLOW = 33\n\nuri = URI('https://api.github.com/graphql')\nreq = Net::HTTP::Post.new(uri)\nreq['Authorization'] = \"token #{API_TOKEN}\"\nreq.body = '{ \"query\": \"query { viewer { pullRequests(first: 10, states:OPEN) { nodes { title number url } } } }\" }'\nreq_options = {\n  use_ssl: uri.scheme == 'https'\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\n  http.request(req)\nend\n\nif res.code == '200'\n  result = JSON.parse(res.body)\n  pull_requests = result['data']['viewer']['pullRequests']['nodes']\n\n  if pull_requests.length == 0\n    message = \"No open pull requests 🎉\"\n    puts \"\\e[#{GREEN}m#{message}\\e[0m\"\n  else\n    color = (pull_requests.length <= 5) ? YELLOW : RED\n    message = \"You have #{pull_requests.length} open pull requests\"\n    puts \"\\e[#{color}m#{message}\\e[0m\"\n    pull_requests.each do |pr|\n      puts \"##{pr['number']} #{pr['title']} (#{pr['url']})\"\n    end\n  end\nelse\n  puts 'Failed loading GitHub pull requests'\n  exit(1)\nend\n"
  },
  {
    "path": "commands/developer-utils/github/github-repository-stars.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file, \n# remove `.template.` from the filename, set an API token and \n# specify your repository.\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Repository Statistics\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon ⭐️\n\n# Documentation:\n# @raycast.description Show statistics of your GitHub repository.\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\n\n# Configuration\n\n# Insert a token with access to your repository (https://github.com/settings/tokens)\n$api_token = \"\"\n\n# Slug of the owner and repository\n$repository = \"raycast/script-commands\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif $api_token.empty?\n  puts \"No API token provided\"\n  exit(1)\nend\n\nuri = URI(\"https://api.github.com/repos/#{$repository}\")\nreq = Net::HTTP::Get.new(uri)\nreq[\"Authorization\"] = \"token #{$api_token}\"\n\nreq_options = {\n  use_ssl: uri.scheme == \"https\",\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  result = JSON.parse(res.body)\n\n  stars = result[\"stargazers_count\"] \n  forks = result[\"forks_count\"] \n  subscribers = result[\"subscribers_count\"] \n  \n  puts \"#{stars} Stars, #{forks} Forks and #{subscribers} Watchers\"\nelse \n  puts \"Failed loading GitHub repository\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/developer-utils/github/github-repository-stars_all_repos_template.rb",
    "content": "#!/usr/bin/env ruby\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename, set an API token.\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Repository Statistics\n# @raycast.mode inline\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon ⭐️\n\n# Documentation:\n# @raycast.description Show statistics of your GitHub repositories.\n# @raycast.author Valdir Junior\n# @raycast.authorURL https://github.com/valdirjunior011 \n\n# Configuration\n\n# Insert a token with access to your repository (https://github.com/settings/tokens)\n$api_token = \"\"\n\n# Owner of the repositories\n$owner = \"\"\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif $api_token.nil?\n  puts \"API token not provided\"\n  exit(1)\nend\n\nuri = URI(\"https://api.github.com/users/#{$owner}/repos\")\nreq = Net::HTTP::Get.new(uri)\nreq[\"Authorization\"] = \"token #{$api_token}\"\n\nreq_options = {\n  use_ssl: uri.scheme == \"https\",\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  repositories = JSON.parse(res.body)\n\n  total_stars = 0\n  total_forks = 0\n  total_subscribers = 0\n\n  repositories.each do |repo|\n    repo_name = repo[\"full_name\"]\n    url = repo[\"html_url\"]\n\n    repo_uri = URI(\"https://api.github.com/repos/#{repo_name}\")\n    repo_req = Net::HTTP::Get.new(repo_uri)\n    repo_req[\"Authorization\"] = \"token #{$api_token}\"\n\n    repo_res = Net::HTTP.start(repo_uri.hostname, repo_uri.port, req_options) { |http|\n      http.request(repo_req)\n    }\n\n    if repo_res.code == \"200\"\n      result = JSON.parse(repo_res.body)\n\n      stars = result[\"stargazers_count\"]\n      forks = result[\"forks_count\"]\n      subscribers = result[\"subscribers_count\"]\n\n      total_stars += stars\n      total_forks += forks\n      total_subscribers += subscribers\n\n    else\n      puts \"Failed loading statistics for #{repo_name}\"\n    end\n  end\n\n  puts \"Owner: #{$owner} Total Stars: #{total_stars}, Forks: #{total_forks}, Subs: #{total_subscribers}\"\nelse\n  puts \"Failed loading repositories for #{$owner}\"\nend"
  },
  {
    "path": "commands/developer-utils/github/github-review-requests.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Review Requests\n# @raycast.mode inline\n# @raycast.description Display number of Pull Requests requesting your review\n#\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n#\n# Conditional parameters:\n# @raycast.refreshTime 5m\n#\n# Credits\n# @raycast.author Vince Picone\n# @raycast.authorURL https://github.com/vpicone\n\nrequire 'json'\nrequire 'net/http'\nrequire 'uri'\n\n# Insert a personal access token (https://github.com/settings/tokens)\n# No additional permissions are required, leave all the options unchecked\nAPI_TOKEN = ''\n\nif API_TOKEN.empty?\n  puts 'No API token provided'\n  exit(1)\nend\n\nRED = 31\nGREEN = 32\nYELLOW = 33\n\n\nuri = URI('https://api.github.com/graphql')\nreq = Net::HTTP::Post.new(uri)\nreq['Authorization'] = \"token #{API_TOKEN}\"\nreq.body = '{ \"query\": \"query {search(query:\\\"type:pr is:open user-review-requested:@me\\\",type:ISSUE,first:10){issueCount edges{node{...on PullRequest{number title url}}}}}\" }'\nreq_options = {\n  use_ssl: uri.scheme == 'https'\n}\n\nres = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|\n  http.request(req)\nend\n\nif res.code == '200'\n  result = JSON.parse(res.body)\n\n  review_requests = result['data']['search']['edges']\n  review_requests_count = result['data']['search']['issueCount']\n\n  if review_requests_count == 0\n    message = \"No open review requests 🎉\"\n    puts \"\\e[#{GREEN}m#{message}\\e[0m\"\n  else\n    color = (review_requests_count <= 5) ? YELLOW : RED\n    message = \"You have #{review_requests_count} open review requests\"\n    puts \"\\e[#{color}m#{message}\\e[0m\"\n    review_requests.each do |pr|\n      puts \"##{pr['node']['number']} #{pr['node']['title']} (#{pr['node']['url']})\"\n    end\n  end\nelse\n  puts 'Failed loading GitHub review requests'\n  exit(1)\nend\n"
  },
  {
    "path": "commands/developer-utils/github/github-unread-notifications.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via Homebrew: `brew install jq`\n\n##################################################################\n## Set GitHub username and personal access token and uncomment, ##\n## and check toggle for detailed output.                        ##\n##################################################################\n\n# GitHub username\nuser=\n\n# GitHub personal access token\naccess_key=\n\n# Toggle for detailed count\ndetailed=true\n\n# @raycast.title Unread Notifications\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Display (detailed) number of unread GitHub notifications.\n\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n# @raycast.mode inline\n# @raycast.packageName GitHub\n# @raycast.refreshTime 5m\n# @raycast.schemaVersion 1\n\nif [ -z ${user+x} ]; then\n\techo \"GitHub username is missing.\";\n\texit 1;\nfi\n\nif [ -z ${access_key+x} ]; then\n\techo \"GitHub personal access token is missing.\";\n\texit 1;\nfi\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is required (https://stedolan.github.io/jq/).\";\n\texit 1;\nfi\n\nauth=$(echo -n \"$user:$access_key\" | base64)\nresponse=$(curl -s -H \"Accept: application/vnd.github.v3+json\" -H \"Authorization: Basic $auth\" \"https://api.github.com/notifications?per_page=50\")\ncount=$(echo \"$response\" | jq -r 'length')\n\nif [ 0 = $count ]; then\n\techo 'None'\n\nelif [ 50 = $count ]; then\n\techo '50+ unread notifications'\n\t\nelif $detailed; then\n\t\n\tnotifications=$(echo \"$response\" | jq 'group_by(.reason) | map({\n\t\t\"reason\": .[0].reason,\n\t\t\"total\": length\n\t})')\n\n\tfunction reason_label() {\n\t\tlocal reason=$1\n\t\t\n\t\tif [[ $reason = \"ci_activity\" ]]; then\n\t\t\treason=\"CI\"\n\t\telif [[ $reason = \"review_requested\" ]]; then\n\t\t\treason=\"Review\"\n\t\telse\n\t\t\treason=\"$(tr '[:lower:]' '[:upper:]' <<< ${reason:0:1})${reason:1}\"\n\t\tfi\n\t\t\t\n\t\techo $reason\n\t}\n\t\n\techo \"$notifications\" | jq -c '.[]' | \n\twhile IFS=$\"\\n\" read -r c; do\n\t\treason=$(echo \"$c\" | jq -r '.reason')\n\t\treason=$(reason_label $reason)\n\t\ttotal=$(echo \"$c\" | jq -r '.total')\n\t\techo -n \"${reason}:${total} \"\n\tdone\n\t\nelse\n\techo \"$count unread notifications\"\nfi\n"
  },
  {
    "path": "commands/developer-utils/github/open-gh-repo-pr-or-issue.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Visit a Repository, Pull Request, or Issue\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName GitHub\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Organization/Repository\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Pull Request or Issue #\", \"optional\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Open a repository, pull request, or issue on GitHub\n\npath=\"\"\nif [ -n \"$2\" ]; then\n  path=\"/pull/$2\"\nfi\n\nopen \"https://github.com/$1$path\"\n"
  },
  {
    "path": "commands/developer-utils/gitlab/gitlab-issues.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set an Personal access token as\n# well as the GitLab instance url if it is not gitlab.com in gitlabconfig.py\n# You need to copy gitlabconfig.py and gitlabhelper.py next to the script command\n# otherwise it won't work. gitlabconfig.py and gitlabhelper.py are shared between\n# all gitlab script commands.\n#\n# API: https://docs.gitlab.com/ee/api\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Issues\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName GitLab\n# @raycast.icon images/gitlab.png\n\n# Documentation:\n# @raycast.author Michael Aigner\n# @raycast.authorURL https://github.com/tonka3000\n# @raycast.description Show issues from GitLab\n\n\n# Configuration\n# see gitlabconfig.py\n\n# Main program\n\nfrom gitlabhelper import GitLab\ngitlab = GitLab()\ndata = gitlab.get_call(\"issues?state=opened&scope=assigned_to_me\")\nprint(f\"GitLab Issues assigned to you on {gitlab.instance}:\\n\")\nfor e in data:\n  title = e.get(\"title\")\n  web_url = e.get(\"web_url\")\n  reference = e.get(\"references\", {}).get(\"full\")\n  print(f\"* {title} at {reference}\")\n  print(f\"{web_url}\\n\")\n"
  },
  {
    "path": "commands/developer-utils/gitlab/gitlab-mergerequests.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set an Personal access token as\n# well as the GitLab instance url if it is not gitlab.com in gitlabconfig.py\n# You need to copy gitlabconfig.py and gitlabhelper.py next to the script command\n# otherwise it won't work. gitlabconfig.py and gitlabhelper.py are shared between\n# all gitlab script commands.\n#\n# API: https://docs.gitlab.com/ee/api\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Merge Requests\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName GitLab\n# @raycast.icon images/gitlab.png\n\n# Documentation:\n# @raycast.author Michael Aigner\n# @raycast.authorURL https://github.com/tonka3000\n# @raycast.description Show merge requests from GitLab\n\n\n# Configuration\n# see gitlabconfig.py\n\n# Main program\n\nfrom gitlabhelper import GitLab\nimport textwrap\n\ngitlab = GitLab()\ndata = gitlab.get_call(\"merge_requests?state=opened&scope=assigned_to_me\")\nprint(f\"GitLab Merge requests assigned to you on {gitlab.instance}/:\\n\")\n\nfor e in data:\n  title = e.get(\"title\")\n  state = e.get(\"state\")\n  web_url = e.get(\"web_url\")\n  author = e.get(\"author\")\n  name = author.get(\"name\")\n  username = author.get(\"username\")\n  reference = e.get(\"references\", {}).get(\"full\")\n  description = textwrap.shorten(e.get(\"description\"), width=420, placeholder=\"...\")\n  print(f\"[{state}] * {title} at {reference}\\n\")\n  print(f\"{description}\\n\")\n  print(f\"{web_url}\\n\")\n  print(f\"By {name} @{username}\\n\")\n"
  },
  {
    "path": "commands/developer-utils/gitlab/gitlab-todos.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set an Personal access token as\n# well as the GitLab instance url if it is not gitlab.com in gitlabconfig.py\n# You need to copy gitlabconfig.py and gitlabhelper.py next to the script command\n# otherwise it won't work. gitlabconfig.py and gitlabhelper.py are shared between\n# all gitlab script commands.\n#\n# API: https://docs.gitlab.com/ee/api\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title To-Dos\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName GitLab\n# @raycast.icon images/gitlab.png\n\n# Documentation:\n# @raycast.author Michael Aigner\n# @raycast.authorURL https://github.com/tonka3000\n# @raycast.description Show todos from GitLab\n\n\n# Configuration\n# see gitlabconfig.py\n\n# Main program\n\nfrom gitlabhelper import GitLab\ngitlab = GitLab()\ndata = gitlab.get_call(\"todos\")\nprint(f\"GitLab To-Do List on {gitlab.instance}:\\n\")\ntodo_count = len(data)\nprint(f\"To Do {todo_count}\")\nfor todo in data:\n  project_name = todo.get(\"project\", {}).get(\"name_with_namespace\")\n  title = todo.get(\"target\", {}).get(\"title\")\n  web_url = todo.get(\"target\", {}).get(\"web_url\")\n  print(f\"* {title} at {project_name}\")\n  print(f\"{web_url}\\n\")"
  },
  {
    "path": "commands/developer-utils/gitlab/gitlabconfig.py",
    "content": "#\n# fill in your values of this config!\n#\n\n# GitLab instance like https://gitlab.com\ninstance = \"https://gitlab.com\"\n\n# Personal access token, see https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#creating-a-personal-access-token\npat = \"\"\n\nif not instance:\n  print(\"no GitLab instance provided\")\n  exit(1)\n\nif not pat:\n  print(\"no personal access token provided\")\n  exit(1)"
  },
  {
    "path": "commands/developer-utils/gitlab/gitlabhelper.py",
    "content": "import json\nimport urllib.request\nimport ssl\nimport certifi\nimport gitlabconfig as config\n\nclass GitLab:\n    def __init__(self):\n        self.instance = config.instance\n        self.pat = config.pat\n\n    def get_call(self, url):\n        url = f\"{self.instance}/api/v4/{url}\"\n        request = urllib.request.Request(url)\n        request.add_header(\"PRIVATE-TOKEN\", self.pat)\n\n        try:\n            response = urllib.request.urlopen(request, context=ssl.create_default_context(cafile=certifi.where())) # context= avoids local ssl errors\n        except urllib.error.HTTPError as e:\n            print(\"Error code: \", e.code)\n            print(f\"Failed to get todos from {self.instance}\")\n            exit(1)\n        except urllib.error.URLError as e:\n            print(\"Error reason: \", e.reason)\n            print(\"Failed to reach {instance}\")\n            exit(1)\n        else:\n            data_text = response.read().decode(\"utf-8\")\n            return json.loads(data_text)\n"
  },
  {
    "path": "commands/developer-utils/google/google-lighthouse.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires lighthouse (https://developers.google.com/web/tools/lighthouse#cli)\n# Install via npm: `npm install -g lighthouse`\n\n# @raycast.title Lighthouse\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open a [Lighthouse](https://developers.google.com/web/tools/lighthouse/) report of URL.\n\n# @raycast.currentDirectoryPath ~/Desktop\n# @raycast.icon images/google-lighthouse-logo.png\n# @raycast.mode silent\n# @raycast.packageName Google\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif ! command -v lighthouse &> /dev/null; then\n\techo \"lighthouse is required (https://developers.google.com/web/tools/lighthouse#cli).\";\n\texit 1;\nfi\n\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\n\nif [[ $1 =~ $regex ]]; then \n\tlighthouse --quiet --view \"$1\"\nfi\n\necho \"Input is not a valid URL.\""
  },
  {
    "path": "commands/developer-utils/google/google-psi-desktop.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires psi (https://github.com/GoogleChromeLabs/psi)\n# Install via npm: `npm install -g psi`\n\n# @raycast.title PageSpeed Insights - Desktop\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Run a [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) analysis on desktop of URL.\n\n# @raycast.icon images/google-psi-logo.png\n# @raycast.mode fullOutput\n# @raycast.packageName Google\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif ! command -v psi &> /dev/null; then\n\techo \"psi is required (https://github.com/GoogleChromeLabs/psi).\";\n\texit 1;\nfi\n\nurl=$1\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\n\nif [[ $url =~ $regex ]]; then \n\tanalysis=$(psi $url --strategy=desktop 2>&1)\n\t\n\tif [ ${?} -eq 1 ]; then\n\t\techo \"\"\n\t\techo \"There was an error; please try again later.\"\n\telse\n\t\techo \"$analysis\"\n\tfi\n\t\n\tanalysis_url=\"https://developers.google.com/speed/pagespeed/insights/?url=${url}&tab=desktop\"\n\t\n\techo \"\"\n\techo \"Desktop analysis URL:\"\n\techo \"$analysis_url\"\n\t\n\texit 0\nfi\n\necho \"Input is not a valid URL.\""
  },
  {
    "path": "commands/developer-utils/google/google-psi-mobile.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires psi (https://github.com/GoogleChromeLabs/psi)\n# Install via npm: `npm install -g psi`\n\n# @raycast.title PageSpeed Insights - Mobile\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Run a [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) analysis on mobile of URL.\n\n# @raycast.icon images/google-psi-logo.png\n# @raycast.mode fullOutput\n# @raycast.packageName Google\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif ! command -v psi &> /dev/null; then\n\techo \"psi is required (https://github.com/GoogleChromeLabs/psi).\";\n\texit 1;\nfi\n\nurl=$1\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\n\nif [[ $url =~ $regex ]]; then \n\tanalysis=$(psi $url --strategy=mobile 2>&1)\n\t\n\tif [ ${?} -eq 1 ]; then\n\t\techo \"\"\n\t\techo \"There was an error; please try again later.\"\n\telse\n\t\techo \"$analysis\"\n\tfi\n\t\n\tanalysis_url=\"https://developers.google.com/speed/pagespeed/insights/?url=${url}&tab=mobile\"\n\t\n\techo \"\"\n\techo \"Desktop analysis URL:\"\n\techo \"$analysis_url\"\n\t\n\texit 0\nfi\n\necho \"Clipboard does not contain a URL.\""
  },
  {
    "path": "commands/developer-utils/ignore-package-folders-time-machine.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Ignore Package Folders\n# @raycast.mode inline\n# @raycast.refreshTime 1d\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 🧹\n\n# Documentation:\n# @raycast.description Ignore package folders (node_modules, Pods, etc) from Time Machine backups. They might not be big in size (altough they do add up), but they usually have tens of thousands of files, making backups slower than they should be. Many files are worse than big files when copying. You can also add a Spotlight comment to each file, to easily be able to exclude the same folders from Spotlight indexing (disabled by default).\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com\n\n# Change this to your projects' folder.\n# You can use `$HOME` for a relative path to your home folder,\n# for example `\"$HOME/web-projects\"` expands to `/Users/you/web-projects`.\nWORK_DIR=\"\"\nDEPTH=8\n\n# Add or remove as needed, separated by `|`.\nDIRS=\"node_modules|Carthage|Pods\"\n\n# -E means to use extended regex;\n# -maxdepth means it'll drill into that many subfolders, starting at the folder set above,\n# so if you start at `/Users/you/web-projects`, it'll go as far as\n# `/Users/you/web-projects/1/2/3/4/5/6/7/node_modules`;\n# -type d means to search for directories;\n# -iregex means case insensitive regex;\n# -prune means it'll skip matches inside matches, meaning it will skip\n# `/some/path/node_modules/other/node_modules` since `/some/path/node_modules` was matched;\ncmd=(find -E \"$WORK_DIR\" -maxdepth \"$DEPTH\" -type d -iregex \".*\\/($DIRS).*\" -prune)\n\n# Use this to first confirm they're what you want; it'll print them all.\n# \"${cmd[@]}\"\n\n# -exec means it passes all the output to `tmutil`, `{}` is replaced by the pathname of the file, and `\\+` tells it to pass all paths at once.\n\"${cmd[@]}\" -exec tmutil addexclusion {} \\+\n\n# This adds a spotlight metadata comment, so a Smart Folder (or a custom search) can be used to find all these items. The best part is that it won't return any items that are already ignored by Spotlight.\n# To create a Smart Folder (or a custom search) that returns items with this comment, use a Raw Query of `kMDItemFinderComment == \"ignore_spotlight_index\"`.\n# \"${cmd[@]}\" -exec xattr -w com.apple.metadata:kMDItemFinderComment \"ignore_spotlight_index\" {} \\+\n\n# Use these to confirm they're excluded:\n\n# - `[Included] <some/path>` means they will get backed up;\n# - `[Excluded] <some/path>` means they won't get backed up.\n# \"${cmd[@]}\" -exec tmutil isexcluded {} \\;\n\n# `<some/path>: ignore_spotlight_index` means it added the comment;\n# `xattr: <some/path>: No such xattr...` means it didn't add the comment.\n# \"${cmd[@]}\" -exec xattr -p com.apple.metadata:kMDItemFinderComment {} \\+\n\ndate \"+%d %b, %I:%m %p\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-external-ip-v4.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title External IPv4\n# @raycast.mode inline\n# @raycast.packageName Internet\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.description Copies the external IPv4 to the clipboard.\n\nip=$(curl -4 -s -m 5 https://api.ipify.org)\necho $ip | tr -d '\\n' | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-external-ip-v6.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title External IPv6\n# @raycast.mode inline\n# @raycast.packageName Internet\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.description Copies the external IPv6 to the clipboard.\n\nip=$(curl -6 -s -m 5 https://api64.ipify.org)\necho $ip | tr -d '\\n' | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-local-ip-v4.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Local IPv4\n# @raycast.mode inline\n# @raycast.packageName Internet\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.description Copies the local IPv4 to the clipboard.\n\nip=$(ifconfig | grep 'inet.*broadcast' | awk '{print $2}')\nIFS=' ' read -ra array <<< \"$ip\"\necho ${array[0]} | tr -d '\\n' | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-local-ip-v6.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Local IPv6\n# @raycast.mode inline\n# @raycast.packageName Internet\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.description Copies the local IPv6 to the clipboard.\n\nip=$(ifconfig | grep 'inet6.*%en' | awk '{print $2}')\nIFS=' ' read -ra array <<< \"$ip\"\necho ${array[0]} | tr -d '\\n' | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-url-ip-v4.sh",
    "content": "#!/bin/bash\n\n# @raycast.title URL IPv4\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Get IPv4 address of URL.\n\n# @raycast.icon 🌐\n# @raycast.mode compact\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nip=$(dig -4 +short +time=1 $1 | awk '{ print ; exit }')\necho $ip | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/ip/get-url-ip-v6.sh",
    "content": "#!/bin/bash\n\n# @raycast.title URL IPv6\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Get IPv6 address of URL.\n\n# @raycast.icon 🌐\n# @raycast.mode compact\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nip=$(dig -6 +short +time=1 $1 | awk '{ print ; exit }')\necho $ip | pbcopy\necho \"Copied $ip\"\n"
  },
  {
    "path": "commands/developer-utils/is-it-up.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires jq (https://stedolan.github.io/jq/)\n# Install via Homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Is It Up?\n# @raycast.mode compact\n# @raycast.packageName Developer Utils\n#\n# Optional parameters:\n# @raycast.icon 🌐\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Website\" }\n#\n# Documentation:\n# @raycast.description Check if a website is up\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\nif ! command -v jq &> /dev/null; then\n  echo \"jq is required (https://stedolan.github.io/jq/).\";\n  exit 1;\nfi\n\n# Get the url from the user input\nurl=$1\n\n# Remove any protocol prefix (http:// or https://)\nurl=${url#*://}\n\n# Remove any www. prefix\nurl=${url#www.}\n\n# Remove any trailing slash\nurl=${url%/}\n\nstatus_code=$(curl --silent \"https://isitup.org/${url}.json\" | jq '.status_code')\n\n# Sample output:\n#\n# {\n#   \"domain\": \"duckduckgo.com\",\n#   \"port\": 80,\n#   \"status_code\": 1,\n#   \"response_ip\": \"52.142.124.215\",\n#   \"response_code\": 200,\n#   \"response_time\": 0.021\n# }\n\ncase $status_code in\n  1) echo \"$1 is up!\"\n     exit 0\n     ;;\n  2) echo \"$1 is down.\"\n     exit 0\n     ;;\n  3) echo \"Invalid domain: $1\"\n     exit 1\n     ;;\n  *) echo \"Error: unknown status code ($status_code): $1\"\n     exit 1\n     ;;\nesac\n"
  },
  {
    "path": "commands/developer-utils/join-lines.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Join Clipboard Lines by Delimiter\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🛠\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"delimiter\", \"optional\": true }\n# @raycast.packageName Developer Utilities\n\n# Documentation:\n# @raycast.description Join multiple lines of text from the clipboard into a single line, separated by a specified delimiter.\n# @raycast.author decaylala\n# @raycast.authorURL https://github.com/decaylala\n\npbpaste | awk -v d=\"$1\" 'BEGIN {ORS=d} {print}' | awk -v d=\"$1\" 'sub(d \"$\", \"\")' | pbcopy\necho 'Copied to clipboard'\n"
  },
  {
    "path": "commands/developer-utils/json-stringify-text.js",
    "content": "#!/usr/bin/env node\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Json Stringify Text\n// @raycast.mode fullOutput\n\n// Optional parameters:\n// @raycast.icon 💻\n// @raycast.packageName Developer Utilities\n\n// Documentation:\n// @raycast.description Get JSON-formatted text\n// @raycast.author Senthil Prabhu\n\nconst child_process = require(\"child_process\");\nconst fs = require(\"fs\");\n\n// Function to read the output of pbpaste command\nfunction pbpaste() {\n  return new Promise((resolve, reject) => {\n    const child = child_process.spawn('pbpaste');\n\n    // listen on child process stdout\n    let response = \"\";\n    child.stdout.on(\"data\", (chunk) => {\n        response += chunk;\n    });\n\n    child.on(\"close\", (code) => {\n        if (code != 0) {\n            reject();\n        } else {\n            resolve(response);\n        }\n    });\n  });\n};\n\n// Function to copy data to clipboard\nfunction pbcopy(data) {\n  return new Promise(function(resolve, reject) {\n    const child = child_process.spawn('pbcopy');\n\n    child.on('error', function(err) {\n      reject(err);\n    });\n\n    child.on('close', function(err) {\n      resolve(data);\n    });\n\n    child.stdin.write(data);\n    child.stdin.end();\n  });\n};\n\n// Stringify the text from clipboard and copy back to it\npbpaste()\n.then(function(result) {\n  return JSON.stringify(result);\n})\n.then(function(string) {\n  return pbcopy(string);\n})\n.then(function(string) {\n  console.log(string);\n}).catch(function(e) {\n  console.error(new Error('Could not stringify text'));\n  console.error(e);\n});\n"
  },
  {
    "path": "commands/developer-utils/json-to-go-struct.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires json-to-go-cli, jq\n# Install with npm: `npm i json-to-go-cli -g`\n# Install with brew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title JSON to Go Struct\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.argument1 {\"type\": \"text\", \"placeholder\": \"inline\", \"optional\": true}\n# @raycast.icon images/go.png\n\n# Documentation:\n# @raycast.author tiancheng92\n# @raycast.authorURL https://github.com/tiancheng92\n# @raycast.description Convert the copied JSON into a golang structure.\n\nif ! command -v json-to-go &> /dev/null; then\n\techo \"trans command is required (https://github.com/mholt/json-to-go).\";\n\texit 1;\nfi\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq command is required (https://stedolan.github.io/jq/).\";\n\texit 1;\nfi\n\necho \"$(pbpaste)\" | jq &> /dev/null\n\nif [ $(echo $?) != 0 ]; then\n\techo \"json parse error\";\n\techo \"raw data: $(pbpaste)\"\n\texit 1;\nfi\n\nif [ \"$1\" != \"\" ]; then\n\tjson-to-go -s \"$(pbpaste)\" -i\n\tjson-to-go -s \"$(pbpaste)\" -i | pbcopy\nelse\n\tjson-to-go -s \"$(pbpaste)\"\n\tjson-to-go -s \"$(pbpaste)\" | pbcopy\nfi\n"
  },
  {
    "path": "commands/developer-utils/lorem-ipsum.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Lorem Ipsum\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 📝\n\n# Documentation:\n# @raycast.description Copy one paragraph of Lorem Ipsum to clipboard.\n\necho \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Turpis egestas pretium aenean pharetra. Orci eu lobortis elementum nibh tellus molestie. Vulputate dignissim suspendisse in est. Vel pharetra vel turpis nunc. Malesuada nunc vel risus commodo. Nisi vitae suscipit tellus mauris. Posuere morbi leo urna molestie at elementum eu. Urna duis convallis convallis tellus. Urna molestie at elementum eu. Nunc sed blandit libero volutpat.\" | pbcopy \n\necho \"Copied Lorem Ipsum\"\n"
  },
  {
    "path": "commands/developer-utils/md5-hash.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title MD5 Hash\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n#\n# Optional parameters:\n# @raycast.icon 🔐\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"optional\": false }\n#\n# Documentation:\n# @raycast.description Hashing any text data by using MD5 \n# @raycast.author Bin Hua\n# @raycast.authorURL https://github.com/hzb\n\n\necho -n $1 | md5 -r | pbcopy\necho \"Copied to clipboard\""
  },
  {
    "path": "commands/developer-utils/microlink.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `microlink` CLI installed: https://microlink.io/docs/api/getting-started/cli\n# Install via npm: `npm install -g microlink`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Microlink API\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon images/microlink.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"url\", \"optional\": false }\n\n# Documentation:\n# @raycast.description Microlink API integration\n# @raycast.author Kiko Beats\n# @raycast.authorURL https://github.com/kikobeats\n\nmicrolink \"$1\"\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-config-set.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Config Set\n# @raycast.mode compact\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon ⚙️\n\n# Documentation:\n# @raycast.description Pause Minikube cluster\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"property name\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"property value\" }\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube config set \"$1\" \"$2\"\n\necho \"Set $1 to $2\"\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-pause.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause\n# @raycast.mode compact\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon ⏸\n\n# Documentation:\n# @raycast.description Pause Minikube cluster\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube pause\n\necho \"Cluster paused\"\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-start.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start\n# @raycast.mode compact\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon 🚀\n\n# Documentation:\n# @raycast.description Start Minikube cluster\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube start\n\necho \"Cluster started 🚀\"\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-status.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Status\n# @raycast.mode fullOutput\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon ℹ️\n\n# Documentation:\n# @raycast.description Show Minikube cluster status\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube status\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-stop.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop\n# @raycast.mode compact\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon 🤖\n\n# Documentation:\n# @raycast.description Stops a running Minikube cluster\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube stop\n\necho \"Cluster stopped\"\n"
  },
  {
    "path": "commands/developer-utils/minikube/minikube-unpause.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `minikube` to be installed: https://minikube.sigs.k8s.io/docs/start/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unpause\n# @raycast.mode compact\n# @raycast.packageName Minikube\n\n# Optional parameters:\n# @raycast.icon ⏸\n\n# Documentation:\n# @raycast.description Pause Minikube cluster\n# @raycast.author Daniils Petrovs\n# @raycast.authorURL https://danpetrov.xyz\n\nif ! command -v minikube &> /dev/null; then\n\techo \"minikube is required (https://minikube.sigs.k8s.io).\";\n\texit 1;\nfi\n\nminikube unpause\n\necho \"Cluster unpaused\"\n"
  },
  {
    "path": "commands/developer-utils/open-link-simulator.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Deep Link\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Deep Link\" }\n\n# Documentation:\n# @raycast.description Opens a URL inside the currently booted iOS Simulator. Can be used to open deeplinks\n# @raycast.author Tomás Martins\n# @raycast.authorURL https://github.com/tfmart\n# @raycast.icon 🔗\n\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\non run argv\n\tdo shell script \"xcrun simctl openurl booted \" & (item 1 of argv)\nend run"
  },
  {
    "path": "commands/developer-utils/pa11y.sh",
    "content": "#!/bin/bash\n\n# Dependency: requires pa11y (https://github.com/pa11y/pa11y) and pa11y-reporter-html (https://github.com/pa11y/pa11y-reporter-html)\n# Install via npm: `npm install -g pa11y pa11y-reporter-html@1.0.0`\n\n# @raycast.title Run Pa11y\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Run [Pa11y](https://github.com/pa11y/pa11y) web accessibility tool on specified path or URL.\n\n# @raycast.currentDirectoryPath ~/Desktop\n# @raycast.icon images/pa11y-logo.png\n# @raycast.mode compact\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Path or URL\" }\n\nif ! command -v pa11y &> /dev/null; then\n\techo \"pa11y command is required (https://github.com/pa11y/pa11y).\";\n\texit 1;\nfi\n\nif ! command -v pa11y-reporter-html &> /dev/null; then\n\techo \"pa11y-reporter-html command is required for HTML output (https://github.com/pa11y/pa11y-reporter-html).\";\n\texit 1;\nfi\n\npa11y --reporter html \"$1\" > \"pa11y-report.html\"\necho \"Report saved to Desktop\""
  },
  {
    "path": "commands/developer-utils/ping-monitor.template.sh",
    "content": "#!/bin/bash\n\n#########################################################\n## Set IP address or website URL in \"target\" variable. ##\n#########################################################\n\n# IP address or URL.\ntarget=\"\"\n\n# @raycast.title Ping Monitor\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Ping an IP address or URL on an interval.\n\n# @raycast.icon 🌐\n# @raycast.mode inline\n# @raycast.packageName Internet\n# @raycast.refreshTime 10m\n# @raycast.schemaVersion 1\n\nif [ -z ${target+x} ]; then\n\techo \"Target is undefined.\";\n\texit 0\nfi\n\noutput=$(ping -i 0.25 -t 3 -q \"$target\")\nsummary=$(echo \"$output\" | awk 'END{print}')\n\nIFS=' ' read -ra array <<< $summary\ntimes=$(echo ${array[3]})\n\navg=$(echo $times | awk -F/ '{print $2}')\n\necho \"${target}: ${avg}${array[4]}\""
  },
  {
    "path": "commands/developer-utils/ping.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Ping\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Ping an IP address or URL.\n\n# @raycast.icon 🌐\n# @raycast.mode fullOutput\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL or IP address\" }\n\nping -i 0.25 -t 3 \"$1\""
  },
  {
    "path": "commands/developer-utils/prettify-json.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Prettify JSON\n# @raycast.mode fullOutput\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# Documentation:\n# @raycast.description Pretty prints the JSON currently in the clipboard.\n\npbpaste | python -m json.tool"
  },
  {
    "path": "commands/developer-utils/record-simulator.sh",
    "content": "#!/bin/zsh\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Record Simulator\n# @raycast.mode compact\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.author Maxim Krouk\n# @raycast.authorURL https://github.com/maximkrouk\n# @raycast.description Records simulator to Downloads folder\n# @raycast.needsConfirmation true\n# @raycast.icon 📱\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Filename\" }\n# @raycast.currentDirectoryPath ~/Downloads\n\nclipboard=$1\nfilePath=~/Downloads/$clipboard.mp4\nxcrun simctl io booted recordVideo $filePath\nopen -R $filePath\n"
  },
  {
    "path": "commands/developer-utils/run-bash-command.sh",
    "content": "#!/usr/bin/env bash\n\n###############################################################################\n# Title: run-bash-command.sh                                                  #\n#                                                                             #\n# Description: run arbitrary bash command and show ouput in Raycast window.   #                                                                            #\n#                                                                             #\n# Arguments:                                                                  #\n#         <command> Your arbitrary bash commands (oneliner).                  #\n#                   * If blank, it opens the Terminal app and cd to <dir>.    #\n#       <directory> The directory where your command will be excuted.         #\n#                   * If blank, it uses current Finder directory.             #\n#                     * If no open Finder window, then use $HOME.             #\n#                                                                             #\n###############################################################################\n#\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run Command\n# @raycast.description Run arbitrary bash command and return output in Raycast.\n# @raycast.mode fullOutput\n# @raycast.author Boyang Xu\n# @raycast.authorURL https://github.com/BoyangMichael\n#\n# Optional parameters:\n# @raycast.icon images/run-bash-command.png\n# @raycast.packageName Bash Command\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command (Default: open Terminal)\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Directory (Default: Finder)\", \"optional\": true }\n\ncmd=\"$1\"\ndir=\"${2/#\\~/$HOME}\"\n\n# Parse directory\nif [ -z \"$dir\" ] ; then\n\tfinder_dir=$( osascript -e \"tell application \\\"Finder\\\"\" -e \"if exists window 1 then\" -e \"set pathList to (POSIX path of (folder of the front window as alias))\" -e \"pathList\" -e \"end if\" -e \"end tell\" )\n\tif [ -z \"$finder_dir\" ] ; then\n\t\tdir=\"${HOME}\"\n\telse\n\t\tdir=\"$finder_dir\"\n\tfi\nfi\n\n# Action\nif [ -z \"$cmd\" ] ; then\n\tosascript -e \"set dir to \\\"$dir\\\"\" -e \"dir\" -e \"tell application \\\"Terminal\\\"\" -e \"do script \\\"cd \\\" & quoted form of dir\" -e \"activate\" -e \"end tell\"\nelse\n\tTERM=\"linux\" ; export TERM\n\tcd \"$dir\"\n\teval \"$cmd\"\n\tcd \"$OLDPWD\"\nfi\n"
  },
  {
    "path": "commands/developer-utils/run-command-in-finder.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run Command On Front Finder Window\n# @raycast.mode silent\n# @raycast.author Wesley Martin\n# @raycast.authorURL https://github.com/itsmewes\n#\n# Optional parameters:\n# @raycast.icon 🛠\n# @raycast.packageName Developer Utils\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Write command\" }\n\n# Documentation:\n# @raycast.description Runs the specified command in the path of the frontmost Finder window.\n\ndir=$(osascript <<'EOF'\n    tell application \"Finder\"\n        if exists Finder window 1 then\n            get the POSIX path of (target of Finder window 1 as alias)\n        else\n            get the POSIX path of (desktop as alias)\n        end if\n    end tell\nEOF\n)\n( cd \"$dir\" && $@ )\n"
  },
  {
    "path": "commands/developer-utils/search-script-command.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `swift` installed.\n# Install via https://swift.org/download/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Script Command\n# @raycast.mode fullOutput\n# @raycast.packageName Searches\n#\n# Optional parameters:\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n# @raycast.icon 🔎\n# @raycast.description Search for Script Commands available in the Raycast repository\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\"}\n\n# Files related to this Script Command:\n# - search-script-command.sh (this file)\n# - search-script-command.swift\n# - search-script-command (this binary file will be generated by swiftc)\n\nif ! command -v swiftc &> /dev/null; then\n  echo \"Swift is required (https://swift.org/download).\";\n  exit 1;\nfi\n\nfilename=${0##*/}\nbasename=${filename%.*}\nswift_filename=\"$basename.swift\"\n\nif [ ! -f $basename ] && [ -f $swift_filename ]; then\n  $(swiftc $swift_filename -emit-executable -o $basename)\nfi\n\n./$basename \"$1\""
  },
  {
    "path": "commands/developer-utils/search-script-command.swift",
    "content": "/**\n *  Search Script Command - Raycast Script Command\n *  Copyright (c) Thiago Holanda 2021\n *  https://twitter.com/tholanda\n *\n *  Files related to this Script Command:\n *  - search-script-command.sh\n *  - search-script-command.swift (this file)\n *  - search-script-command (this binary file will be generated by swiftc)\n *\n *  MIT license\n *\n */\n\nimport Foundation\n\n// MARK: - Typealiases\n\ntypealias Groups = [Group]\ntypealias ScriptCommands = [ScriptCommand]\ntypealias NSTextCheckingResults = [NSTextCheckingResult]\n\n// MARK: - Regular Expression Helper\n\nfinal class RegEx {\n  static func checkingResults(for regex: String, in text: String) -> NSTextCheckingResults {\n    do {\n      let regex = try NSRegularExpression(\n        pattern: regex,\n        options: [\n          .caseInsensitive,\n          .anchorsMatchLines,\n        ]\n      )\n      \n      let range = NSRange(\n        text.startIndex...,\n        in: text\n      )\n      \n      return regex.matches(\n        in: text,\n        range: range\n      )\n    }\n    catch {\n      print(\"Invalid regex: \\(error.localizedDescription)\")\n      return []\n    }\n  }\n}\n\n// MARK: - Models\n\nstruct RaycastData: Codable {\n  var updatedAt = Date()\n  var groups = Groups()\n  var totalScriptCommands: Int\n}\nstruct Group: Codable {\n  let name: String\n  let path: String\n  var scriptCommands: ScriptCommands = []\n  var subGroups: Groups?\n}\nstruct Icon: Codable {\n  let light: String?\n  let dark: String?\n}\nstruct ScriptCommand: Codable {\n  let identifier: String\n  let createdAt: String\n  let updatedAt: String\n  let schemaVersion: Int\n  let title: String\n  var filename: String\n  let mode: Mode?\n  var packageName: String?\n  let icon: Icon?\n  let authors: [Author]?\n  let details: String?\n  let currentDirectoryPath: String?\n  let needsConfirmation: Bool?\n  let refreshTime: String?\n  let path: String\n  let language: String\n  \n  private(set) var leadingPath: String = \"\"\n  \n  private enum CodingKeys: String, CodingKey {\n    case identifier\n    case createdAt\n    case updatedAt\n    case schemaVersion\n    case title\n    case filename\n    case mode\n    case packageName\n    case icon\n    case authors\n    case details = \"description\"\n    case currentDirectoryPath\n    case needsConfirmation\n    case refreshTime\n    case path\n    case language\n  }\n  \n  mutating func setLeadingPath(_ value: String) {\n    self.leadingPath = value\n  }\n}\nextension ScriptCommand {\n  typealias Authors = [Author]\n  \n  struct Author: Codable, CustomStringConvertible {\n    let name: String?\n    let url: String?\n    \n    var description: String {\n      if let name = name {\n        return \"\\u{001B}[0;33m\\(name.trimmedText)\\u{001B}[0m\"\n      }\n      else if let url = url {\n        return url\n      }\n      \n      return .empty\n    }\n  }\n}\nextension ScriptCommand {\n  enum Mode: String, Codable {\n    case fullOutput\n    case compact\n    case silent\n    case inline\n  }\n}\n\n// MARK: - Author Extension\n\nextension Array where Element == ScriptCommand.Author {\n  var authorDescription: String {\n    var authors = String.empty\n    \n    for author in self {\n      let separator = self.separator(for: author.name ?? .empty)\n      authors += separator + author.description\n    }\n    \n    return authors\n  }\n  \n  func separator(for currentName: String) -> String {\n    if let firstAuthor = first, currentName == firstAuthor.name {\n      return .empty\n    }\n    else if let lastAuthor = last, currentName == lastAuthor.name {\n      return Separator.and\n    }\n    \n    return Separator.comma\n  }\n}\n\nextension ScriptCommand.Authors {\n  enum Separator {\n    static let and = \" and \"\n    static let comma = \", \"\n  }\n}\n\n// MARK: - Extensions\n\nextension ScriptCommand {\n  func contains(_ query: String) -> Bool {\n    var description: String = .empty\n    \n    if let details = self.details {\n      description = details\n    }\n    \n    return title.lowercased().contains(query)\n      || filename.lowercased().contains(query)\n      || description.lowercased().contains(query)\n      || language.lowercased().contains(query)\n  }\n}\nextension ScriptCommand: Comparable {\n  static func < (lhs: ScriptCommand, rhs: ScriptCommand) -> Bool {\n    lhs.title < rhs.title\n  }\n  \n  static func == (lhs: ScriptCommand, rhs: ScriptCommand) -> Bool {\n    lhs.title == rhs.title\n  }\n}\nextension Group: Comparable {\n  static func < (lhs: Group, rhs: Group) -> Bool {\n    lhs.name < rhs.name\n  }\n  \n  static func == (lhs: Group, rhs: Group) -> Bool {\n    lhs.name == rhs.name\n  }\n}\n\n// MARK: - Int Extension\n\nextension Int {\n  enum Unit: Int {\n    case units = 1\n    case tens = 2\n    case hundreds = 3\n    case thousands = 4\n  }\n  \n  var unitForTotal: Unit {\n    switch self {\n    case 0..<10:\n      return .units\n    case 10..<100:\n      return .tens\n    case 100..<1000:\n      return .hundreds\n    default:\n      return .thousands\n    }\n  }\n  \n  func prependZeros(for unit: Unit) -> String {\n    let format = \"%0\\(unit.rawValue)d\"\n    let counter = String(format: format, self)\n    \n    return counter\n  }\n}\n\n// MARK: - String Extension\n\nextension String {\n  static var newLine = \"\\n\"\n  static var empty = \"\"\n  \n  var trimmedText: String {\n    trimmingCharacters(in: .whitespacesAndNewlines)\n  }\n  \n  private func value(of range: NSRange) -> String? {\n    var value: String?\n    \n    if range.location != NSNotFound, range.length > 0, let rangeString = Range<String.Index>(range, in: self) {\n      value = String(self[rangeString])\n    }\n    \n    return value\n  }\n  \n  func clearMarkdownLink() -> String {\n    var content = self\n    \n    let regex = #\"\\[(.+?)\\]\\((.+?)\\)\"#\n    let results = RegEx.checkingResults(for: regex, in: content)\n    \n    results.compactMap { result -> [String]? in\n      guard result.numberOfRanges == 3 else {\n        return nil\n      }\n      \n      guard\n        let match = content.value(of: result.range(at: 0)),\n        let value = content.value(of: result.range(at: 1))\n      else {\n        return nil\n      }\n      \n      return [match, value]\n    }\n    .forEach { item in\n      content = content.replacingOccurrences(of: item[0], with: item[1])\n    }\n    \n    return content.trimmedText\n  }\n}\n\n// MARK: - Store\n\nfinal class ScriptCommandsStore {\n  enum StoreError: Error {\n    case emptyData\n  }\n  \n  private var totalScriptCommands: Int = 0\n  \n  private var scriptCommands: ScriptCommands = []\n  \n  private let extensionsURL = URL(string: \"https://raw.githubusercontent.com/raycast/script-commands/master/commands/extensions.json\")\n  \n  private func githubURL(for path: String) -> String {\n    \"https://github.com/raycast/script-commands/blob/master/commands/\\(path)\"\n  }\n  \n  private func loadData() throws -> RaycastData {\n    let urlSession = URLSession.shared\n    var data: Data?\n    \n    let semaphore = DispatchSemaphore(value: 0)\n    \n    guard let url = extensionsURL else {\n      throw URLError(.badURL)\n    }\n    \n    let task = urlSession.dataTask(with: url) { responseData, response, error in\n      data = responseData\n      \n      semaphore.signal()\n    }\n    \n    task.resume()\n    semaphore.wait()\n    \n    guard let unwrappedData = data else {\n      throw StoreError.emptyData\n    }\n    \n    let decoder = JSONDecoder()\n    decoder.dateDecodingStrategy = .iso8601\n    \n    let raycastData = try decoder.decode(RaycastData.self, from: unwrappedData)\n    \n    return raycastData\n  }\n  \n  func searchCommand(using query: String) {\n    do {\n      let data = try loadData()\n      totalScriptCommands = data.totalScriptCommands\n      \n      search(for: query, in: data.groups)\n      \n      if scriptCommands.count > 0 {\n        print(\n          renderOutput(\n            for: scriptCommands\n          )\n        )\n      }\n      else {\n        print(\"No script command found with '\\(query)'\")\n      }\n    }\n    catch {\n      print(error)\n      exit(1)\n    }\n  }\n  \n  private func search(for query: String, in groups: Groups) {\n    for group in groups {\n      search(\n        for: query,\n        in: group,\n        leadingPath: group.path\n      )\n    }\n    \n    scriptCommands = scriptCommands.sorted()\n  }\n  \n  private func search(for query: String, in group: Group, leadingPath: String = \"\") {\n    if group.scriptCommands.count > 0 {\n      for var scriptCommand in group.scriptCommands {\n        \n        if scriptCommand.contains(query) {\n          scriptCommand.setLeadingPath(\n            \"\\(leadingPath)/\\(scriptCommand.filename)\"\n          )\n          \n          self.scriptCommands.append(scriptCommand)\n        }\n      }\n    }\n    \n    if let subGroups = group.subGroups {\n      for subGroup in subGroups {\n        search(\n          for: query,\n          in: subGroup,\n          leadingPath: \"\\(leadingPath)/\\(subGroup.path)\"\n        )\n      }\n    }\n  }\n  \n  private func renderOutput(for scriptCommands: ScriptCommands) -> String {\n    let total = scriptCommands.count\n    let unit = total.unitForTotal\n    var contentString = \"Script Commands found: \\u{001B}[0;32m\\(total)\\u{001B}[0m in \\u{001B}[0;32m\\(totalScriptCommands)\\u{001B}[0m\"\n    \n    for (index, scriptCommand) in scriptCommands.enumerated() {\n      var title = String.empty\n      var author = String.empty\n      \n      if let value = scriptCommand.authors {\n        author = \"(by \\(value.authorDescription))\"\n      }\n      \n      let position = Int(index + 1).prependZeros(for: unit)\n      title = \"\\(position)) \\u{001B}[0;31m\\(scriptCommand.title.clearMarkdownLink())\\u{001B}[0m \\(author)\"\n      \n      if contentString.count > 0 {\n        contentString += .newLine + .newLine\n      }\n      \n      contentString += title.trimmedText\n      \n      if let details = scriptCommand.details {\n        contentString += .newLine\n        contentString += details.clearMarkdownLink()\n      }\n      \n      contentString += .newLine\n      contentString += \"Language: \\u{001B}[0;31m\\(scriptCommand.language.capitalized)\\u{001B}[0m\"\n      \n      contentString += .newLine\n      contentString += githubURL(for: scriptCommand.leadingPath)\n    }\n    \n    return contentString\n  }\n}\n\nif CommandLine.arguments.count > 1 {\n  let query = CommandLine.arguments[1].lowercased().trimmedText\n\n  if query.isEmpty {\n    print(\"Query must not be empty\")\n  }\n  else {\n    let store = ScriptCommandsStore()\n    store.searchCommand(using: query)\n  }\n}\n"
  },
  {
    "path": "commands/developer-utils/sentry/sentry-unresolved-issues-by-project.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set an API token as\n# well as the Sentry organization.\n#\n# API: https://docs.sentry.io/api/events/list-a-projects-issues/\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unresolved Issues By Project\n# @raycast.mode fullOutput\n\n# Conditional parameters:\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName Sentry\n# @raycast.icon images/sentry.png\n# @raycast.iconDark images/sentry-dark.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Project\" }\n\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Show unresolved issues in the last 24 hours (by project) from Sentry.\n\n#########################\n##### Configuration #####\n#########################\n\n# API token with `project:read` scope (https://sentry.io/settings/account/api/auth-tokens/)\nAPI_TOKEN = \"\"\n\n# Slug of organization the issues belong to\nORGANIZATION = \"\"\n\nif not API_TOKEN:\n  print(error(\"No API token provided\"))\n  exit(1)\n\nif not ORGANIZATION:\n  print(error(\"No Sentry organization provided\"))\n  exit(1)\n\n# Main program\nimport json, sys, urllib.request\nfrom datetime import datetime as dt\n\ncolors = {\n  'ok': '\\033[92m',\n  'error': '\\033[91m',\n  'end': '\\033[0m',\n  'warn': '\\033[93m',\n}\n\ndef error(message):\n  return f\"{colors['error']}{message}{colors['end']}\"\n\ndef ok(message):\n  return f\"{colors['ok']}{message}{colors['end']}\"\n\ndef warn(message):\n  return f\"{colors['warn']}{message}{colors['end']}\"\n\nproject = sys.argv[1]\nif not project:\n  print(error(\"No Sentry project provided\"))\n  exit(1)\n\nrequest = urllib.request.Request(\n  method=\"GET\",\n  url=f\"https://sentry.io/api/0/projects/{ORGANIZATION}/{project}/issues/?statsPeriod=24h&query=is:unresolved\",\n  headers={ \"Authorization\": f\"Bearer {API_TOKEN}\" }\n)\n\ntry:\n  response = urllib.request.urlopen(request)\nexcept urllib.error.HTTPError as e:\n  print(f\"{error('Failed to get unresolved issues from Sentry:')} {e.code} {e.reason}\")\n  exit(1)\nexcept urllib.error.URLError as e:\n  print(f\"{error('Failed to reach Sentry:')} {e.reason}\")\n  exit(1)\nelse:\n  unresolved_issues = json.loads(response.read().decode(\"utf-8\"))\n  unresolved_issues_count = len(unresolved_issues)\n\n  if unresolved_issues_count == 0:\n    print(ok(\"No unresolved issues in the last 24 hours.\"))\n  else:\n    issue_text = \"issue\" if unresolved_issues_count == 1 else \"issues\"\n    print(error(f\"{unresolved_issues_count} unresolved {issue_text} in the last 24 hours:\\n\"))\n\n    for i, issue in enumerate(unresolved_issues, 1):\n      last_seen = dt.strptime(issue['lastSeen'], \"%Y-%m-%dT%H:%M:%S.%fZ\").strftime('%b %d, %Y at %I:%M %p')\n\n      print(f\"{i}. {warn(issue['title'])}\")\n      print(f\"   Last seen {last_seen}.\")\n      print(f\"   {issue['permalink']}\\n\")\n"
  },
  {
    "path": "commands/developer-utils/sentry/sentry-unresolved-issues.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set an API token as\n# well as the Sentry organization and project.\n#\n# API: https://docs.sentry.io/api/events/list-a-projects-issues/\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unresolved Issues\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 1h\n\n# Optional parameters:\n# @raycast.packageName Sentry\n# @raycast.icon images/sentry.png\n# @raycast.iconDark images/sentry-dark.png\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Show unresolved issues of the last 24 hours from Sentry.\n\n\n# Configuration\n\n# API token with `project:read` scope (https://sentry.io/settings/account/api/auth-tokens/)\nAPI_TOKEN = \"\"\n\n# Slug of organization the issues belong to\nORGANIZATION = \"\"\n\n# Slug of project the issues belong to\nPROJECT = \"\"\n\nif not API_TOKEN:\n  print(\"No API token provided\")\n  exit(1)\n\nif not ORGANIZATION or not PROJECT:\n  print(\"No Sentry organization or project provided\")\n  exit(1)\n\n\n# Main program\n\nimport json\nimport urllib.request\n\nurl = f\"https://sentry.io/api/0/projects/{ORGANIZATION}/{PROJECT}/issues/?statsPeriod=24h&query=is:unresolved\"\nrequest = urllib.request.Request(url)\nrequest.add_header(\"Authorization\", f\"Bearer {API_TOKEN}\")\n\ntry:\n  response = urllib.request.urlopen(request)\nexcept urllib.error.HTTPError as e:\n  print(\"Error code: \", e.code)\n  print(\"Failed to get unresolved issues from Sentry\")\n  exit(1)\nexcept urllib.error.URLError as e:\n  print(\"Error reason: \", e.reason)\n  print(\"Failed to reach Sentry\")\n  exit(1)\nelse:\n  data = response.read().decode(\"utf-8\")\n  unresolved_issues = json.loads(data)\n  unresolved_issues_count = len(unresolved_issues)\n  has_unresolved_issues = unresolved_issues_count > 0\n  \n  message = f\"{unresolved_issues_count} in the last 24 hours\" if has_unresolved_issues else \"None in the last 24 hours\"\n  print(message)\n"
  },
  {
    "path": "commands/developer-utils/sha1-hash.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title SHA1 Hash\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n#\n# Optional parameters:\n# @raycast.icon 🔐\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"text\", \"optional\": false }\n#\n# Documentation:\n# @raycast.description Hashing any text data by using SHA1 \n# @raycast.author Bin Hua\n# @raycast.authorURL https://github.com/hzb\n\n\necho -n $1 | shasum | tr -d '-' | pbcopy\necho \"Copied to clipboard\""
  },
  {
    "path": "commands/developer-utils/solana/solana-tx-blink-extract.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Extract Transaction from Blink Response\n# @raycast.mode silent\n# @raycast.packageName Solana\n\n# Optional parameters:\n# @raycast.icon ./images/solana-logo.png\n\n# Documentation:\n# @raycast.description Extract transaction from Blink endpoint in clipboard and replaces with the transaction\n# @raycast.author bjoerndotsol\n# @raycast.authorURL https://github.com/bjoerndotsol\n\n# Get clipboard content\ninput=$(pbpaste)\n\n# Check if \"transactions\" (plural) exists\nif echo \"$input\" | grep -q '\"transactions\"'; then\n    echo \"❌ Error: Multiple transactions detected. This script only works with a single transaction.\"\n    exit 1\nfi\n\n# Extract transaction value using grep and sed\ntransaction=$(echo \"$input\" | grep -o '\"transaction\"\\s*:\\s*\"[^\"]*\"' | sed 's/\"transaction\"\\s*:\\s*\"\\([^\"]*\\)\"/\\1/')\n\n# Check if transaction was found\nif [ -z \"$transaction\" ]; then\n    echo \"❌ Error: No transaction property found in the input.\"\n    exit 1\nfi\n\n# Copy transaction to clipboard\necho \"$transaction\" | pbcopy\n\n# Show success message\necho \"✅ Transaction copied to clipboard!\"\n"
  },
  {
    "path": "commands/developer-utils/solana/solana-tx-details.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title View Solana Transaction\n# @raycast.mode silent\n# @raycast.packageName Solana\n\n# Optional parameters:\n# @raycast.icon ./images/solana-logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Transaction Signature\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Network\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Opens a Solana transaction in Solscan. Network: empty/mainnet, d/dev/devnet, t/test/testnet\n# @raycast.author bjoerndotsol\n# @raycast.authorURL https://github.com/bjoerndotsol\n\n# Get transaction signature from first argument\nSIGNATURE=\"$1\"\n\n# Get network parameter (optional, defaults to mainnet)\nNETWORK_PARAM=$(echo \"$2\" | tr '[:upper:]' '[:lower:]') # Convert to lowercase\n\n# Determine the network cluster based on the parameter\nif [[ -z \"$NETWORK_PARAM\" ]]; then\n    # Empty or not provided = mainnet\n    CLUSTER=\"\"\nelif [[ \"$NETWORK_PARAM\" == d* ]]; then\n    # Starts with 'd' = devnet\n    CLUSTER=\"?cluster=devnet\"\nelif [[ \"$NETWORK_PARAM\" == t* ]]; then\n    # Starts with 't' = testnet\n    CLUSTER=\"?cluster=testnet\"\nelse\n    # Default to mainnet for unrecognized input\n    CLUSTER=\"\"\nfi\n\n# Construct the Solscan URL\nURL=\"https://solscan.io/tx/${SIGNATURE}${CLUSTER}\"\n\n# Open the URL in the default browser\nopen \"$URL\"\n\necho \"Opening transaction in Solscan: $URL\"\n"
  },
  {
    "path": "commands/developer-utils/solana/solana-tx-inspector.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open in Solana Inspector\n# @raycast.mode silent\n# @raycast.packageName Solana\n\n# Optional parameters:\n# @raycast.icon ./images/solana-logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Signed transaction (base64)\" }\n\n# Documentation:\n# @raycast.description Extracts the message from a signed Solana transaction and opens Explorer's Inspector with it.\n# @raycast.author bjoerndotsol\n# @raycast.authorURL https://github.com/bjoerndotsol\n\n# This script decodes a full signed Solana transaction (base64)\n# and reconstructs a Solana Explorer Inspector link.\n# Supports both legacy and versioned transactions.\n\nTX_BASE64=$(printf \"%s\" \"$1\" | tr -d '[:space:]')\n\nif [[ -z \"$TX_BASE64\" ]]; then\n  echo \"❌ Please provide a base64-encoded transaction.\"\n  exit 1\nfi\n\n# Use Python to extract the message portion (skip signatures)\nMESSAGE_BASE64=$(python3 - \"$TX_BASE64\" <<'PY'\nimport sys, base64, binascii, urllib.parse\n\ntry:\n    tx_b64 = sys.argv[1]\n    b = base64.b64decode(tx_b64)\nexcept (binascii.Error, ValueError) as e:\n    print(f\"Error decoding base64: {e}\", file=sys.stderr)\n    sys.exit(1)\n\n# Transaction format:\n# [u8: num_signatures] [signatures * 64 bytes] [message...]\n# The message may start with a version byte (0x80 | version) for versioned transactions\nif not b or len(b) < 2:\n    print(\"Transaction too short\", file=sys.stderr)\n    sys.exit(1)\n\nnum_signatures = b[0]\noffset = 1 + num_signatures * 64\n\nif offset >= len(b):\n    print(f\"Invalid transaction: offset {offset} >= length {len(b)}\", file=sys.stderr)\n    sys.exit(1)\n\n# Extract message (includes version byte if present)\nmsg = b[offset:]\nmsg_b64 = base64.b64encode(msg).decode()\n\n# URL encode (double encoding for Explorer)\nencoded = urllib.parse.quote(msg_b64, safe='')\nprint(encoded)\nPY\n)\n\n# Check if extraction failed\nif [[ $? -ne 0 ]] || [[ -z \"$MESSAGE_BASE64\" ]]; then\n  echo \"❌ Could not extract transaction message.\"\n  exit 1\nfi\n\n# Dummy signature array for Inspector (Explorer only needs valid JSON)\nDUMMY_SIGS='[\"1111111111111111111111111111111111111111111111111111111111111111\"]'\nENCODED_SIGS=$(python3 -c \"import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))\" \"$DUMMY_SIGS\")\n\nURL=\"https://explorer.solana.com/tx/inspector?signatures=${ENCODED_SIGS}&message=${MESSAGE_BASE64}\"\n\nopen \"$URL\"\necho \"✅ Opening Solana Explorer Inspector\"\n"
  },
  {
    "path": "commands/developer-utils/strong-password-generator.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Strong Password Generator\n# @raycast.mode compact\n# @raycast.packageName Developer Utils\n\n# Optional parameters:\n# @raycast.icon 🔐\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Length\"}\n\n# Documentation:\n# @raycast.author Nitin Gupta\n# @raycast.authorURL https://twitter.com/gniting\n# @raycast.description Generate a strong password of requested character length\n\nopenssl rand -base64 $1 | head -c$1 | pbcopy; echo -n `pbpaste`\n"
  },
  {
    "path": "commands/developer-utils/time-between-dates.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Time Between Dates\n// @raycast.mode fullOutput\n\n// Optional parameters:\n// @raycast.icon 🕒\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"First Date (Default: now)\", \"optional\":true}\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Second Date\" }\n// @raycast.description Given two dates returns the time between them in multiple units of measure.\n// @raycast.packageName Developer Utilities\n\n// Documentation:\n// @raycast.author Federico Miraglia\n// @raycast.authorURL https://github.com/Mitra98t\n\nconst dateReg = new RegExp(/^\\d{4}\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$/)\n\nvar firstD = process.argv.slice(2)[0]\nvar secondD = process.argv.slice(2)[1]\n\nif(firstD != \"\"){\n    if(!dateReg.test(secondD)){\n        console.log(\"Use format yyyy-mm-dd or yyyy-m-d\")\n        return null\n    }\n    else {\n        firstD = new Date(firstD)\n    }\n}\nelse {\n    firstD = new Date()\n}\n\nif(!dateReg.test(secondD)){\n    console.log(\"Use format yyyy-mm-dd or yyyy-m-d\")\n    return null\n}\nelse{\n    secondD = new Date(secondD)\n}\n\nvar firstD1am = new Date(`${firstD.getFullYear()}-${firstD.getMonth() + 1}-${firstD.getDate()}`)\n\nvar diffMS = Math.abs(secondD.getTime() - firstD.getTime())\nvar diffMS1Am = Math.abs(secondD.getTime() - firstD1am.getTime())\n\nvar diffDays = Math.round(diffMS1Am / (1000 * 3600 * 24))\nvar diffHours = Math.round(diffMS / (1000 * 3600))\nvar diffYears = (diffMS / 31556952000).toFixed(2)\n\nconsole.log(`There are ${diffMS} milliseconds`);\nconsole.log(`There are ${diffHours} hours`);\nconsole.log(`There are ${diffDays} days today excluded`);\nconsole.log(`There are ${diffYears} years`);\nconsole.log(`Between the two given dates.`);"
  },
  {
    "path": "commands/developer-utils/time-calculator.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Time Calculator\n// @raycast.mode compact\n\n// Optional parameters:\n// @raycast.icon 🕒\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Starting Date (Default: now)\", \"optional\":true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Time to Add/Subtract (eg: -44, 44, +44)\" }\n// @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"s, m, h, d, w, y (Default: h)\", \"optional\":true}\n// @raycast.description Add or Subtract specified amount of time from given date.\n// @raycast.packageName Developer Utilities\n\n// Documentation:\n// @raycast.author Federico Miraglia\n// @raycast.authorURL https://github.com/Mitra98t\n\nconst dateReg = new RegExp(/^\\d{4}\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$/)\n\nvar value = process.argv.slice(2)[1]\nvar unit = process.argv.slice(2)[2] == \"\" ? \"h\" : process.argv.slice(2)[2]\nvar operator = \"\"\n\nif (unit != \"s\" && unit != \"m\" && unit != \"h\" && unit != \"d\" && unit != \"w\" && unit != \"y\") {\n    console.log(\"Use s, m, h, d, w, y as units of measure\")\n    return null\n}\n\nif (!/^[-\\+]?\\d+$/.test(value)) {\n    console.log(\"Only numbers eg: -44, 44, +44\")\n    return null\n}\nelse{\n    operator = value.charAt(0)\n    if(/^[-\\+]$/.test(operator))\n        value = value.substring(1)\n}\n\nfunction conversion(n, unit) {\n    switch (unit) {\n        case \"s\":\n            return n * 1000\n            break;\n        case \"m\":\n            return n * 60000\n            break;\n        case \"h\":\n            return n * 3600000\n            break;\n        case \"d\":\n            return (n * 24) * 3600000\n            break;\n        case \"w\":\n            return ((n * 7) * 24) * 3600000\n            break;\n        case \"y\":\n            return n * 31556952000\n            break;\n\n        default:\n            return { err: true, message: \"Wrong time format\" }\n            break;\n    }\n}\n\n\nvar nowDate = process.argv.slice(2)[0]\nif (nowDate != \"\") {\n    if(!dateReg.test(nowDate)){\n        console.log(\"Use format yyyy-mm-dd or yyyy-m-d\")\n        return null\n    }\n    else{\n        nowDate = new Date(nowDate)\n    }\n}\nelse{\n    nowDate = new Date()\n}\n\nvar nowMS = nowDate.getTime()\n\nvar resMS = operator !== \"-\" ? nowMS + conversion(value, unit) : nowMS - conversion(value, unit)\n\nvar resDate = new Date(resMS)\n\nvar resString = `${resDate.getFullYear()}-${resDate.getMonth() + 1}-${resDate.getDate()} | ${resDate.getHours()}:${resDate.getMinutes()}:${resDate.getSeconds()} | Unix ${resMS}`\n\nconsole.log(resString)"
  },
  {
    "path": "commands/developer-utils/tldr.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Print TLDR doc\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"OS [linux, osx, sunos, windows]\", \"optional\": true }\n# @raycast.packageName Developer Utils\n\n# @Documentation:\n# @raycast.description Print the tldr documentation for a command\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\nif ! command -v tldr &>/dev/null; then\n    echo \"tldr CLI is not installed.\"\n    echo \"Installation instructions: https://dbrgn.github.io/tealdeer/installing.html\"\n    exit 1\nfi\n\ncommand=$1\nos=$2\n\nif test -z \"$os\"; then\n    tldr \"$command\" --color always\nelse\n    tldr \"$command\" --os \"$os\" --color always\nfi\n"
  },
  {
    "path": "commands/developer-utils/toggle_ssh_proxy_tunnel.template.sh",
    "content": "#!/bin/bash\n\n# Raycast Script Command\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle SSH SOCKS Tunnel\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon 🔒\n# @raycast.packageName Developer Utilities\n#\n# Documentation:\n# @raycast.description Toggles an SSH SOCKS proxy tunnel on and off.\n# @raycast.author Andrii Barabash\n# @raycast.authorURL https://github.com/AndriiBarabash\n\n# --- Configuration ---\n# Replace these with your own values\nSSH_USER=\"<your_user>\"\nSSH_HOST=\"<your_host>\"\nSSH_PORT=\"<your_port>\"\nINTERFACE=\"<your_network_interface>\" # e.g., \"Wi-Fi\" or \"Ethernet\"\nPROXY_PORT=\"<your_proxy_port>\"       # e.g., 1080\n# --- End Configuration ---\n\nif pgrep -f \"ssh -D $PROXY_PORT\" >/dev/null; then\n  echo \"SSH SOCKS tunnel is running. Turning it off...\"\n\n  # Kill the SSH process\n  pkill -f \"ssh -D $PROXY_PORT\"\n\n  # Disable the SOCKS proxy\n  networksetup -setsocksfirewallproxystate \"$INTERFACE\" off\n\n  echo \"Tunnel and proxy disabled.\"\nelse\n  echo \"SSH SOCKS tunnel is not running. Turning it on...\"\n\n  # Start the SSH tunnel\n  ssh -D \"$PROXY_PORT\" -f -C -q -N -p \"$SSH_PORT\" \"$SSH_USER\"@\"$SSH_HOST\"\n\n  # Enable the SOCKS proxy\n  networksetup -setsocksfirewallproxy \"$INTERFACE\" 127.0.0.1 \"$PROXY_PORT\"\n  networksetup -setsocksfirewallproxystate \"$INTERFACE\" on\n\n  echo \"Tunnel and proxy enabled.\"\nfi\n"
  },
  {
    "path": "commands/developer-utils/transform-case.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Transform Case\n# @raycast.mode compact\n# @raycast.packageName Developer Utils\n\n# Optional parameters:\n# @raycast.icon 🔠\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"L)ower, U)pper or T)itle?\" }\n\n# Documentation:\n# @raycast.author Nitin Gupta\n# @raycast.authorURL https://twitter.com/gniting\n# @raycast.description Transform the case of clipboard content. Defaults to lower case if no conversion type is specified.\n\ncase $1 in\n\n[Uu] ) \n    pbpaste | awk '{print toupper($0)}' | pbcopy; echo -n `pbpaste`\n    ;;\n[Tt] )\n    pbpaste | awk '{print tolower($0)}' | awk '{for(j=1;j<=NF;j++){ $j=toupper(substr($j,1,1)) substr($j,2) }}1' | pbcopy; echo -n `pbpaste`\n    ;;\n* )\n    pbpaste | awk '{print tolower($0)}' | pbcopy; echo -n `pbpaste`\n    ;;\nesac\n"
  },
  {
    "path": "commands/developer-utils/trim-git-commit-hash.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Trim Git Commit Hash\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Trim full git commit hash down to seven characters.\n\n# @raycast.icon ✂\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Full git commit hash\" }\n\nstr=\"$1\"\necho ${str:0:7} | tr -d '\\n' | pbcopy\n\necho \"Copied to clipboard\"\n"
  },
  {
    "path": "commands/developer-utils/unix-timestamp.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Current Epoch Unix Timestamp\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Copy the current epoch Unix timestamp.\n# @raycast.packageName Developer Utils\n# @raycast.icon ⏱️\n\necho -n $(date +\"%s\") | pbcopy\necho \"Unix timestamp copied\"\n"
  },
  {
    "path": "commands/developer-utils/unshorten-url.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unshorten URL\n# @raycast.author Nikita Galaiko\n# @raycast.authorURL https://github.com/ngalaiko\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n\n# Optional parameters:\n# @raycast.icon 🔗\n\n# Documentation:\n# @raycast.description Unshortens clipboard content url and copies the result again.\n\n## Please note that https://unshorten.me has a limit of unique 10 requests per hour:\n## https://unshorten.me/api\n\nfunction resolve() {\n    local url_short=\"${1//+/ }\"\n    local schema_less=\"$(sed 's/https\\{0,1\\}:\\/\\///g' <<<\"${url_short}\")\"\n    local resolved=\"$(curl --silent https://unshorten.me/s/${schema_less})\"\n    printf '%b' \"${resolved//%/\\\\x}\"\n}\n\nresolve $(pbpaste) | pbcopy\necho \"URL resolved\"\n"
  },
  {
    "path": "commands/developer-utils/view-scripting-dictionary.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title View Scripting Dictionary\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Application\", \"optional\": true }\n# @raycast.packageName Developer Utils\n\n# Documentation:\n# @raycast.description Opens the Scripting Dictionary for the given application, defaulting to the active application if none is provided.\n# @raycast.author Stephen Kaplan\n# @raycast.authorURL https://github.com/SKaplanOfficial\n\nif [ -z \"$1\" ]; then\n  open -a \"Script Editor\" \"$(osascript -e \"tell application \\\"System Events\\\" to get POSIX path of application file of (first application process whose frontmost is true)\")\"\n  exit\nfi\nopen -a \"Script Editor\" \"$(osascript -e \"POSIX path of (path to application \\\"$1\\\")\")\"\n\n"
  },
  {
    "path": "commands/developer-utils/vscode/open-folder-in-vscode.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Directory\n# @raycast.mode silent\n# @raycast.packageName VS Code\n#\n# Optional parameters:\n# @raycast.icon images/vscode.png\n#\n# Documentation:\n# @raycast.description Opens current topmost directory in VS Code\n# @raycast.author chohner\n# @raycast.authorURL https://github.com/chohner\n\ntell application \"Finder\"\n\t# Check if there's a selection; works if there's a window open or not.\n\tif selection is not {} then\n\t\tset i to item 1 of (get selection)\n\t\t\n\t\t# If it's an alias, set the item to the original item.\n\t\tif class of i is alias file then\n\t\t\tset i to original item of i\n\t\tend if\n\t\t\n\t\t# If it's a folder, use its path.\n\t\tif class of i is folder then\n\t\t\tset p to i\n\t\telse\n\t\t\t# If it's an item, use its container's path.\n\t\t\tset p to container of i\n\t\tend if\n\telse if exists window 1 then\n\t\t# If a window exist, use its folder property as the path.\n\t\tset p to folder of window 1\n\telse\n\t\t# Fallback to the Desktop, as nothing is open or selected.\n\t\tset p to path to desktop folder\n\tend if\nend tell\n\ndo shell script \"open -n -b \\\"com.microsoft.VSCode\\\" --args \" & quoted form of POSIX path of (p as alias)\n"
  },
  {
    "path": "commands/developer-utils/vscode/open-project-in-vscode.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Project\n# @raycast.mode compact\n# @raycast.packageName VS Code\n\n# Optional parameters:\n# @raycast.icon images/vscode.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Directory Name\", \"optional\": false }\n\n# Documentation\n# @raycast.description Finds path to the given directory which must be a VS Code or Git project and opens it with VS Code\n# @raycast.author Maksim Zemlyanikin\n# @raycast.authorURL https://github.com/Maksimka101\n\ndirectory=$1\nfoundDirectory=''\nif [ -z $directory ]; then\n  echo \"Empty directory is not allowed\"\n  exit 1\nfi\n\nset +e\ndirectories=$(find $HOME -name $directory -type d -maxdepth 5)\nfor dir in $directories; do\n  if [[ -n \"$(find $dir -name .vscode -maxdepth 1)\" || -n \"$(find $dir -name .git -maxdepth 1)\" ]]; then\n    foundDirectory=$dir\n  fi\ndone\n\nif [ -n $foundDirectory ]; then\n  echo \"Project directory is $foundDirectory\"\n  if [ -n $(which code) ]; then\n    code -n $foundDirectory\n  else\n    open -n -b \\\"com.microsoft.VSCode\\\" --args $foundDirectory\n  fi\nelse\n  echo \"No such directory in '$HOME' with name $1\"\nfi\nexit 0\n"
  },
  {
    "path": "commands/developer-utils/wayback-machine-save.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Save URL to Wayback Machine\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Save URL to [Wayback Machine](https://web.archive.org/).\n\n# @raycast.icon images/ia-logo.jpg\n# @raycast.mode compact\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nurl=$1\nregex='(https?)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\n\nif [[ $url =~ $regex ]]\nthen \n\tcurl -s \"http://web.archive.org/save/$url\" > /dev/null\n\techo \"Submitted $url to Wayback Machine\"\nelse\n\techo \"Input is not a valid URL\"\nfi"
  },
  {
    "path": "commands/developer-utils/whois.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `whois` CLI which is already installed on macOS.\n# But if for some reason you don't have: brew install whois\n\n# @raycast.title Whois\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.author Ronan Rodrigo Nunes\n# @raycast.authorURL https://ronanrodrigo.dev\n\n# @raycast.description Whois of URL.\n\n# @raycast.icon 🌐\n# @raycast.mode fullOutput\n# @raycast.packageName Internet\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"URL\" }\n\nif command -v whois &> /dev/null; then\n    whois $1\nelse\n    open https://who.is/whois/$1\nfi\n"
  },
  {
    "path": "commands/developer-utils/xcode/xcode-last-project.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Last Project\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n#\n# Optional parameters:\n# @raycast.icon images/xcode.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Open the last Xcode project \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nmdfind \"(kMDItemContentType =='com.apple.xcode.project') || (kMDItemContentType == 'com.apple.dt.document.workspace') || (kMDItemContentType == 'com.apple.dt.playground')\" -0 | xargs -0 ls -t | head -1 | cut -f1 -d: | awk '{print \"\\x27\" $0 \"\\x27\" }' | xargs  open"
  },
  {
    "path": "commands/developer-utils/xcode/xcode-recent-project.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Recent Project\n# @raycast.mode silent\n# @raycast.packageName Developer Utilities\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Project name\", \"percentEncoded\": true}\n#\n# Optional parameters:\n# @raycast.icon images/xcode.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Open recent Xcode project\n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nmdfind \"(kMDItemFSName == '*$1*'c) && ((kMDItemContentType =='com.apple.xcode.project') || (kMDItemContentType == 'com.apple.dt.document.workspace') || (kMDItemContentType == 'com.apple.dt.playground'))\" -0 | xargs -0 ls -t | head -1 | cut -f1 -d: | awk '{print \"\\x27\" $0 \"\\x27\" }' | xargs  open"
  },
  {
    "path": "commands/extensions.json",
    "content": "{\n  \"groups\" : [\n    {\n      \"name\" : \"Home\",\n      \"path\" : \"home\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Elgato\",\n          \"path\" : \"elgato\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-04T18:14:11Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Increase brightness of Elgato Key Light by 5%.\",\n              \"filename\" : \"elgato-key-light-increase-brightness.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/elgato.png\"\n              },\n              \"identifier\" : \"0efbf0fc0112b8007548e0036851da5a\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Elgato Key Light\",\n              \"path\" : \"home\\/elgato\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Increase Brightness\",\n              \"updatedAt\" : \"2021-02-04T18:14:11Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-04T18:14:11Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn on Elgato Key Light.\",\n              \"filename\" : \"elgato-key-light-turn-on.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/elgato.png\"\n              },\n              \"identifier\" : \"6bded1a4b3b945dff30a380936a1741f\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Elgato Key Light\",\n              \"path\" : \"home\\/elgato\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn On\",\n              \"updatedAt\" : \"2021-02-04T18:14:11Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-04T18:14:11Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn off Elgato Key Light.\",\n              \"filename\" : \"elgato-key-light-turn-off.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/elgato.png\"\n              },\n              \"identifier\" : \"d5b4e7d38d50f78801983fed1ab9c710\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Elgato Key Light\",\n              \"path\" : \"home\\/elgato\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Off\",\n              \"updatedAt\" : \"2021-02-04T18:14:11Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-04T18:14:11Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decrease brightness of Elgato Key Light by 5%.\",\n              \"filename\" : \"elgato-key-light-decrease-brightness.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/elgato.png\"\n              },\n              \"identifier\" : \"6b6890b0f6e356b44fd73d3d7e30c902\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Elgato Key Light\",\n              \"path\" : \"home\\/elgato\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Decrease Brightness\",\n              \"updatedAt\" : \"2021-02-04T21:22:04Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Philips Hue\",\n          \"path\" : \"philips-hue\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-15T13:09:58+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show inline summary about your rooms of Hue compatible lights. Choose to show the number of lights on out of the room total, or use more general terms such as \\\"All on\\\". Requires rooms to have already been set up in the Hue app.\",\n              \"filename\" : \"hue-rooms-inline.template.mjs\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"💡\"\n              },\n              \"identifier\" : \"e46e06b26b98f5f9b2e390565bb48a1b\",\n              \"isTemplate\" : true,\n              \"language\" : \"node\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Philips Hue\",\n              \"path\" : \"home\\/philips-hue\\/\",\n              \"refreshTime\" : \"2m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Rooms\",\n              \"updatedAt\" : \"2021-07-23T17:49:45-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-15T13:08:55+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set a specified or default individual color bulb to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a bulb on or off.\",\n              \"filename\" : \"hue-bulb.template.mjs\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"💡\"\n              },\n              \"identifier\" : \"fb89b0817302263bcaae8586039493f8\",\n              \"isTemplate\" : true,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Philips Hue\",\n              \"path\" : \"home\\/philips-hue\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Light Bulb\",\n              \"updatedAt\" : \"2021-07-23T17:49:11-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-15T13:09:44+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show inline summary of any Hue compatible lights. Choose to show on\\/off, brightness percentage, color temperature or hue, saturation, brightness values. Recommended to have already assigned names to lights in the Hue app.\",\n              \"filename\" : \"hue-lights-inline.template.mjs\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"💡\"\n              },\n              \"identifier\" : \"f6fb1c021d088eac4eeabfbe0ffcff23\",\n              \"isTemplate\" : true,\n              \"language\" : \"node\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Philips Hue\",\n              \"path\" : \"home\\/philips-hue\\/\",\n              \"refreshTime\" : \"2m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lights\",\n              \"updatedAt\" : \"2021-07-23T17:49:49-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-15T13:08:55+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set a specified or default room of color bulbs to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a room on or off.\",\n              \"filename\" : \"hue-room.template.mjs\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"💡\"\n              },\n              \"identifier\" : \"6f9d2bf502507e1a6d6ab2fe57c71e94\",\n              \"isTemplate\" : true,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Philips Hue\",\n              \"path\" : \"home\\/philips-hue\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Room Lights\",\n              \"updatedAt\" : \"2021-07-23T17:49:41-04:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Conversions\",\n      \"path\" : \"conversions\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"RealTong\",\n              \"url\" : \"https:\\/\\/raycast.com\\/RealTong\"\n            }\n          ],\n          \"createdAt\" : \"2024-03-21T12:03:11+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Add spaces between Chinese and English, number or symbols.\",\n          \"filename\" : \"space-fixer.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📝\"\n          },\n          \"identifier\" : \"01ce6b040aecd6bcd05519b1880154c6\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Space Fixer\",\n          \"updatedAt\" : \"2024-03-22T18:09:49+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Adam Zethraeus\",\n              \"url\" : \"https:\\/\\/github.com\\/adam-zethraeus\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-11T17:02:10-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Converts text to z̫̫̐a̳ͩl̓͂̀ͅg͔̚o̷̦̣͢ t̳͆ḛ̊͟ẍ̮̝́t̵̔ͯ͝\",\n          \"filename\" : \"zalgo-text.swift\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"👹\"\n          },\n          \"identifier\" : \"2d634b5bcb404f80873074e8fd26b9c8\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Zalgo Text\",\n          \"updatedAt\" : \"2021-04-12T08:35:23-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Adam Zethraeus\",\n              \"url\" : \"https:\\/\\/github.com\\/adam-zethraeus\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-25T14:52:38-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert rich text clipboard data to GitHub Flavored Markdown using Pandoc\",\n          \"filename\" : \"rich-text-clipboard-to-markdown.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📝\"\n          },\n          \"identifier\" : \"b5ade467081438e72c96da6cab2dcefb\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Rich Text to Markdown\",\n          \"updatedAt\" : \"2024-08-28T20:37:53+08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-24T11:59:49-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Converts column to comma separated list.\",\n          \"filename\" : \"column-to-comma.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗂\"\n          },\n          \"identifier\" : \"36817b8a67adc979ae871b5f4caebe18\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Column to Comma\",\n          \"updatedAt\" : \"2021-04-20T01:26:19-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Phil Salant\",\n              \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-20T19:36:59-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Return the day of the week on which a particular date falls.\",\n          \"filename\" : \"what-day-is.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📅\"\n          },\n          \"identifier\" : \"9201a6c6a3bd7bbc86adc6cbb791caf8\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"What Day Is...\",\n          \"updatedAt\" : \"2021-02-21T22:11:45Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Michael Bianco\",\n              \"url\" : \"https:\\/\\/github.com\\/iloveitaly\"\n            }\n          ],\n          \"createdAt\" : \"2023-08-16T08:02:16-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"A script to take the HTML pastboard type filled by google docs and convert it to nicely formatted markdown\",\n          \"filename\" : \"google-docs-to-markdown.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"2b7d768fc7ffd6b6990173914031c150\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Google Docs Rich Text HTML to Markdown\",\n          \"updatedAt\" : \"2023-08-16T08:02:16-06:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"atzzCokeK\",\n              \"url\" : \"https:\\/\\/github.com\\/atzzCokeK\"\n            }\n          ],\n          \"createdAt\" : \"2023-10-10T22:38:42+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Quickly and simply generate a markdown formatted link with your specified URL and title.\",\n          \"filename\" : \"inputs-to-markdown-link.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"f7dee34add22537a9662c9fc31f36827\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Simple Markdown Link Generator\",\n          \"updatedAt\" : \"2023-10-17T22:58:55+09:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-21T13:14:05-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Trim newlines and tabs from clipboard content.\",\n          \"filename\" : \"trim-newlines-tabs.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"✂️\"\n          },\n          \"identifier\" : \"bcbc3784b51822bb3771df707ad5b088\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Trim Newlines and Tabs\",\n          \"updatedAt\" : \"2021-08-23T10:12:46Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Quentin Eude\",\n              \"url\" : \"https:\\/\\/github.com\\/qeude\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-02T09:59:04+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create a GIF from video, by default it takes the last screen record video\",\n          \"filename\" : \"create-gif-from-video.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📹\"\n          },\n          \"identifier\" : \"84edd7675ee0b974e699ddd28fae84f5\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create GIF from video\",\n          \"updatedAt\" : \"2021-07-02T09:59:04+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-03T16:41:50-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert hexadecimal color value to RGBA value.\",\n          \"filename\" : \"hex-to-rgba.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🎨\"\n          },\n          \"identifier\" : \"6d131530318240cf125637fc91c92ce9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Hex to RGBA\",\n          \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Adam Zethraeus\",\n              \"url\" : \"https:\\/\\/github.com\\/adam-zethraeus\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-24T02:53:50-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert clipboards text to fake unicode superscript\",\n          \"filename\" : \"unicode-superscript.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🦸‍♀️\"\n          },\n          \"identifier\" : \"04c3c0bf32f09602d74bdebfed5967c4\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversion\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Unicode Superscript\",\n          \"updatedAt\" : \"2021-04-12T10:16:23-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"wyhaya\",\n              \"url\" : \"https:\\/\\/github.com\\/wyhaya\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-04T03:59:40+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"QR Code Generation\",\n          \"filename\" : \"qrcode-generate.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/qrcode.png\"\n          },\n          \"identifier\" : \"df265285ae7ca5b6305aaada0055f872\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"QR Code Generation\",\n          \"updatedAt\" : \"2021-11-04T03:59:40+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Maxim Borzov\",\n              \"url\" : \"https:\\/\\/github.com\\/borzov\"\n            }\n          ],\n          \"createdAt\" : \"2024-05-21T11:23:12+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert Markdown formatting to Telegram format, excluding processing inside code blocks or quotes\",\n          \"filename\" : \"markdown-to-telegram.py\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔄\"\n          },\n          \"identifier\" : \"14c19002feb2ab3f839073ec5eda7c30\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Markdown to Telegram Format\",\n          \"updatedAt\" : \"2024-05-21T11:23:12+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ryan Nystrom\",\n              \"url\" : \"https:\\/\\/github.com\\/rnystrom\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-03T16:00:51-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create a markdown table template\",\n          \"filename\" : \"create-markdown-table.js\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧱\"\n          },\n          \"identifier\" : \"94dda699695f45d3562beb2acc1bed61\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Markdown Table\",\n          \"updatedAt\" : \"2021-11-03T20:04:02Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Michael Bianco\",\n              \"url\" : \"https:\\/\\/github.com\\/iloveitaly\"\n            }\n          ],\n          \"createdAt\" : \"2022-03-31T08:03:29-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"A script to click the \\\"Paste and Match Style\\\" menu item, even if it's disabled\",\n          \"filename\" : \"paste-as-plain-text.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"a9b5ccbfa4a899aa9435317bc6d839a2\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Paste and Match Style\",\n          \"updatedAt\" : \"2022-03-31T14:05:46Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-03T16:41:50-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert hexadecimal color value to RGB value.\",\n          \"filename\" : \"hex-to-rgb.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🎨\"\n          },\n          \"identifier\" : \"886795a04f438d025fc531c55c7e1156\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Hex to RGB\",\n          \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Francis Feng\",\n              \"url\" : \"https:\\/\\/github.com\\/francisfeng\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-30T22:28:00+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Display Human-Readable Date from Unix Time in Clipboard\",\n          \"filename\" : \"unix-time-reader.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕰\"\n          },\n          \"identifier\" : \"a95731d504f328ce3af77a4e5366bbc5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Unix Time Reader From Clipboard\",\n          \"updatedAt\" : \"2021-03-30T15:34:59Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Diego Lopes\",\n              \"url\" : \"https:\\/\\/github.com\\/Dihgg\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-04T07:20:46-03:00\",\n          \"currentDirectoryPath\" : \"~\",\n          \"description\" : \"Decode QR Code from screenshot to clipboard using https:\\/\\/qrserver.com\\/\",\n          \"filename\" : \"qr-code-screenshot-to-text.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/qrcode.icns\"\n          },\n          \"identifier\" : \"dd588b0008181dc53aab2019603ca17b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"QR Code\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Screenshot QR Code to Clipboard\",\n          \"updatedAt\" : \"2021-11-04T07:20:46-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alessandra Pereyra\",\n              \"url\" : \"https:\\/\\/github.com\\/alessandrapereyra\"\n            }\n          ],\n          \"createdAt\" : \"2022-09-08T18:50:04-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Automatically take the content found in the clipboard and turn it into Markdown\",\n          \"filename\" : \"clipboard-to-markdown.js\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"f45f6235a350476d4f5f896a12250d19\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Clipboard to Markdown\",\n          \"updatedAt\" : \"2022-09-08T18:50:04-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"quelhasu\",\n              \"url\" : \"https:\\/\\/github.com\\/quelhasu\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-07T12:24:35+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert color formats (e.g. #FFEEFF -> rgba(255,238,255,1)\",\n          \"filename\" : \"color-conversion.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🎨\"\n          },\n          \"identifier\" : \"deebbd6861359fe8e1fdccbae3349010\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Color Conversion\",\n          \"updatedAt\" : \"2021-02-12T11:49:03+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Siyuan Zhang\",\n              \"url\" : \"https:\\/\\/github.com\\/kastnerorz\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-23T14:59:40+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert human-readable date to timestamp epoch.\",\n          \"filename\" : \"human-date-to-epoch.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⏱\"\n          },\n          \"identifier\" : \"5ae97124a80e01d18262b94a1900fe8d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Human-Readable Date To Epoch\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Adam Zethraeus\",\n              \"url\" : \"https:\\/\\/github.com\\/adam-zethraeus\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-12T10:16:23-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert clipboard text to ｖａｐｏｒｗａｖｅ\",\n          \"filename\" : \"vaporwave-text.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌇\"\n          },\n          \"identifier\" : \"daa88b6d219c4f426109613d2ede7045\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversion\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Vaporwave Text\",\n          \"updatedAt\" : \"2021-04-12T10:16:23-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"xxchan\",\n              \"url\" : \"https:\\/\\/github.com\\/xxchan\"\n            }\n          ],\n          \"createdAt\" : \"2023-01-31T01:00:23+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"OCR Image from Clipboard\",\n          \"filename\" : \"clipboard-ocr.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"1fa48d4acba0f0992f2e9b9bf586703d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Clipboard\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"OCR Image\",\n          \"updatedAt\" : \"2023-01-31T01:00:23+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-04T04:22:35+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Converts given text (or clipboard if no argument) to t̶e̶x̶t̶\",\n          \"filename\" : \"strikethrough.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔠\"\n          },\n          \"identifier\" : \"95383104fdc831db571001adb57dd33c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Strikethrough Text\",\n          \"updatedAt\" : \"2021-06-04T04:22:35+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Siyuan Zhang\",\n              \"url\" : \"https:\\/\\/github.com\\/kastnerorz\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-12T14:41:06+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert epoch to human-readable date.\",\n          \"filename\" : \"epoch-to-human-date.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⏱\"\n          },\n          \"identifier\" : \"71ccf00855eb5a36a02b6d49c27295af\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Epoch to Human-Readable Date\",\n          \"updatedAt\" : \"2021-03-30T17:29:45+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Michael Bianco\",\n              \"url\" : \"https:\\/\\/github.com\\/iloveitaly\"\n            }\n          ],\n          \"createdAt\" : \"2023-07-03T15:03:20-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script will convert raw HTML on your clipboard to rich text. It requires pandoc to be installed on your system.\",\n          \"filename\" : \"raw-html-to-rich-text-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"8acc19746e49d7fc76584c8ea631b545\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Conversions\",\n          \"path\" : \"conversions\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Raw HTML to Rich Text on Clipboard\",\n          \"updatedAt\" : \"2023-07-03T21:06:13Z\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Change Case\",\n          \"path\" : \"change-case\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change to clipboard text to title case\",\n              \"filename\" : \"titlecase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/titlecase-dark.png\",\n                \"light\" : \".\\/images\\/titlecase-light.png\"\n              },\n              \"identifier\" : \"7af20974291066f818922fccdfa3b947\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Title Case\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change to clipboard text to kebab case\",\n              \"filename\" : \"kebabcase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/kebabcase-dark.png\",\n                \"light\" : \".\\/images\\/kebabcase-light.png\"\n              },\n              \"identifier\" : \"8f212577632cfcea8380428c2e408398\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Kebab Case\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change to clipboard text to snake case\",\n              \"filename\" : \"snakecase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/snakecase-dark.png\",\n                \"light\" : \".\\/images\\/snakecase-light.png\"\n              },\n              \"identifier\" : \"0a617d0433eda4b367c06d3f186671cd\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Snake Case\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change to clipboard text to uppercase\",\n              \"filename\" : \"uppercase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/uppercase-dark.png\",\n                \"light\" : \".\\/images\\/uppercase-light.png\"\n              },\n              \"identifier\" : \"77cad94335378ab5ce8849a38c2b6681\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Uppercase\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change clipboard text to lowercase\",\n              \"filename\" : \"lowercase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/lowercase-dark.png\",\n                \"light\" : \".\\/images\\/lowercase-light.png\"\n              },\n              \"identifier\" : \"02b1ea34a2e36143011c6d479fc346f9\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lowercase\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-24T04:47:26-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change to clipboard text to camel case\",\n              \"filename\" : \"camelcase.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/camelcase-dark.png\",\n                \"light\" : \".\\/images\\/camelcase-light.png\"\n              },\n              \"identifier\" : \"31db55a1512dd366b1bca3193dda9432\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Change Case\",\n              \"path\" : \"conversions\\/change-case\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Camel Case\",\n              \"updatedAt\" : \"2022-02-22T15:13:31+01:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Browsing\",\n      \"path\" : \"browsing\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"JD Solanki\",\n              \"url\" : \"https:\\/\\/github.com\\/jd-solanki\"\n            }\n          ],\n          \"createdAt\" : \"2021-09-24T08:28:06+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open current website in guest profile\\/mode\",\n          \"filename\" : \"open-in-guest-profile.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"7e65f41bd6407a5464ce4b1289b0abad\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open in guest profile\",\n          \"updatedAt\" : \"2022-10-31T11:55:21Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Nitin Gupta\",\n              \"url\" : \"https:\\/\\/twitter.com\\/gniting\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-09T23:41:04+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Transform the clipboard contents to a short Bitly URL\",\n          \"filename\" : \"shorten-url-bitly.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"fd3ff912fc4db2d3916bdba60c436507\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Shorten URL with Bitly\",\n          \"updatedAt\" : \"2021-02-12T11:49:03+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Eliot Hertenstein\",\n              \"url\" : \"https:\\/\\/github.com\\/eIiot\"\n            }\n          ],\n          \"createdAt\" : \"2022-02-06T18:08:25-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create a short URL using Shlink\",\n          \"filename\" : \"shlink-create-short-url.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/shlink.png\"\n          },\n          \"identifier\" : \"19917e997ea6a87adb283ca739ec7f4f\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Shlink\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create Short URL\",\n          \"updatedAt\" : \"2022-02-20T23:31:37-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thomas Paul Mann\",\n              \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-09T17:16:09Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shorten the URL in your Clipboard with Tiny URL.\",\n          \"filename\" : \"shorten-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"87e7fd07ae15344a2c3bbdfa528403ab\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Shorten URL From Clipboard\",\n          \"updatedAt\" : \"2021-04-26T15:00:19-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ronan Rodrigo Nunes\",\n              \"url\" : \"https:\\/\\/ronanrodrigo.dev\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-20T16:50:26-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open the website at Outline\",\n          \"filename\" : \"go-to-outine.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/outline.png\"\n          },\n          \"identifier\" : \"44f41225998f8653fba00b8af3aaf546\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Go to Outline\",\n          \"updatedAt\" : \"2021-02-19T19:09:37-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yasutaka Nishii\",\n              \"url\" : \"https:\\/\\/github.com\\/ystknsh\"\n            }\n          ],\n          \"createdAt\" : \"2024-08-29T16:26:42+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open multiple websites on Safari using list of URLs\",\n          \"filename\" : \"open-multiple-websites-on-safari.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📚\"\n          },\n          \"identifier\" : \"be278c484ca03c82e901a345ff6e6b72\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Multiple Websites on Safari\",\n          \"updatedAt\" : \"2024-09-03T11:24:41Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"raulanatol\",\n              \"url\" : \"https:\\/\\/github.com\\/raulanatol\"\n            }\n          ],\n          \"createdAt\" : \"2021-09-24T08:28:06+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open the current site in a private browser\",\n          \"filename\" : \"to-private-browsing.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🥽\"\n          },\n          \"identifier\" : \"9f2e428dc1c53dc016ace6bb81f7e155\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Current Website to Private Browser\",\n          \"updatedAt\" : \"2021-09-24T08:28:06+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-08T20:30:05+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script copies to clipboard all URLs from frontmost Safari window.\",\n          \"filename\" : \"safari-current-window-urls.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧭\"\n          },\n          \"identifier\" : \"1545cff8326c80f5bdd5cc367117ce83\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Safari\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Current Window URLs\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-16T15:01:51+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shorten any github.com URL\",\n          \"filename\" : \"git-io.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/git-io.png\"\n          },\n          \"identifier\" : \"2ca33ad632de2d16f4bbbaa3806b3843\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Shorten URL from GitHub\",\n          \"updatedAt\" : \"2021-11-16T15:01:51+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-16T16:13:19-05:00\",\n          \"currentDirectoryPath\" : \"~\\/Desktop\",\n          \"description\" : \"Takes screenshots of the entered URL using [`pageres`](https:\\/\\/github.com\\/sindresorhus\\/pageres) and saves it to the Desktop.\",\n          \"filename\" : \"website-screenshots.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖼️\"\n          },\n          \"identifier\" : \"7e10196776662f35cbc776aaf41f1fe6\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Screenshot Website\",\n          \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Levi Nelson\",\n              \"url\" : \"https:\\/\\/github.com\\/LeviticusNelson\"\n            }\n          ],\n          \"createdAt\" : \"2022-09-20T11:37:44-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open new window in default browser\",\n          \"filename\" : \"new-browser-window.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"982df81504688c40ed7c99f11913cdd2\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser Utils\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"New Browser Window\",\n          \"updatedAt\" : \"2022-09-20T11:37:44-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-03T02:51:13-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Use [Peekalink.io](https:\\/\\/peekalink.io) API to peek specified URL.\",\n          \"filename\" : \"peekalink.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/peekalink-logo.png\"\n          },\n          \"identifier\" : \"372c4a1272d6d88cd4df5e3b94ec8835\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Peek a link\",\n          \"updatedAt\" : \"2021-02-04T15:17:52-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Samuel Henry\",\n              \"url\" : \"https:\\/\\/bne.sh\"\n            }\n          ],\n          \"createdAt\" : \"2022-06-20T10:20:50+10:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Transform the clipboard contents to a short Emoji URL\",\n          \"filename\" : \"short-url-emoji.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"e811b99614fa16b00c890cede57aee7b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Shorten URL with Emojis\",\n          \"updatedAt\" : \"2022-06-20T10:20:50+10:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kailash Yellareddy\",\n              \"url\" : \"https:\\/\\/github.com\\/kyellareddy\"\n            }\n          ],\n          \"createdAt\" : \"2023-07-25T21:56:55+05:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens current Youtube Shorts video in the normal video player by replacing \\\"\\/shorts\\/\\\" with \\\"\\/v\\/\\\" in the url.\",\n          \"filename\" : \"Youtube Shorts in video player.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📹\"\n          },\n          \"identifier\" : \"9bdd39853c92b430aa2dcff8f1dfb7ec\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Youtube Shorts In Video Player\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Youtube Shorts in video player\",\n          \"updatedAt\" : \"2023-07-25T16:29:37Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tahsin Yazkan\",\n              \"url\" : \"https:\\/\\/github.com\\/thsnyzkn\"\n            }\n          ],\n          \"createdAt\" : \"2023-01-31T03:02:13+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open chrome with web security option disabled.\",\n          \"filename\" : \"open-chrome-without-cors.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/chrome-icon.png\"\n          },\n          \"identifier\" : \"a6e07f1845ea9de231cf3c943d0aa522\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Chrome\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open without CORS\",\n          \"updatedAt\" : \"2023-01-31T03:02:13+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-08T19:55:59+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script copies URL of currently opened page in Safari into clipboard.\",\n          \"filename\" : \"safari-current-page-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧭\"\n          },\n          \"identifier\" : \"d76d017a3bf2c77354523fabb01612a7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Safari\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Current Page URL\",\n          \"updatedAt\" : \"2022-02-22T10:00:48Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-10T00:36:12+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script copies URL of currently opened page in Google Chrome into clipboard.\",\n          \"filename\" : \"chrome-current-page-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧭\"\n          },\n          \"identifier\" : \"5a79e63e15b0bf391bab19555eca98b1\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Google Chrome\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Current Page URL\",\n          \"updatedAt\" : \"2021-05-10T00:36:12+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"cSharp\",\n              \"url\" : \"https:\\/\\/github.com\\/noidwasavailable\"\n            }\n          ],\n          \"createdAt\" : \"2023-08-10T17:56:44+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert Twitter link to Nitter\",\n          \"filename\" : \"convert-twitter-to-nitter.js\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🐔\"\n          },\n          \"identifier\" : \"42048eefcf9facbebf2aeef19f24c2e8\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Convert Twitter To Nitter\",\n          \"path\" : \"browsing\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Convert Twitter to Nitter\",\n          \"updatedAt\" : \"2023-08-10T17:56:44+09:00\"\n        }\n      ]\n    },\n    {\n      \"name\" : \"Navigation\",\n      \"path\" : \"navigation\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Library folder in the Finder.\",\n          \"filename\" : \"open-library.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-library.png\"\n          },\n          \"identifier\" : \"1bfe51640c6221e5092a323968d9bceb\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Library\",\n          \"updatedAt\" : \"2021-04-27T16:34:55-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-08T21:39:17+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open current Finder directory in Terminal\",\n          \"filename\" : \"open-terminal-from-finder.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📟\"\n          },\n          \"identifier\" : \"5724c9575b60d431ce2d42d5aacf05cd\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Current Finder Directory in Terminal\",\n          \"updatedAt\" : \"2021-05-12T11:28:01+05:30\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-08T21:39:17+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open current Terminal directory in Finder\",\n          \"filename\" : \"open-finder-from-terminal.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📟\"\n          },\n          \"identifier\" : \"5569104fd9c90af5275b1bfc6e66a247\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Current Terminal Directory in Finder\",\n          \"updatedAt\" : \"2021-07-23T17:32:20-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Afraz\",\n              \"url\" : \"https:\\/\\/github.com\\/afrazkhan\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-27T11:24:45+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open Finder at Home folder or argument location\",\n          \"filename\" : \"open-finder.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔍\"\n          },\n          \"identifier\" : \"d854a7e995306fbe1435037c533a7f63\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Finder\",\n          \"updatedAt\" : \"2021-05-31T10:08:39Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2021-01-02T14:35:53+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-devdocs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/devdocs.png\"\n          },\n          \"identifier\" : \"6da9c8ea33864399cb6b6397ba3e518d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Devdocs\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Applications folder in the Finder.\",\n          \"filename\" : \"open-applications.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📂\"\n          },\n          \"identifier\" : \"09589adf8daac0d61f08a7ab9b988504\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Applications\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-21T20:39:40+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the URL in the clipboard.\",\n          \"filename\" : \"open-url-from-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"4af1087d8e456a23c50ebb8a66e44618\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open URL From Clipboard\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T14:44:22+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Quit the application. Edit the command to change the default values (Application: \\\"\\\", Force quit?: \\\"No\\\").\",\n          \"filename\" : \"quit-application.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/quit.png\"\n          },\n          \"identifier\" : \"6cadd1b2f46cf256ef300204493c98be\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Quit Application\",\n          \"updatedAt\" : \"2021-06-23T14:44:22+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T14:44:22+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Restart the application. Edit the command to change the default values (Application: \\\"\\\", Force restart?: \\\"No\\\").\",\n          \"filename\" : \"restart-application.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/restart.png\"\n          },\n          \"identifier\" : \"1fd3b81609ac36ee68e94ef9d596c992\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Restart Application\",\n          \"updatedAt\" : \"2021-06-23T14:44:22+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2021-01-02T22:32:06+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"justfocus.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/justfocus.png\"\n          },\n          \"identifier\" : \"dbac73d9ab9489dddbd4d469fe7d78d5\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"JustFocus\",\n          \"updatedAt\" : \"2021-01-02T22:32:06+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bryce Carr\",\n              \"url\" : \"https:\\/\\/github.com\\/bdcarr\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-16T15:18:30+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Creates a new document in Pixelmator Pro from the image stored in your clipboard.\",\n          \"filename\" : \"open-clipboard-in-pixelmator-pro.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/pixelmator-pro-2.0.png\"\n          },\n          \"identifier\" : \"3882ed8e4e4ae9a271faf3e1217aa420\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Pixelmator Pro\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Image From Clipboard\",\n          \"updatedAt\" : \"2021-01-16T15:18:30+11:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-dash.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/dash.png\"\n          },\n          \"identifier\" : \"dab344a07ad07deff043fe6b175f5bba\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Dash\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-21T21:18:47+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open current Finder directory in iTerm\",\n          \"filename\" : \"open-iterm-from-finder.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/iterm-logo.png\"\n          },\n          \"identifier\" : \"9372e8eeb30e3ac54983a368557e28ae\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Current Finder Directory in iTerm\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Desktop folder in the Finder.\",\n          \"filename\" : \"open-desktop.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-desktop.png\"\n          },\n          \"identifier\" : \"1df1267f357b2170a39ace35a5c54d93\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Desktop\",\n          \"updatedAt\" : \"2021-04-27T16:34:55-04:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the last file that was downloaded\",\n          \"filename\" : \"open-last-downloaded.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-downloads.png\"\n          },\n          \"identifier\" : \"3ad14a4406ddef3807e797a606132af0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Last Downloaded\",\n          \"updatedAt\" : \"2022-03-30T20:25:55Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Documents folder in the Finder.\",\n          \"filename\" : \"open-documents.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-documents.png\"\n          },\n          \"identifier\" : \"02d590df526d1ec16128e7d2d4aed59d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Documents\",\n          \"updatedAt\" : \"2021-04-27T16:34:55-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-21T21:18:47+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open current iTerm directory in Finder\",\n          \"filename\" : \"open-finder-from-iterm.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/iterm-logo.png\"\n          },\n          \"identifier\" : \"75c0bc225c4f59daad97f45bf71529b3\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Current iTerm Directory in Finder\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-22T14:44:20+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the URL from the clipboard in the desktop app.\",\n          \"filename\" : \"open-desktop-url-from-clipboard.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖥\"\n          },\n          \"identifier\" : \"3b6e1fc94fc9416b9373ee2af2703af2\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Clipboard URL on Desktop\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Home folder in the Finder.\",\n          \"filename\" : \"open-home.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-home.png\"\n          },\n          \"identifier\" : \"5b107b5c47c444820e449275b4e46735\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Home\",\n          \"updatedAt\" : \"2021-04-27T16:34:55-04:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Downloads folder in the Finder.\",\n          \"filename\" : \"open-downloads.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/folder-downloads.png\"\n          },\n          \"identifier\" : \"699e4a1746f3c3144f2a3f8ffb43d9c8\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Downloads\",\n          \"updatedAt\" : \"2021-04-28T11:35:25-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Chris Bailey\",\n              \"url\" : \"https:\\/\\/raycast.com\\/that70schris\"\n            }\n          ],\n          \"createdAt\" : \"2024-08-13T00:40:38-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Easily hide your foremost application\",\n          \"filename\" : \"hide-application.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🫥\"\n          },\n          \"identifier\" : \"47f61692f25fabb33a1748ded306439c\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Navigation\",\n          \"path\" : \"navigation\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Hide Current Application\",\n          \"updatedAt\" : \"2024-08-13T00:40:38-04:00\"\n        }\n      ]\n    },\n    {\n      \"name\" : \"Remote Control\",\n      \"path\" : \"remote-control\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Denon AVR\",\n          \"path\" : \"denon-avr\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-09T11:13:32+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Powers off a modern Denon AVR if it is currently powered on\",\n              \"filename\" : \"power-off.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/denon_logo.png\"\n              },\n              \"identifier\" : \"fab79cda1a0e2629cbda49e0f90547c4\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Denon AVR\",\n              \"path\" : \"remote-control\\/denon-avr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Power Off\",\n              \"updatedAt\" : \"2022-02-09T10:16:51Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-09T11:13:32+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Helperscript to configure Denon AVR Script Commands\",\n              \"filename\" : \"configure.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/denon_logo.png\"\n              },\n              \"identifier\" : \"81f31547ecb4c9fa94c1f3ff80a16dae\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Denon AVR\",\n              \"path\" : \"remote-control\\/denon-avr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Configure\",\n              \"updatedAt\" : \"2022-02-09T10:16:51Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-09T11:13:32+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Increases the volume of your Denon AVR by one unit\",\n              \"filename\" : \"volume-up.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/denon_logo.png\"\n              },\n              \"identifier\" : \"5faba9ab561f16071df3aae37783ec75\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Denon AVR\",\n              \"path\" : \"remote-control\\/denon-avr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Volume Up\",\n              \"updatedAt\" : \"2022-02-09T10:16:51Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-09T11:13:32+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decreases the volume of your Denon AVR by one unit\",\n              \"filename\" : \"volume-down.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/denon_logo.png\"\n              },\n              \"identifier\" : \"9d67ff8a8aa5d86f53abf5a999eecd4d\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Denon AVR\",\n              \"path\" : \"remote-control\\/denon-avr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Volume Down\",\n              \"updatedAt\" : \"2022-02-09T10:16:51Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-09T11:13:32+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Powers on a modern Denon AVR if it is currently powered off\",\n              \"filename\" : \"power-on.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/denon_logo.png\"\n              },\n              \"identifier\" : \"61d307f4135abdf1944ff25f7ab77c84\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Denon AVR\",\n              \"path\" : \"remote-control\\/denon-avr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Power On\",\n              \"updatedAt\" : \"2022-02-09T10:16:51Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Ddc\",\n          \"path\" : \"ddc\",\n          \"scriptCommands\" : [\n\n          ],\n          \"subGroups\" : [\n            {\n              \"name\" : \"X86\",\n              \"path\" : \"x86\",\n              \"scriptCommands\" : [\n                {\n                  \"authors\" : [\n                    {\n                      \"name\" : \"goodhyun\",\n                      \"url\" : null\n                    }\n                  ],\n                  \"createdAt\" : \"2022-02-24T17:18:38+09:00\",\n                  \"currentDirectoryPath\" : null,\n                  \"description\" : \"This script will switch the external display screen to DP.\",\n                  \"filename\" : \"screen-dp.sh\",\n                  \"hasArguments\" : false,\n                  \"icon\" : {\n                    \"dark\" : null,\n                    \"light\" : \"📺\"\n                  },\n                  \"identifier\" : \"604dc19d758c3ba4240bd41436ecfc69\",\n                  \"isTemplate\" : false,\n                  \"language\" : \"bash\",\n                  \"mode\" : \"compact\",\n                  \"needsConfirmation\" : null,\n                  \"packageName\" : \"External Display\",\n                  \"path\" : \"remote-control\\/ddc\\/x86\\/\",\n                  \"refreshTime\" : null,\n                  \"schemaVersion\" : 1,\n                  \"title\" : \"Switch to DP\",\n                  \"updatedAt\" : \"2022-02-24T08:21:35Z\"\n                },\n                {\n                  \"authors\" : [\n                    {\n                      \"name\" : \"goodhyun\",\n                      \"url\" : null\n                    }\n                  ],\n                  \"createdAt\" : \"2022-02-24T17:18:38+09:00\",\n                  \"currentDirectoryPath\" : null,\n                  \"description\" : \"This script will switch the external display screen to HDMI.\",\n                  \"filename\" : \"screen-hdmi.sh\",\n                  \"hasArguments\" : false,\n                  \"icon\" : {\n                    \"dark\" : null,\n                    \"light\" : \"📺\"\n                  },\n                  \"identifier\" : \"5c5b8dce88c2fb37b74dfd96eacdfcb6\",\n                  \"isTemplate\" : false,\n                  \"language\" : \"bash\",\n                  \"mode\" : \"compact\",\n                  \"needsConfirmation\" : null,\n                  \"packageName\" : \"External Display\",\n                  \"path\" : \"remote-control\\/ddc\\/x86\\/\",\n                  \"refreshTime\" : null,\n                  \"schemaVersion\" : 1,\n                  \"title\" : \"Switch to HDMI\",\n                  \"updatedAt\" : \"2022-02-24T08:21:35Z\"\n                }\n              ]\n            },\n            {\n              \"name\" : \"Arm64\",\n              \"path\" : \"arm64\",\n              \"scriptCommands\" : [\n                {\n                  \"authors\" : [\n                    {\n                      \"name\" : \"goodhyun\",\n                      \"url\" : null\n                    }\n                  ],\n                  \"createdAt\" : \"2022-02-24T17:18:38+09:00\",\n                  \"currentDirectoryPath\" : null,\n                  \"description\" : \"This script will switch the external display screen to DP.\",\n                  \"filename\" : \"screen-dp.sh\",\n                  \"hasArguments\" : false,\n                  \"icon\" : {\n                    \"dark\" : null,\n                    \"light\" : \"📺\"\n                  },\n                  \"identifier\" : \"604dc19d758c3ba4240bd41436ecfc69\",\n                  \"isTemplate\" : false,\n                  \"language\" : \"bash\",\n                  \"mode\" : \"compact\",\n                  \"needsConfirmation\" : null,\n                  \"packageName\" : \"External Display\",\n                  \"path\" : \"remote-control\\/ddc\\/arm64\\/\",\n                  \"refreshTime\" : null,\n                  \"schemaVersion\" : 1,\n                  \"title\" : \"Switch to DP\",\n                  \"updatedAt\" : \"2022-02-24T08:21:35Z\"\n                },\n                {\n                  \"authors\" : [\n                    {\n                      \"name\" : \"goodhyun\",\n                      \"url\" : null\n                    }\n                  ],\n                  \"createdAt\" : \"2022-02-24T17:18:38+09:00\",\n                  \"currentDirectoryPath\" : null,\n                  \"description\" : \"This script will switch the external display screen to HDMI.\",\n                  \"filename\" : \"screen-hdmi.sh\",\n                  \"hasArguments\" : false,\n                  \"icon\" : {\n                    \"dark\" : null,\n                    \"light\" : \"📺\"\n                  },\n                  \"identifier\" : \"5c5b8dce88c2fb37b74dfd96eacdfcb6\",\n                  \"isTemplate\" : false,\n                  \"language\" : \"bash\",\n                  \"mode\" : \"compact\",\n                  \"needsConfirmation\" : null,\n                  \"packageName\" : \"External Display\",\n                  \"path\" : \"remote-control\\/ddc\\/arm64\\/\",\n                  \"refreshTime\" : null,\n                  \"schemaVersion\" : 1,\n                  \"title\" : \"Switch to HDMI\",\n                  \"updatedAt\" : \"2022-02-24T08:21:35Z\"\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"name\" : \"Samsung TV\",\n          \"path\" : \"samsung-tv\",\n          \"readme\" : \"remote-control\\/samsung-tv\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Darryl Brooks\",\n                  \"url\" : \"https:\\/\\/github.com\\/DarrylBrooks97\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T17:37:33-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turns off a Samsung TV.\",\n              \"filename\" : \"turn-off.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/logo.png\"\n              },\n              \"identifier\" : \"3d94ec3aa6c87dc268d5331e3dcd5f6b\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Samsung TV\",\n              \"path\" : \"remote-control\\/samsung-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Off TV\",\n              \"updatedAt\" : \"2021-08-23T10:12:10Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Darryl Brooks\",\n                  \"url\" : \"https:\\/\\/github.com\\/DarrylBrooks97\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T17:37:33-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turns on a Samsung TV.\",\n              \"filename\" : \"turn-on.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/logo.png\"\n              },\n              \"identifier\" : \"8502bb2e79d9a698a2c729d0f9b18925\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Samsung TV\",\n              \"path\" : \"remote-control\\/samsung-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn On TV\",\n              \"updatedAt\" : \"2021-08-23T10:12:10Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"LG TV\",\n          \"path\" : \"lg-tv\",\n          \"readme\" : \"remote-control\\/lg-tv\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close the application by its ID.\",\n              \"filename\" : \"close-app.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"139825c01bb2a7ea16cbbe87c4b0eea7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close App\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the application with the given payload.\",\n              \"filename\" : \"open-app-with-payload.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"e78c3c2e7bc669488295056a0bb5b127\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open App With Payload\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the configuration of the library.\",\n              \"filename\" : \"show-config.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"44ab198b6bcf302c779a63b734ce1c82\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Config\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the list of launch points.\",\n              \"filename\" : \"list-launch-points.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"04bab301934dac7d4a84a6e4590cff97\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Launch Points\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn off the 3D mode.\",\n              \"filename\" : \"turn-off-3d.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"27a3333d3f495bf482a7afc5768dc86b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Off 3D\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the audio status.\",\n              \"filename\" : \"show-audio-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"69a89ed81cd740a4ae70b2e41b401f5d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Audio Status\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show information about the TV.\",\n              \"filename\" : \"show-tv-info.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"4ffdde8a9a73be8bdae9e0003e41cd66\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show TV Info\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the list of services.\",\n              \"filename\" : \"list-services.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"95174c27967fd70d9c92485f72119313\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Services\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Scan to find the TV. The TV has to be turned on.\",\n              \"filename\" : \"scan.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"43253c0894482fb74159234c227953b7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Scan\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show picture settings.\",\n              \"filename\" : \"show-picture-settings.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"4ee1796b14d5028927be17ee44ebf54f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Picture Settings\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show information about the software.\",\n              \"filename\" : \"show-software-info.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"d5f1dbf7b9ddfbf76eae82107e37f267\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Software Info\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show information about the TV channel.\",\n              \"filename\" : \"show-channel.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"5fb2727e83fcd23d8c545102ca088d3d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Channel\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the list of applications.\",\n              \"filename\" : \"list-apps.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"5e28000d1949bec829e3e2861b52e785\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Apps\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Authenticate the library. The TV has to be turned on. You have to provide the IP address of the TV and accept the connection on the TV.\",\n              \"filename\" : \"authenticate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"74a50a0b785132731aaa13d435ef4a2e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Authenticate\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the application by its ID.\",\n              \"filename\" : \"open-app.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"e467133629c17d2130d0b6a5f58b746e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open App\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Youtube with the given video ID.\",\n              \"filename\" : \"open-youtube-id.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"edc01fb091bfd6952cba207273392b6e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Youtube (ID)\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop the media.\",\n              \"filename\" : \"stop-media.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"2f44779614466f754e39de741154ee19\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Media\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Unmute the TV.\",\n              \"filename\" : \"unmute.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"f3bc72e257bea3f096e7bd3b66cec79f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unmute\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Send the notification and show it on the TV.\",\n              \"filename\" : \"send-notification.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"b6323b459cfde9bd61c4e539899af6fa\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Send Notification\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the sound output.\",\n              \"filename\" : \"show-sound-output.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"eee4d1c090fb5d4509ae13868eca9a7f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Sound Output\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the audio volume.\",\n              \"filename\" : \"show-audio-volume.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"b4fabfe5562df1ed618507177cd471aa\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Audio Volume\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Execute the given command on TV.\",\n              \"filename\" : \"execute-command.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"7fdbf16ac52e3e0b8da4ae75119c559c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Execute Command\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show information about the foreground application.\",\n              \"filename\" : \"show-fg-app-info.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"534cb7263206875df399ff73306cf4e0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Foreground App Info\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn on the screen.\",\n              \"filename\" : \"turn-on-screen.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"9f958723e90790b78f41511ee47b5aa8\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn On Screen\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the power state.\",\n              \"filename\" : \"show-power-state.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"eddaa29eb8119bb1187111060f9d5261\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Power State\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play the media.\",\n              \"filename\" : \"play-media.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"046b37f6df217de570cd661202f147d5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play Media\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change the sound output. Possible \\\"Output Type\\\" values: tv_speaker | external_optical | external_arc | external_speaker | lineout | headphone | tv_external_speaker | tv_speaker_headphone | bt_soundbar.\",\n              \"filename\" : \"change-sound-output.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"92e31125a765419b484225d005349bbe\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Change Sound Output\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Youtube with the given video URL. The URL has to start with \\\"http:\\/\\/\\\" or \\\"https:\\/\\/\\\" prefix.\",\n              \"filename\" : \"open-youtube-url.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"1b3173b6d5599269237ec698f7e25f5a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Youtube (URL)\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Send the notification with the icon and show it on the TV.\",\n              \"filename\" : \"send-notification-with-icon.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"704cb889c24c763ab173ca2d6f005f97\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Send Notification With Icon\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the list of inputs.\",\n              \"filename\" : \"list-inputs.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"be6b15255dff22445bde8a59508116f6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Inputs\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn on the TV.\",\n              \"filename\" : \"turn-on.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"63090b3ec7187945b62fce1238cf2af3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn On\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause the media.\",\n              \"filename\" : \"pause-media.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"8742d8e473f35985239b53c684057c57\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause Media\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch to the next TV channel.\",\n              \"filename\" : \"switch-next-channel.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"f9dce7bb8d885c0ea5f07707315b1081\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch To Next Channel\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn off the TV.\",\n              \"filename\" : \"turn-off.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"922d7eeb985eea027b7c991ed67416ca\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Off\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch to the previous TV channel.\",\n              \"filename\" : \"switch-previous-channel.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"a20d5850aa9f2630a4f65cc78c271d0d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch To Previous Channel\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn the volume up.\",\n              \"filename\" : \"turn-volume-up.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"5f0f0848dc260276f5355b446f10a168\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Volume Up\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change the TV channel by its ID.\",\n              \"filename\" : \"change-channel.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"18f3567ca221111e3673195b2cf9af0d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Change Channel\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the browser with the given URL. The URL has to start with \\\"http:\\/\\/\\\" or \\\"https:\\/\\/\\\" prefix.\",\n              \"filename\" : \"open-browser.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"f3237372781a3e881610a829fef162f2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Browser\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn on the 3D mode.\",\n              \"filename\" : \"turn-on-3d.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"9349225f968d01f1c20cf93b2cf80a8b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn On 3D\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Rewind the media.\",\n              \"filename\" : \"rewind-media.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"e4a54596a914816f8cee8f454d89d8f5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Rewind Media\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change the input by its ID.\",\n              \"filename\" : \"change-input.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"5906fe2cceeb97d71366559cf48e2008\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Change Input\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn off the screen.\",\n              \"filename\" : \"turn-off-screen.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"2a4ba28c6785f55fcdbef026cd4cae17\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Off Screen\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Mute the TV.\",\n              \"filename\" : \"mute.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"07b43012e1ccbf2901709c0d4c84bc5d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Mute\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Turn the volume down.\",\n              \"filename\" : \"turn-volume-down.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"b84e91ddb1aa4e95b83b9eac4ab7bf21\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Turn Volume Down\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Fast forward the media.\",\n              \"filename\" : \"fast-forward-media.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"71bfe79390a649059a900ae918bb799d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Fast Forward Media\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the cursor socket.\",\n              \"filename\" : \"show-cursor-socket.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"48ec07a14fd7018898c0eca7b317d3b1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Cursor Socket\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change the volume level.\",\n              \"filename\" : \"change-volume.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"bd193c0cf866ed98f4944fc6a80bf49f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Change Volume\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-09T02:52:48+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show the list of TV channels.\",\n              \"filename\" : \"list-channels.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/lg.png\"\n              },\n              \"identifier\" : \"f24a8d248138846ce37350af4b5fa7df\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"LG TV\",\n              \"path\" : \"remote-control\\/lg-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Channels\",\n              \"updatedAt\" : \"2021-07-09T02:52:48+02:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Math\",\n      \"path\" : \"math\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Petr Nikolaev\",\n              \"url\" : \"https:\\/\\/github.com\\/pitnikola\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-05T13:43:54Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Calculate percentage increase between \\\"from\\\" and \\\"to\\\" values.\",\n          \"filename\" : \"calculate-growth.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📈\"\n          },\n          \"identifier\" : \"a733748a4340860d44b583174bed4aa8\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Calculate Growth\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Calculate Growth %\",\n          \"updatedAt\" : \"2021-02-05T13:43:54Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"es183923\",\n              \"url\" : \"https:\\/\\/github.com\\/es183923\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-28T16:57:16-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Use Wolfram Alpha to answer your query\",\n          \"filename\" : \"wolfram-alpha.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/wolfram-alpha.png\"\n          },\n          \"identifier\" : \"b8941ff8daf7b80d6ba25e7a1d759659\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Math\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Wolfram Alpha\",\n          \"updatedAt\" : \"2021-04-28T20:59:27Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"cSharp\",\n              \"url\" : \"https:\\/\\/github.com\\/noidwasavailable\"\n            }\n          ],\n          \"createdAt\" : \"2023-09-06T00:23:42+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"nCr: Calculate combinations\",\n          \"filename\" : \"calculate-combinations.js\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"𝐂\"\n          },\n          \"identifier\" : \"7d453c1dd055288ddc8c81714ed8194b\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Calculate Combinations\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"nCr: Calculate Combinations\",\n          \"updatedAt\" : \"2023-09-06T00:23:42+09:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Matt Gleich\",\n              \"url\" : \"https:\\/\\/mattglei.ch\"\n            }\n          ],\n          \"createdAt\" : \"2022-02-04T00:21:07-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Evaluate LaTeX expressions and get the product copied to your clipboard\",\n          \"filename\" : \"latex-calculator.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧮\"\n          },\n          \"identifier\" : \"99c77768765823d1f57e72e84d005f64\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Math\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"LaTeX Calculator\",\n          \"updatedAt\" : \"2022-02-04T10:14:08Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Samuel Barton\",\n              \"url\" : \"https:\\/\\/github.com\\/samueldbarton\"\n            }\n          ],\n          \"createdAt\" : \"2024-11-18T09:32:56-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Calculate the CAGR between \\\"from\\\" and \\\"to\\\" values over given \\\"years,\\\" then copy the result.\",\n          \"filename\" : \"calculate-CAGR.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : null,\n          \"identifier\" : \"5acd1b95964396ecfbe1aee4841ddb0a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Math\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Calculate CAGR Percentage\",\n          \"updatedAt\" : \"2024-11-18T09:32:56-06:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Matt Gleich\",\n              \"url\" : \"https:\\/\\/mattglei.ch\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-17T11:41:42-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generate a number between a given range (inclusive) and then copy the value\",\n          \"filename\" : \"random-number.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔢\"\n          },\n          \"identifier\" : \"36ce3407031e4f15536ed06711a94b08\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Math\",\n          \"path\" : \"math\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate Random Number\",\n          \"updatedAt\" : \"2021-11-17T11:41:42-05:00\"\n        }\n      ]\n    },\n    {\n      \"name\" : \"Dashboard\",\n      \"path\" : \"dashboard\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-05T19:28:32-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get current weather report from [wttr.in](https:\\/\\/wttr.in\\/).\",\n          \"filename\" : \"current-weather.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌦️\"\n          },\n          \"identifier\" : \"633427580d7acc72e502b5c78376d066\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Current Weather\",\n          \"updatedAt\" : \"2022-07-01T16:07:45+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tanguy Le Stradic\",\n              \"url\" : \"https:\\/\\/github.com\\/tanguyls\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-16T20:42:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get current Bitcoin price from Coindesk.\",\n          \"filename\" : \"bitcoin-price-usd.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/bitcoin-logo.png\"\n          },\n          \"identifier\" : \"e425a0838f6a64e832ffa9a112c8fb67\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Bitcoin Price\",\n          \"updatedAt\" : \"2020-11-23T17:47:38+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-08T13:50:51-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Test download and upload connection speed using [Speedtest](https:\\/\\/www.speedtest.net\\/apps\\/cli).\",\n          \"filename\" : \"speedtest.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/speedtest-logo.png\"\n          },\n          \"identifier\" : \"d70a6a0bd6c62e53037715b0f51f86dd\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"20m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Speedtest\",\n          \"updatedAt\" : \"2021-02-27T15:39:22-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2022-02-23T23:10:21+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Fear & Greed Index from CNN\",\n          \"filename\" : \"fear-index.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"😱 \"\n          },\n          \"identifier\" : \"7862558b671bcea3f416d6bb8901d12f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Fear & Greed Index\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"12h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Fear Index\",\n          \"updatedAt\" : \"2022-02-23T23:10:21+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Clark Dinnison\",\n              \"url\" : \"https:\\/\\/github.com\\/cdinnison\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-04T00:45:59-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get current Ethereum price from CoinGecko.\",\n          \"filename\" : \"ethereum-price-usd.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/ethereum-logo.png\"\n          },\n          \"identifier\" : \"b295025d81c6f298f4d83e302e084ad9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Ethereum Price\",\n          \"updatedAt\" : \"2021-02-04T00:45:59-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thomas Paul Mann\",\n              \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-27T23:15:56Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shows the followers, favorites and friends count of your Twitter account.\",\n          \"filename\" : \"twitter-statistics.template.rb\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/twitter.png\"\n          },\n          \"identifier\" : \"1bde64c963c2cc5e3ffc510d7568f210\",\n          \"isTemplate\" : true,\n          \"language\" : \"ruby\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Twitter\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Twitter Statistics\",\n          \"updatedAt\" : \"2021-07-23T17:26:29-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Stefan de Graaf\",\n              \"url\" : \"https:\\/\\/github.com\\/DBZFYAM\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-20T01:23:39+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Retrieves the value of precious metals per 1 oz\",\n          \"filename\" : \"precious-metals.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/precious-metals.png\"\n          },\n          \"identifier\" : \"322ece7c0e5dcc2c35a997d7b968b724\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Metals Price\",\n          \"updatedAt\" : \"2021-05-20T01:23:39+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Claven\",\n              \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-01T17:46:57+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show SABnzbd's queue status\",\n          \"filename\" : \"sabnzbd-queue-status.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"b56a25c7f8c0bef6d3608a98ea809b00\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"SABnzbd Queue\",\n          \"updatedAt\" : \"2021-05-01T17:46:57+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-16T17:38:24+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"system-activity.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📈\"\n          },\n          \"identifier\" : \"89218de6222b35bac76e4b051930dd11\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"5s\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"System Activity\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Manan Mehta\",\n              \"url\" : \"https:\\/\\/github.com\\/mehtamanan\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-01T03:37:28-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Gets crypto prices from Binance\",\n          \"filename\" : \"crypto-portfolio.py\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💰\"\n          },\n          \"identifier\" : \"1e2edbef6b7ee380b6a3f8fb71614ce8\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Money\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"5m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Crypto\",\n          \"updatedAt\" : \"2021-03-01T16:54:23Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"nagauta\",\n              \"url\" : \"https:\\/\\/github.com\\/nagauta\"\n            }\n          ],\n          \"createdAt\" : \"2023-05-04T00:27:11+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get total usage of OpenAI API\",\n          \"filename\" : \"open-ai-usage.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💲\"\n          },\n          \"identifier\" : \"0ddcc5df2535bb2a723ebcd790f2e937\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Check Usage of OpenAI API\",\n          \"updatedAt\" : \"2023-05-04T14:08:10+09:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Clu Soh\",\n              \"url\" : \"https:\\/\\/github.com\\/designedbyclu\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-04T00:45:59-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Checking DOGE coin price\",\n          \"filename\" : \"doge.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/dogecoin-logo.png\"\n          },\n          \"identifier\" : \"ef5ccfacde23ff614355afb1f378cc1b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"DOGE Price\",\n          \"updatedAt\" : \"2021-05-10T13:42:50+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Phil Salant\",\n              \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-24T18:51:50-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Check if this machine is using NextDNS.\",\n          \"filename\" : \"nextdns-status-check.py\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/nextdns.png\"\n          },\n          \"identifier\" : \"36bf8f74da76a691998c7a356d8dbd8d\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"NextDNS Status\",\n          \"updatedAt\" : \"2021-01-26T14:46:55Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Mortada Sarheed\",\n              \"url\" : \"https:\\/\\/github.com\\/mSarheed\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-06T09:47:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get the status of your Tesla vehicle\",\n          \"filename\" : \"tesla.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🚘\"\n          },\n          \"identifier\" : \"92b07ce3fd4dd31dc4dde74af562bc59\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Tesla.Template\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Tesla\",\n          \"updatedAt\" : \"2023-02-06T08:49:49Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thomas Paul Mann\",\n              \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-01T15:19:07Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"See the year progress on your desktop.\",\n          \"filename\" : \"year-progress.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⏱\"\n          },\n          \"identifier\" : \"f91b94065511ac6266f5b2499368af3a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Year Progress\",\n          \"updatedAt\" : \"2021-01-28T17:52:04+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-09T10:29:38+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shows YouTube Subscribers, Views and Videos\",\n          \"filename\" : \"youtube-statistics.template.rb\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/youtube.png\"\n          },\n          \"identifier\" : \"561f7ed8faa600880f0a583a964d481f\",\n          \"isTemplate\" : true,\n          \"language\" : \"ruby\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"YouTube Statistics\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"YouTube Statistics\",\n          \"updatedAt\" : \"2021-11-09T09:49:02Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thomas Paul Mann\",\n              \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-15T15:57:43Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Keep track of your stock portfolio.\",\n          \"filename\" : \"stock-portfolio.rb\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📈\"\n          },\n          \"identifier\" : \"116c44f780e379c97aaa32826ff6dbb8\",\n          \"isTemplate\" : false,\n          \"language\" : \"ruby\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Stock Portfolio\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Stocks\",\n          \"updatedAt\" : \"2021-02-15T16:05:12Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Claven\",\n              \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-16T14:01:54Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show the time from elsewhere in the world\",\n          \"filename\" : \"world-time.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕐\"\n          },\n          \"identifier\" : \"0fe9fe7b1ee089f32c2d6fc739e8364b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Dashboard\",\n          \"path\" : \"dashboard\\/\",\n          \"refreshTime\" : \"5s\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"World Time\",\n          \"updatedAt\" : \"2021-02-20T12:41:02+01:00\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Mood Meter\",\n          \"path\" : \"mood-meter\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Federico Miraglia\",\n                  \"url\" : \"https:\\/\\/github.com\\/Mitra98t\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-07T10:32:15+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add mood value to current or specified date \",\n              \"filename\" : \"add-mood.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"☕️\"\n              },\n              \"identifier\" : \"0e526e9f9e5f652b170303c129ed23b0\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Dashboard\",\n              \"path\" : \"dashboard\\/mood-meter\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Mood\",\n              \"updatedAt\" : \"2021-10-07T10:32:15+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Federico Miraglia\",\n                  \"url\" : \"https:\\/\\/github.com\\/Mitra98t\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-07T10:32:15+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Displays month mood table \",\n              \"filename\" : \"display-mood-month.js\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"☕️\"\n              },\n              \"identifier\" : \"e48bdecd3f81809ea28118f115a94d95\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Dashboard\",\n              \"path\" : \"dashboard\\/mood-meter\\/\",\n              \"refreshTime\" : \"5s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Display Mood Month\",\n              \"updatedAt\" : \"2021-10-07T10:32:15+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Federico Miraglia\",\n                  \"url\" : \"https:\\/\\/github.com\\/Mitra98t\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-07T10:32:15+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Displays year mood table \",\n              \"filename\" : \"display-mood-year.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"☕️\"\n              },\n              \"identifier\" : \"7c2a11ff6675fb93687733d284c4b862\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Dashboard\",\n              \"path\" : \"dashboard\\/mood-meter\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Display Mood Year\",\n              \"updatedAt\" : \"2021-10-07T10:32:15+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Open Weather\",\n          \"path\" : \"open-weather\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marek Mašek\",\n                  \"url\" : \"https:\\/\\/github.com\\/marekmasek\"\n                }\n              ],\n              \"createdAt\" : \"2022-04-03T20:33:02+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get current weather from OpenWeather\",\n              \"filename\" : \"weather-current.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⛅️\"\n              },\n              \"identifier\" : \"e3d36b7b7215c9fabcc2ca76608cd650\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"OpenWeather\",\n              \"path\" : \"dashboard\\/open-weather\\/\",\n              \"refreshTime\" : \"30m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Current Weather\",\n              \"updatedAt\" : \"2022-04-03T20:33:02+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marek Mašek\",\n                  \"url\" : \"https:\\/\\/github.com\\/marekmasek\"\n                }\n              ],\n              \"createdAt\" : \"2022-04-03T20:33:02+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get weather forecast from OpenWeather\",\n              \"filename\" : \"weather-forecast.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⛅️\"\n              },\n              \"identifier\" : \"99c2bb05fdc937398f9b0ca9c21c3de0\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"OpenWeather\",\n              \"path\" : \"dashboard\\/open-weather\\/\",\n              \"refreshTime\" : \"30m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Weather Forecast\",\n              \"updatedAt\" : \"2022-04-03T20:33:02+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Firebase\",\n          \"path\" : \"firebase\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marek Mašek\",\n                  \"url\" : \"https:\\/\\/github.com\\/marekmasek\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-30T22:44:18+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get values from Firebase Realtime Database\",\n              \"filename\" : \"firebase-realtime-db-get-data.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/firebase.png\"\n              },\n              \"identifier\" : \"dd152410f57df463a043081efbc26960\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Firebase\",\n              \"path\" : \"dashboard\\/firebase\\/\",\n              \"refreshTime\" : \"10m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Get data from Firebase\",\n              \"updatedAt\" : \"2022-03-30T22:44:18+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"João Melo\",\n                  \"url\" : \"https:\\/\\/github.com\\/joaopcm\"\n                }\n              ],\n              \"createdAt\" : \"2022-12-30T14:08:40-03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get token from Firebase Authentication service\",\n              \"filename\" : \"firebase-authentication-get-token.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/firebase.png\"\n              },\n              \"identifier\" : \"d4bf22f455beb60e3044429453e05102\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Firebase Authentication\",\n              \"path\" : \"dashboard\\/firebase\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Get Authorization Token\",\n              \"updatedAt\" : \"2022-12-30T17:11:26Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Countdowns\",\n          \"path\" : \"countdowns\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-02T15:46:55+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"See how many days until Christmas.\",\n              \"filename\" : \"countdown-to-christmas.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎅🏻\"\n              },\n              \"identifier\" : \"e3746d89850312e10ed4fad53103dbba\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Countdown To Christmas\",\n              \"path\" : \"dashboard\\/countdowns\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Countdown to Christmas\",\n              \"updatedAt\" : \"2020-12-04T22:42:54-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-02T15:50:36+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create countdowns via Raycast.\",\n              \"filename\" : \"create-countdown.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏱\"\n              },\n              \"identifier\" : \"1e963e6123f7e0860c7bf241fce505e4\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Create Countdown.Template\",\n              \"path\" : \"dashboard\\/countdowns\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Countdown\",\n              \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-02T15:49:04+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"See how many days\\/hours until a specific date.\",\n              \"filename\" : \"countdown-to-date.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏱\"\n              },\n              \"identifier\" : \"3b7be449b1353fb738e2b5e0111b652b\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Countdown To Date.Template\",\n              \"path\" : \"dashboard\\/countdowns\\/\",\n              \"refreshTime\" : \"10m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Countdown to Date\",\n              \"updatedAt\" : \"2021-01-07T00:32:38+08:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"System\",\n      \"path\" : \"system\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yohanes Bandung Bondowoso\",\n              \"url\" : \"https:\\/\\/github.com\\/ybbond\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-24T14:24:25+07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Frontmost Web Browser as Default Browser.\",\n          \"filename\" : \"default-browser-front-most-app.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧭\"\n          },\n          \"identifier\" : \"5b00f6eb9391d53cc153ef3a1231f8ea\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browsing\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Set Frontmost App as Default Browser\",\n          \"updatedAt\" : \"2024-04-22T16:22:28+10:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Valentin Chrétien\",\n              \"url\" : \"https:\\/\\/twitter.com\\/valentinchrt\"\n            }\n          ],\n          \"createdAt\" : \"2020-10-30T19:33:06+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"A script command to start your current screen saver.\",\n          \"filename\" : \"screensaver.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌀\"\n          },\n          \"identifier\" : \"016b30488e412822a94cd3586934f0d3\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Screen Saver\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Felipe Turcheti\",\n              \"url\" : \"https:\\/\\/felipeturcheti.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-18T14:47:46-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Uninstall applications with AppCleaner\",\n          \"filename\" : \"uninstall-with-appcleaner.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗑\"\n          },\n          \"identifier\" : \"7796b8e6036fed3a0b4373925268f8d9\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Uninstall with AppCleaner\",\n          \"updatedAt\" : \"2021-03-18T14:47:46-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Raphael-KR\",\n              \"url\" : \"https:\\/\\/github.com\\/Raphael-KR\"\n            }\n          ],\n          \"createdAt\" : \"2025-08-23T18:49:50+09:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle natural trackpad\\/mouse scrolling setting for macOS 15.6.1+\",\n          \"filename\" : \"toggle-natural-scrolling-macos15.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖱\"\n          },\n          \"identifier\" : \"3ccaeabe09d36538f01f592bc7b3e51e\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Natural Scrolling (macOS 15+)\",\n          \"updatedAt\" : \"2025-08-25T09:08:49Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Aaron Miller\",\n              \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-07T14:30:22-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script screenshots the entire screen and saves it to the clipboard.\",\n          \"filename\" : \"capture-fullscreen-to-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"344e66ee76bea921b245701f7c638ece\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Capture Fullscreen to Clipboard\",\n          \"updatedAt\" : \"2021-08-07T19:28:35-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"benyn\",\n              \"url\" : \"github.com\\/benyn\"\n            }\n          ],\n          \"createdAt\" : \"2023-05-06T14:02:11-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Close all notification alerts staying on screen, e.g., Calendar notifications.\",\n          \"filename\" : \"dismiss-notifications.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔕\"\n          },\n          \"identifier\" : \"d1d5f97ad62a6692d70fc17da0a71157\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Dismiss Notifications\",\n          \"updatedAt\" : \"2025-05-18T15:56:50-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alexander Steffen\",\n              \"url\" : \"https:\\/\\/github.com\\/alexjsteffen\"\n            }\n          ],\n          \"createdAt\" : \"2022-02-20T17:12:23-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Close all open Finder windows. \",\n          \"filename\" : \"close-finder-windows.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔪\"\n          },\n          \"identifier\" : \"9ea2842daeb65fb34b307cce6ed0bb58\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Close All Finder Windows\",\n          \"updatedAt\" : \"2022-02-20T17:12:23-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-22T12:35:00-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Report process with largest system CPU usage.\",\n          \"filename\" : \"largest-cpu-process.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📈\"\n          },\n          \"identifier\" : \"eaca5331de591791a0e9debbce8c94d9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"3m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Largest CPU Process\",\n          \"updatedAt\" : \"2020-11-28T13:04:44-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Claven\",\n              \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-18T16:52:19Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Sample a color from anywhere on your screen.\",\n          \"filename\" : \"sample-color.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🎨\"\n          },\n          \"identifier\" : \"4600a7cb879326d93a1fa82615819092\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Sample Color\",\n          \"updatedAt\" : \"2021-07-21T10:01:35-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jelte Lagendijk\",\n              \"url\" : \"https:\\/\\/raycast.com\\/j3lte\"\n            }\n          ],\n          \"createdAt\" : \"2024-04-22T08:23:05+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set the position of the Dock in the screen\",\n          \"filename\" : \"dock-set-position.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"4d015ec34744b1b005c63343cace870a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Dock Position\",\n          \"updatedAt\" : \"2024-04-22T08:23:05+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yan Smaliak\",\n              \"url\" : \"https:\\/\\/github.com\\/ysmaliak\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T23:17:52+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shows caffeinate status and time left if it's running\",\n          \"filename\" : \"caffeinate-status.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"☕️\"\n          },\n          \"identifier\" : \"ea698b6674bb57715a2b7c4a06fc428c\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"30s\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Caffeinate\",\n          \"updatedAt\" : \"2021-06-24T14:36:25+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jordi Clement\",\n              \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-08T18:14:50+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Restart the Finder\",\n          \"filename\" : \"restart-finder.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💀\"\n          },\n          \"identifier\" : \"e21a9f0baf43d6e8a7655e597151673f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Restart the Finder\",\n          \"updatedAt\" : \"2021-03-09T10:35:42+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:51+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Empty the trash.\",\n          \"filename\" : \"empty-trash.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗑\"\n          },\n          \"identifier\" : \"3528e589140c649bb7a6f0b43938f491\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Empty Trash\",\n          \"updatedAt\" : \"2021-03-04T21:05:10+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jordi Clement\",\n              \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-04T21:13:00+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Restart the Dock\",\n          \"filename\" : \"restart-dock.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💀\"\n          },\n          \"identifier\" : \"ac9e0060f3e114b655c2723eb5e99933\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Restart the Dock\",\n          \"updatedAt\" : \"2021-03-09T11:24:27+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"LokHsu\",\n              \"url\" : \"https:\\/\\/github.com\\/lokhsu\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-03T21:46:57+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Batch modify the file in the current directory or the specified extension of the selected file\",\n          \"filename\" : \"modify-extension.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌵\"\n          },\n          \"identifier\" : \"2097c4d5e252e7befea4b6f519104025\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Modify Extension\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Modify File Extension\",\n          \"updatedAt\" : \"2021-05-03T21:46:57+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Antonio Dal Sie\",\n              \"url\" : \"https:\\/\\/github.com\\/exodusanto\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-07T09:25:23+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set system brightness\",\n          \"filename\" : \"brightness.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"☀️\"\n          },\n          \"identifier\" : \"0dbc3c0fcfd039a658a1d9c2535797c1\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System brightness\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Brightness\",\n          \"updatedAt\" : \"2021-04-07T09:46:29+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alexandru Turcanu\",\n              \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-04T16:13:12-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Adds an invisible icon to the Dock as a separator.\",\n          \"filename\" : \"add-spacer-to-dock.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"5641c6bbfdfad513d605e225848002a5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Add Spacer to Dock\",\n          \"updatedAt\" : \"2021-03-08T00:46:38Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-07T10:22:15-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Apply a random image from the [wallpaper directory](https:\\/\\/support.apple.com\\/guide\\/mac-help\\/change-your-desktop-picture-mchlp3013\\/mac) for the main display's current [Space](https:\\/\\/support.apple.com\\/guide\\/mac-help\\/work-in-multiple-spaces-mh14112\\/mac).\",\n          \"filename\" : \"wallpaper-refresh.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖼️\"\n          },\n          \"identifier\" : \"cf466f9ba5a9baad7701991e639e3171\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Refresh Wallpaper\",\n          \"updatedAt\" : \"2021-06-04T16:35:43-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marcos Sánchez-Dehesa\",\n              \"url\" : \"https:\\/\\/github.com\\/dehesa\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-22T16:16:58+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Google Chrome as the default browser.\",\n          \"filename\" : \"default-browser-chrome.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/chrome.png\"\n          },\n          \"identifier\" : \"2d63f1a6bc8d207d320f0e6faf37b1c0\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Default to Chrome\",\n          \"updatedAt\" : \"2023-02-22T16:16:58+11:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yan Smaliak\",\n              \"url\" : \"https:\\/\\/github.com\\/ysmaliak\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T19:47:11+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Stops all caffeinate sessions\",\n          \"filename\" : \"caffeinate-disable.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"☕️\"\n          },\n          \"identifier\" : \"b8f343e8f5516c3671d7e09e7f5af6b5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Disable Caffeinate\",\n          \"updatedAt\" : \"2021-06-23T19:47:11+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"BhEaN\",\n              \"url\" : \"https:\\/\\/github.com\\/bhean\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-03T21:02:51+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle Night Shift mode (until tomorrow\\/sunrise). Required [nightlight](https:\\/\\/github.com\\/smudge\\/nightlight)\",\n          \"filename\" : \"nightshift.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌘\"\n          },\n          \"identifier\" : \"574594655373e8a41dd88ae601f9466d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Night Shift\",\n          \"updatedAt\" : \"2021-11-03T21:02:51+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-16T16:22:21-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Turn on \\\"do not disturb\\\" mode. Does [not work on Big Sur](https:\\/\\/github.com\\/sindresorhus\\/do-not-disturb-cli\\/issues\\/2).\",\n          \"filename\" : \"dnd-on.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"😴\"\n          },\n          \"identifier\" : \"2b8fb6e3f5c529d56b7223878a4ba142\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Turn On Do Not Disturb\",\n          \"updatedAt\" : \"2020-11-29T19:34:24-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marcos Sánchez-Dehesa\",\n              \"url\" : \"https:\\/\\/github.com\\/dehesa\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-22T16:16:58+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Firefox as the default browser.\",\n          \"filename\" : \"default-browser-firefox.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/firefox.png\"\n          },\n          \"identifier\" : \"4299cbf700855d5ae55f6a730ff28a85\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Default to Firefox\",\n          \"updatedAt\" : \"2024-01-05T16:03:05-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Fahim Faisal\",\n              \"url\" : \"https:\\/\\/github.com\\/i3p9\"\n            }\n          ],\n          \"createdAt\" : \"2022-03-13T18:10:53+06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get Battery percentage, time remaining, charge status, charger wattage, total cycles etc.\",\n          \"filename\" : \"battery-info.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔋\"\n          },\n          \"identifier\" : \"682c9017c86e7caafe835fb510cb33e1\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"3m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Battery Info\",\n          \"updatedAt\" : \"2022-03-16T15:16:35+06:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Antonio Dal Sie\",\n              \"url\" : \"https:\\/\\/github.com\\/exodusanto\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-08T11:08:42+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Do Not Disturb\",\n          \"filename\" : \"do-not-disturb.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔕\"\n          },\n          \"identifier\" : \"7d8dda695f270869220063893beb9160\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Do Not Disturb\",\n          \"updatedAt\" : \"2021-11-16T14:59:56+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Roland Leth\",\n              \"url\" : \"https:\\/\\/runtimesharks.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-09T08:11:04+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Quits an app, by name or process id.\",\n          \"filename\" : \"quit-app.swift\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💥\"\n          },\n          \"identifier\" : \"99fbf722b84d6f89aa7ff40585bf3980\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Quit app\",\n          \"updatedAt\" : \"2021-03-10T20:57:40+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Senthil Prabhu\",\n              \"url\" : \"https:\\/\\/github.com\\/senthilprabhut\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-20T13:39:40-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show or hide all filename extensions (like .txt, .png)\",\n          \"filename\" : \"toggle-filename-extensions.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"👓\"\n          },\n          \"identifier\" : \"4057115ba5d08cf0a62f8193c9c6916e\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Filename Extensions\",\n          \"updatedAt\" : \"2021-05-21T11:41:19+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Seypopi\",\n              \"url\" : \"https:\\/\\/github.com\\/Seypopi\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-06T15:48:02+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Empty the desktop.\",\n          \"filename\" : \"move-desktop-to-trash.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗑\"\n          },\n          \"identifier\" : \"cc2b535578d9865c8bfbb6deea863b05\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : true,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Move Desktop to Trash\",\n          \"updatedAt\" : \"2021-07-06T15:39:42Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Linus Salzmann\",\n              \"url\" : \"https:\\/\\/github.com\\/linus569\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-06T21:08:50+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Force kill all AirDrop processes\",\n          \"filename\" : \"kill-airdrop.processes.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔫\"\n          },\n          \"identifier\" : \"4678220973dc093f7a732eae15a4f71b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Kill AirDrop Processes\",\n          \"updatedAt\" : \"2021-04-06T23:07:39Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Aaron Miller\",\n              \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-07T14:30:22-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script screenshots the selected area and saves it to the desktop.\",\n          \"filename\" : \"capture-screen-selection-to-desktop.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"aa330e29461867df6c3f22fc9b9a2c68\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Capture Screen Selection to Desktop\",\n          \"updatedAt\" : \"2021-08-07T19:28:35-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marcos Sánchez-Dehesa\",\n              \"url\" : \"https:\\/\\/github.com\\/dehesa\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-22T16:16:58+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Arc as the default browser.\",\n          \"filename\" : \"default-browser-arc.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/arc.png\"\n          },\n          \"identifier\" : \"bfadc3d5abe379f7bfaee8db90c11379\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Default to Arc\",\n          \"updatedAt\" : \"2024-01-05T16:03:05-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jelte Lagendijk\",\n              \"url\" : \"https:\\/\\/raycast.com\\/j3lte\"\n            }\n          ],\n          \"createdAt\" : \"2024-04-22T08:23:05+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set the Dock autohide\",\n          \"filename\" : \"dock-set-autohide.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"2e9f26f5c37a3f3c74cae49c82fc0fd5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Dock Set Autohide\",\n          \"updatedAt\" : \"2024-04-22T08:23:05+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-17T17:41:07+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Resize and center the frontmost window to any custom size.\",\n          \"filename\" : \"custom-window.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/custom-window-size.png\"\n          },\n          \"identifier\" : \"13a15c297e5092141c7507de2af3385f\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Custom Window Size\",\n          \"updatedAt\" : \"2021-11-17T17:41:07+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Federico Zivolo\",\n              \"url\" : \"https:\\/\\/github.com\\/FezVrasta\"\n            }\n          ],\n          \"createdAt\" : \"2024-01-20T13:56:53+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"toggle-desktop-widget.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔄\"\n          },\n          \"identifier\" : \"79982c901bf4cd65eda80b5f7039d1d0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Toggle Desktop Widget\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Desktop Widgets\",\n          \"updatedAt\" : \"2024-01-22T22:39:53Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marcos Sánchez-Dehesa\",\n              \"url\" : \"https:\\/\\/github.com\\/dehesa\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-22T16:16:58+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Chromium as the default browser.\",\n          \"filename\" : \"default-browser-chromium.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/chrome-icon.png\"\n          },\n          \"identifier\" : \"3502698721f8a80ac7cf5e3e3909f615\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Default to Chromium\",\n          \"updatedAt\" : \"2023-02-22T16:16:58+11:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"LokHsu\",\n              \"url\" : \"https:\\/\\/github.com\\/lokhsu\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T13:59:31+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create files in the front window or desktop of the visit\",\n          \"filename\" : \"create-new-file.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📄\"\n          },\n          \"identifier\" : \"320da8947dc06b150318183a5ce92a06\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Create New File\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create New File\",\n          \"updatedAt\" : \"2021-05-19T13:49:26+08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-07T15:10:25+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Quits all running applications except Finder and Raycast.\",\n          \"filename\" : \"quit-all-apps.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💥\"\n          },\n          \"identifier\" : \"5d9a1236ff0ca1878cfcf271e88c6fdc\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : true,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Quit All Applications\",\n          \"updatedAt\" : \"2021-03-27T23:04:19-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Aaron Miller\",\n              \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-07T14:30:22-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script screenshots the entire screen and saves it to the desktop.\",\n          \"filename\" : \"capture-fullscreen-to-desktop.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"e888ca0de9036c3e6f270c06ffa9904b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Capture Fullscreen to Desktop\",\n          \"updatedAt\" : \"2021-08-07T19:28:35-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bin Hua\",\n              \"url\" : \"https:\\/\\/github.com\\/hzb\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-24T16:38:17+08:00\",\n          \"currentDirectoryPath\" : \"\\/\",\n          \"description\" : \"Open a folder on macOS \",\n          \"filename\" : \"open-folder.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📁\"\n          },\n          \"identifier\" : \"c0a453ce75451b01821ade7b0bbf4fe7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Folder\",\n          \"updatedAt\" : \"2021-03-26T22:22:05+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T15:11:24+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"move-downloads-to-trash.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/move-downloads-to-trash.png\"\n          },\n          \"identifier\" : \"cc40d3eee37779e218239dfad2fca26e\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : true,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Move Downloads to Trash\",\n          \"updatedAt\" : \"2020-12-30T22:13:18+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"zhe\",\n              \"url\" : \"https:\\/\\/github.com\\/wmszhe\"\n            }\n          ],\n          \"createdAt\" : \"2022-07-22T17:53:33+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Use macOS Vision API Identification pictures, if it contain a QR code, Copy the QR code content to the clipboard, If do not include QR codes, identify text content and supplement to clipboard\",\n          \"filename\" : \"ocr.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖼\"\n          },\n          \"identifier\" : \"83aec5a2b407fa4ad1c7c485b8c49199\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Productivity\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"OCR\",\n          \"updatedAt\" : \"2024-06-22T16:19:22+09:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Aaron Miller\",\n              \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-07T14:30:22-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script screenshots the selected area and saves it to the clipboard.\",\n          \"filename\" : \"capture-screen-selection-to-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"1b20aab42e5e5b6af164dbbcaedb0dfc\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Capture Screen Selection to Clipboard\",\n          \"updatedAt\" : \"2021-08-07T19:28:35-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"StepaniaH\",\n              \"url\" : \"https:\\/\\/github.com\\/StepaniaH\"\n            }\n          ],\n          \"createdAt\" : \"2024-12-16T23:44:40+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This is a simple Python script for recursively renaming video and picture files within a directory. Type the root directory's absolute path, and it will scan all the video and picture files in it and rename them according to the folder where they are located as the format `<folder_name>-<current_date (MMDD)>-<incremental_number>`.\",\n          \"filename\" : \"rename-videos-pictures.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📂\"\n          },\n          \"identifier\" : \"360d8e4290996f7b2b40dc6e388e30f2\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Rename Videos Pictures\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Rename Video\",\n          \"updatedAt\" : \"2024-12-18T23:56:00+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marcos Sánchez-Dehesa\",\n              \"url\" : \"https:\\/\\/github.com\\/dehesa\"\n            }\n          ],\n          \"createdAt\" : \"2023-02-22T16:16:58+11:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Set Safari as the default browser.\",\n          \"filename\" : \"default-browser-safari.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/safari.png\"\n          },\n          \"identifier\" : \"b56ccc81272dbe8beb92bdcdb77e8dce\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Browser\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Default to Safari\",\n          \"updatedAt\" : \"2024-01-05T16:03:05-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yohanes Bandung Bondowoso\",\n              \"url\" : \"https:\\/\\/github.com\\/ybbond\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-03T20:29:30+07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle flip (rotate) or revert the <display> to <degree>°\",\n          \"filename\" : \"toggle-flip-screen.template.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖥\"\n          },\n          \"identifier\" : \"334e278cca7425e66cb394fbd049f0b4\",\n          \"isTemplate\" : true,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Toggle Flip Screen.Template\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Flip Screen <display> to <degree>°\",\n          \"updatedAt\" : \"2021-03-04T20:17:31+07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thiago Holanda\",\n              \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n            }\n          ],\n          \"createdAt\" : \"2020-09-30T23:35:51+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show and hide hidden files\\/folders which starts with \\\".\\\" (dot), i.e: .bash_rc, .ssh\",\n          \"filename\" : \"toggle-hidden-files.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"👓\"\n          },\n          \"identifier\" : \"3dfa6a8ce847abf5dfcbe74c0ce49b60\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Hidden Files\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ernest Ojeh\",\n              \"url\" : \"https:\\/\\/github.com\\/namzo\"\n            }\n          ],\n          \"createdAt\" : \"2022-02-21T17:47:42+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script minimizes all windows of currently running apps\",\n          \"filename\" : \"minimize-all-windows.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/minimize-window.png\"\n          },\n          \"identifier\" : \"3b65d4ebb56ca0837e508f63395b1230\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Minimize All Windows\",\n          \"updatedAt\" : \"2022-02-21T17:47:42+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"AndriiBarabash\",\n              \"url\" : \"https:\\/\\/github.com\\/AndriiBarabash\"\n            }\n          ],\n          \"createdAt\" : \"2025-03-10T00:16:14+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Put your Mac to sleep (in X minutes).\",\n          \"filename\" : \"sleep-timer.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"😴\"\n          },\n          \"identifier\" : \"ff43a32961d94da6001ad37ab79dd032\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Sleep Timer\",\n          \"updatedAt\" : \"2025-03-10T10:57:38+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jelte Lagendijk\",\n              \"url\" : \"https:\\/\\/raycast.com\\/j3lte\"\n            }\n          ],\n          \"createdAt\" : \"2024-04-22T08:23:05+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle the Dock Autohide\",\n          \"filename\" : \"dock-autohide-toggle.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"48c4f52d832201490101c47dd2963bbd\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Dock Autohide\",\n          \"updatedAt\" : \"2024-04-22T08:23:05+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Archie Lacoin\",\n              \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n            },\n            {\n              \"name\" : \"LanikSJ\",\n              \"url\" : \"https:\\/\\/github.com\\/LanikSJ\"\n            }\n          ],\n          \"createdAt\" : \"2022-04-18T08:53:46-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"network-quality.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"c8ccba60ea98f52ca4712bbd2ff58c26\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"20m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Network Quality\",\n          \"updatedAt\" : \"2022-12-30T13:32:07-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thiago Holanda\",\n              \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n            }\n          ],\n          \"createdAt\" : \"2020-10-01T00:09:58+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Script Command to switch between the system appearance, light and dark mode.\",\n          \"filename\" : \"toggle-system-appearance.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌗\"\n          },\n          \"identifier\" : \"54d34ecb5dca7bdc00363d43019e68ba\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle System Appearance\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yan Smaliak\",\n              \"url\" : \"https:\\/\\/github.com\\/ysmaliak\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T19:47:11+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Starts a caffeinated session\",\n          \"filename\" : \"caffeinate-enable.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"☕️\"\n          },\n          \"identifier\" : \"61b64ef5d74932f70a3a2108e7055eb0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Enable Caffeinate\",\n          \"updatedAt\" : \"2021-06-23T19:47:11+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Vincent Dörig\",\n              \"url\" : \"https:\\/\\/github.com\\/vincentdoerig\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-07T23:20:03+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle your Bluetooth connection.\",\n          \"filename\" : \"bluetooth.template.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/bluetooth.png\"\n          },\n          \"identifier\" : \"30f23f25c1f216807d6c631e69f9ae93\",\n          \"isTemplate\" : true,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Bluetooth\",\n          \"updatedAt\" : \"2021-01-11T18:50:50+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Vicent Gozalbes\",\n              \"url\" : \"https:\\/\\/github.com\\/vigosan\"\n            }\n          ],\n          \"createdAt\" : \"2025-10-29T15:39:18+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Move selected files in Finder to Trash\",\n          \"filename\" : \"delete-selected-files.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗑\"\n          },\n          \"identifier\" : \"af948d8e2733b1384754ecae8a626949\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Delete Selected Files\",\n          \"updatedAt\" : \"2025-10-29T15:39:18+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-19T11:37:16+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the last downloaded file.\",\n          \"filename\" : \"open-last-download.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💁‍♂️\"\n          },\n          \"identifier\" : \"8ecb691cd7cda27f0ca184089e9ded6d\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Last Download\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Roland Leth\",\n              \"url\" : \"https:\\/\\/runtimesharks.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-09T08:15:32+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"List running app showing their process id, CPU usage, name, and optionally the process path.\",\n          \"filename\" : \"list-processes.rb\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔡\"\n          },\n          \"identifier\" : \"48b4a9d8681ee2e0253e2d4615dfc02c\",\n          \"isTemplate\" : false,\n          \"language\" : \"ruby\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Running processes\",\n          \"updatedAt\" : \"2021-03-10T21:13:32+02:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Empty Clipboard\",\n          \"filename\" : \"empty-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"be0936bf596d8169ae630f87eab769e3\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Empty Clipboard\",\n          \"updatedAt\" : \"2021-04-29T18:06:28+03:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:57:05+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Ejects all mounted disk images.\",\n          \"filename\" : \"eject-all-disks.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📀\"\n          },\n          \"identifier\" : \"eb7f2c4c74a87108fea2c25aae466749\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Eject All Disks\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Juan Luis Romero\",\n              \"url\" : \"https:\\/\\/github.com\\/JuanluR8\"\n            }\n          ],\n          \"createdAt\" : \"2021-09-27T19:10:12+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show free space in your mounted disks\",\n          \"filename\" : \"disk-free.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💾\"\n          },\n          \"identifier\" : \"4d24ea15b68e1be01b6a06843150c795\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Disk Free\",\n          \"updatedAt\" : \"2021-09-28T06:22:27Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit Malsia\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2021-10-26T02:13:10+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copy Wi-Fi password from current session\",\n          \"filename\" : \"wifi-password.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📟\"\n          },\n          \"identifier\" : \"3da4fa8456e609ec2fd7fbadf9ab49a0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Wi-Fi Password\",\n          \"updatedAt\" : \"2021-11-03T20:29:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Astrit\",\n              \"url\" : \"https:\\/\\/github.com\\/astrit\"\n            }\n          ],\n          \"createdAt\" : \"2021-11-07T13:19:22+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"A script command to enable and disable .DS_Store\",\n          \"filename\" : \"toggle-ds-store.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧬\"\n          },\n          \"identifier\" : \"3c4ebd8411dc67d65ea9d93787e1cfe1\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle .DS_Store\",\n          \"updatedAt\" : \"2021-11-07T13:19:22+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Claven\",\n              \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-27T06:02:41Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Show disk usage for \\/ (root)\",\n          \"filename\" : \"disk-usage.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💿\"\n          },\n          \"identifier\" : \"aadf056d506a2abb91cef252e2e7a1f6\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"1m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Disk Usage\",\n          \"updatedAt\" : \"2021-04-27T06:02:41Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T13:59:31+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create New File in Finder is a script to make your Finder better.You can use this script to create a plain text file.\",\n          \"filename\" : \"create-new-file-in-finder.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/new-file.png\"\n          },\n          \"identifier\" : \"e070238afa3a97fcd9b65cc1766a6959\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create New File in Finder\",\n          \"updatedAt\" : \"2020-12-30T22:13:18+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yan Smaliak\",\n              \"url\" : \"https:\\/\\/github.com\\/ysmaliak\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-23T19:47:11+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shows caffeinate status\",\n          \"filename\" : \"caffeinate-status.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"☕️\"\n          },\n          \"identifier\" : \"983e3f9a1dd803134bc1cd49ace17de2\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"30s\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Caffeinate\",\n          \"updatedAt\" : \"2021-06-23T19:47:11+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"xxchan\",\n              \"url\" : \"https:\\/\\/github.com\\/xxchan\"\n            }\n          ],\n          \"createdAt\" : \"2023-01-31T01:00:23+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open Image from Clipboard in Preview for OCR or other purposes.\",\n          \"filename\" : \"open-image-from-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"02b393208c74661deadfc66ddf16da87\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Clipboard\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Image\",\n          \"updatedAt\" : \"2023-01-31T01:00:23+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Brandon Escamilla\",\n              \"url\" : \"https:\\/\\/github.com\\/brandonescamilla\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-24T14:05:17-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens default email application, and creates a new email with the given inputs.\",\n          \"filename\" : \"new-email.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📧\"\n          },\n          \"identifier\" : \"d6d20418f4f0ebfa5a7a77a7bc9f0458\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create Email\",\n          \"updatedAt\" : \"2021-02-25T10:47:45Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-22T12:35:00-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Report process with largest system RAM usage.\",\n          \"filename\" : \"largest-ram-process.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📈\"\n          },\n          \"identifier\" : \"440bfcf128135809ae63ab885832e3f1\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"3m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Largest RAM Process\",\n          \"updatedAt\" : \"2020-11-28T13:04:44-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zach Dawson\",\n              \"url\" : \"https:\\/\\/raycast.com\\/zdawz\"\n            }\n          ],\n          \"createdAt\" : \"2023-12-22T08:19:14-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Resets the macOS Launchpad to its default state\",\n          \"filename\" : \"reset-launchpad.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🚀\"\n          },\n          \"identifier\" : \"1c9956877da036e214c52ae82f128cb1\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Reset Launchpad\",\n          \"updatedAt\" : \"2023-12-22T14:21:54Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kailash Yellareddy\",\n              \"url\" : \"https:\\/\\/github.com\\/kyellareddy\"\n            }\n          ],\n          \"createdAt\" : \"2023-07-03T17:20:46-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"Network Info.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🛜\"\n          },\n          \"identifier\" : \"83cefb2a99e7b3a81e177ccef088a8f3\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Network Info\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Network Info\",\n          \"updatedAt\" : \"2023-07-04T10:01:20Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Juan Luis Romero\",\n              \"url\" : \"https:\\/\\/github.com\\/JuanluR8\"\n            }\n          ],\n          \"createdAt\" : \"2024-04-22T08:23:25+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Display CPU usage percent\",\n          \"filename\" : \"inline-cpu-usage-percent.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖥️\"\n          },\n          \"identifier\" : \"88b8ff2c77f987a58eadc153ac8e9629\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"10s\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"CPU Usage\",\n          \"updatedAt\" : \"2024-04-22T06:25:56Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"aaqifshafi\",\n              \"url\" : \"https:\\/\\/github.com\\/aaqifshafi\"\n            }\n          ],\n          \"createdAt\" : \"2025-10-24T17:32:55+05:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Kill running processes on the given ports\",\n          \"filename\" : \"kill-a-process-on-port.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🚫\"\n          },\n          \"identifier\" : \"71d24aef7a640392ef09a32800fd05e3\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Kill A Process On Port\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Kill a process on PORT\",\n          \"updatedAt\" : \"2025-10-24T17:32:55+05:30\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Felipe Turcheti\",\n              \"url\" : \"https:\\/\\/felipeturcheti.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-14T14:36:05-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Flush DNS cache\",\n          \"filename\" : \"flush-dns.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💨\"\n          },\n          \"identifier\" : \"63e51cac9289a2734e161cc8306805b4\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Flush DNS\",\n          \"updatedAt\" : \"2021-06-14T14:36:05-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Angelos Michalopoulos\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2024-11-18T17:33:08+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get One-Time Password (OTP) from Apple Password Manager\",\n          \"filename\" : \"otp.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔑\"\n          },\n          \"identifier\" : \"7115fa08d182688291508d427a6ce246\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"One-Time Password\",\n          \"updatedAt\" : \"2024-11-18T17:33:08+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Raycast\",\n              \"url\" : \"https:\\/\\/raycast.com\"\n            }\n          ],\n          \"createdAt\" : \"2020-09-30T12:57:18+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"A script command to show and hide icons of Desktop folder\",\n          \"filename\" : \"toggle-desktop-icons.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖥\"\n          },\n          \"identifier\" : \"a7b34fe82f84acdef7c4ca687a7dbad8\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Desktop Icons\",\n          \"updatedAt\" : \"2022-01-15T18:22:57+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Vincent Dörig\",\n              \"url\" : \"https:\\/\\/github.com\\/vincentdoerig\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-07T22:11:14+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle your Wi-Fi connection.\",\n          \"filename\" : \"wifi.template.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : \"images\\/wifi.png\",\n            \"light\" : \"images\\/wifi-dark.png\"\n          },\n          \"identifier\" : \"a67b13df28ceb5db8ea7a322df56a3b3\",\n          \"isTemplate\" : true,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Wi-Fi\",\n          \"updatedAt\" : \"2021-01-11T18:50:50+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-05T19:09:05Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copy the last downloaded file to the clipboard.\",\n          \"filename\" : \"copy-last-download.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💁\"\n          },\n          \"identifier\" : \"19d49b55a44b69e9229b63c27724c02f\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Last Download\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-05T19:08:41Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copies the calendar availability of today.\",\n          \"filename\" : \"copy-availability.swift\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📅\"\n          },\n          \"identifier\" : \"7f78eb54a08af1d516202dd647999a27\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Availability\",\n          \"updatedAt\" : \"2022-08-08T14:02:44+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Wiley Marques\",\n              \"url\" : \"https:\\/\\/twitter.com\\/wileymarques\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-29T12:05:47-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Script Command to change natural trackpad\\/mouse scrolling setting. Reverting the setting value each time.\",\n          \"filename\" : \"toggle-natural-scrolling.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🖱\"\n          },\n          \"identifier\" : \"ebea0e4ea60f055ea23d01a8feaf7605\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Natural Scrolling\",\n          \"updatedAt\" : \"2024-04-25T21:10:36+05:45\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kailash Yellareddy\",\n              \"url\" : \"https:\\/\\/github.com\\/kyellareddy\"\n            }\n          ],\n          \"createdAt\" : \"2023-07-03T14:02:07-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"Low Power Mode.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔋\"\n          },\n          \"identifier\" : \"abb0ce225a8aa3cc33d242788d9fbc94\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Low Power Mode\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Low Power Mode\",\n          \"updatedAt\" : \"2023-07-03T21:06:13Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-19T11:37:24+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copies the last screenshot to the clipboard.\",\n          \"filename\" : \"copy-last-screenshot.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📸\"\n          },\n          \"identifier\" : \"adddad32ea0805637e3ede7ea4799468\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Last Screenshot\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Felipe Turcheti\",\n              \"url\" : \"https:\\/\\/felipeturcheti.com\"\n            }\n          ],\n          \"createdAt\" : \"2024-08-05T09:48:29-06:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copy contents of selected items in Finder to the clipboard. If there's more than one file selected, they will be combined and added to the clipboard.\",\n          \"filename\" : \"copy-selection-to-clipboard.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"??\"\n          },\n          \"identifier\" : \"c76e2bb24d45b402577be451771a6171\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Finder Selection to Clipboard\",\n          \"updatedAt\" : \"2024-08-05T09:48:29-06:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Yufei Kang\",\n              \"url\" : \"kangyufei.net\"\n            },\n            {\n              \"name\" : \"LanikSJ\",\n              \"url\" : \"https:\\/\\/github.com\\/LanikSJ\"\n            }\n          ],\n          \"createdAt\" : \"2022-04-20T11:03:29-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Save Image From Clipboard\",\n          \"filename\" : \"save-image-from-clipboard.py\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"9b9abd66aac59663e406febe5530ed84\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Clipboard\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Save Image From Clipboard\",\n          \"updatedAt\" : \"2022-05-28T15:53:15+09:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Restarts computer.\",\n          \"filename\" : \"restart.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"♻️\"\n          },\n          \"identifier\" : \"f8b93ee900b7689ca9709b9dc26b6489\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Restart\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Gustavo Santana\",\n              \"url\" : \"https:\\/\\/github.com\\/gumadeiras\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-28T10:21:59-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Force kill a running process\",\n          \"filename\" : \"kill-process.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⚠️\"\n          },\n          \"identifier\" : \"d9997f08d544ad8daea8a0e8ffa3ff67\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Kill Running Process\",\n          \"updatedAt\" : \"2021-05-28T10:21:59-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-16T16:22:21-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Turn off \\\"do not disturb\\\" mode. Does [not work on Big Sur](https:\\/\\/github.com\\/sindresorhus\\/do-not-disturb-cli\\/issues\\/2).\",\n          \"filename\" : \"dnd-off.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"😴\"\n          },\n          \"identifier\" : \"cbf4272986da4e74e4c985f1dde580fd\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Turn Off Do Not Disturb\",\n          \"updatedAt\" : \"2020-11-29T19:34:24-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alexandru Turcanu\",\n              \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-07T17:33:55-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get current network connections.\",\n          \"filename\" : \"network-status.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📶\"\n          },\n          \"identifier\" : \"3ad91860d37f423dfb97bc3e5737e369\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"1m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Network Status\",\n          \"updatedAt\" : \"2021-03-11T11:38:48-08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2025-09-05T10:08:41-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copies a summary of today's meetings to the clipboard.\",\n          \"filename\" : \"meeting_summary_script.swift\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📝\"\n          },\n          \"identifier\" : \"3542086084234d14d5e94041c7c2915b\",\n          \"isTemplate\" : false,\n          \"language\" : \"swift\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Meeting Summary\",\n          \"updatedAt\" : \"2025-09-05T10:08:41-05:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Shuts down computer.\",\n          \"filename\" : \"shutdown.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🛌\"\n          },\n          \"identifier\" : \"e769db5b986361ec1d91728682177a0f\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Shut Down\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Amir Hossein SamadiPour\",\n              \"url\" : \"https:\\/\\/github.com\\/SamadiPour\"\n            }\n          ],\n          \"createdAt\" : \"2022-08-06T01:15:04+04:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggle charging the battery when it is plugged in. When turned off, it will always use the charger instead of the battery; when turned on, it will go to automatic mode (decide based on your settings and daily charging routine).\",\n          \"filename\" : \"toggle-battery-charging.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔋\"\n          },\n          \"identifier\" : \"9ef75d2415c5c413099e591710f0c054\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Battery Charging\",\n          \"updatedAt\" : \"2022-08-18T12:53:36Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"AlexGadd\",\n              \"url\" : \"https:\\/\\/raycast.com\\/AlexGadd\"\n            }\n          ],\n          \"createdAt\" : \"2025-10-25T01:03:45+13:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Takes your clipboard then types each character in the clipboard\",\n          \"filename\" : \"paste-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📋\"\n          },\n          \"identifier\" : \"b6b6c23a4d07188552b17cba337131f8\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Type Clipboard in Search\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Type Clipboard\",\n          \"updatedAt\" : \"2025-11-04T23:39:34+13:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Puts computer to sleep.\",\n          \"filename\" : \"sleep.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"😴\"\n          },\n          \"identifier\" : \"c132dfd91b11f3580b63945272683ea8\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Sleep\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ivan Rybalko\",\n              \"url\" : \"https:\\/\\/github.com\\/ivribalko\"\n            }\n          ],\n          \"createdAt\" : \"2023-09-06T00:16:33-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Prevent sleep from closing laptop lid (clamshell mode)\",\n          \"filename\" : \"toggle-lid-sleep.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🐚\"\n          },\n          \"identifier\" : \"417db530f5bb78e762778ce4c5904d26\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle Lid Sleep\",\n          \"updatedAt\" : \"2023-09-07T11:09:47-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Felipe Turcheti\",\n              \"url\" : \"https:\\/\\/felipeturcheti.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-14T12:11:14-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open selected items in Finder with the given application.\",\n          \"filename\" : \"open-selection-with.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗃\"\n          },\n          \"identifier\" : \"b1987f2e21f020ceee84b57772d3f15a\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"System\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Selection With\",\n          \"updatedAt\" : \"2021-07-23T17:36:34-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Quentin Eude\",\n              \"url\" : \"https:\\/\\/www.github.com\\/qeude\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-27T23:18:58+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Updates community Script Commands to their last available version from the GitHub repository.\",\n          \"filename\" : \"update-scripts-command.template.py\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"♻️\"\n          },\n          \"identifier\" : \"13f3f5d751ba32a69ff8268898874db8\",\n          \"isTemplate\" : true,\n          \"language\" : \"python\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Utilities\",\n          \"path\" : \"system\\/\",\n          \"refreshTime\" : \"1d\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Update Community Scripts\",\n          \"updatedAt\" : \"2021-07-23T17:37:52-04:00\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"VPN\",\n          \"path\" : \"vpn\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Alexandru Turcanu\",\n                  \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T18:45:43-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop VPN connection.\",\n              \"filename\" : \"vpn-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"e9c6739e7bcaf94d8b07432be4faaacf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpn\\/\",\n              \"refreshTime\" : \"1m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"VPN Status\",\n              \"updatedAt\" : \"2021-03-13T13:30:31-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Alexandru Turcanu\",\n                  \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T18:45:43-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop VPN connection.\",\n              \"filename\" : \"vpn-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"53cbd464f25c9755071a1e7c119b2b44\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect\",\n              \"updatedAt\" : \"2021-03-05T15:58:14-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Alexandru Turcanu\",\n                  \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T18:44:00-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start VPN connection.\",\n              \"filename\" : \"vpn-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"c92872a6233d078b2eb41eb0e4b9faa8\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect\",\n              \"updatedAt\" : \"2021-03-06T21:56:49-08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Magic Keyboard Switcher\",\n          \"path\" : \"magic-keyboard-switcher\",\n          \"readme\" : \"system\\/magic-keyboard-switcher\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"blastik\",\n                  \"url\" : \"https:\\/\\/github.com\\/blastik\"\n                }\n              ],\n              \"createdAt\" : \"2025-09-24T17:50:16+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch a single magic keyboard between computers\",\n              \"filename\" : \"magic-keyboard-switcher.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/logo.png\"\n              },\n              \"identifier\" : \"ebd6d04790272dd639e870be745a66db\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"System\",\n              \"path\" : \"system\\/magic-keyboard-switcher\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Magic Keyboard switcher\",\n              \"updatedAt\" : \"2025-09-24T17:59:07+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Vpnutil\",\n          \"path\" : \"vpnutil\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-08T20:08:21+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start VPN connection.\",\n              \"filename\" : \"vpnutil-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"b65509f00ff96881390957a20ef127da\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpnutil\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start VPN\",\n              \"updatedAt\" : \"2021-10-08T20:08:21+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-08T20:08:21+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop VPN connection\",\n              \"filename\" : \"vpnutil-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"bedab222fcfd49e2dd9c66d87ac8262e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpnutil\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop VPN\",\n              \"updatedAt\" : \"2021-10-08T20:08:21+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-08T20:08:21+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Check VPN connection\",\n              \"filename\" : \"vpnutil-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"9673d2c49273541b6cb9d367f1c89946\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpnutil\\/\",\n              \"refreshTime\" : \"30s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"VPN Status\",\n              \"updatedAt\" : \"2021-10-08T20:08:21+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-08T20:08:21+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle VPN connection\",\n              \"filename\" : \"vpnutil-toggle.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📡\"\n              },\n              \"identifier\" : \"362f65162d24f126ffdabdf0c773d358\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VPN\",\n              \"path\" : \"system\\/vpnutil\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle VPN\",\n              \"updatedAt\" : \"2021-10-08T20:08:21+03:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Audio\",\n          \"path\" : \"audio\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Quentin Eude\",\n                  \"url\" : \"https:\\/\\/www.github.com\\/qeude\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T13:56:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get the current battery status of your AirPods.\",\n              \"filename\" : \"airpodsbattery.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⚡️\"\n              },\n              \"identifier\" : \"2c840755252ffd42ed783bcfb4134f56\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : \"10m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"AirPods Battery Level\",\n              \"updatedAt\" : \"2022-02-07T20:12:21-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Nichlas W. Andersen\",\n                  \"url\" : \"https:\\/\\/github.com\\/itsnwa\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-27T15:25:23+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle AirPods bluetooth device\",\n              \"filename\" : \"toggle-airpods.template.swift\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/airpod.png\"\n              },\n              \"identifier\" : \"e8755f7caafc73caae63ce7c94750cdf\",\n              \"isTemplate\" : true,\n              \"language\" : \"swift\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle AirPods\",\n              \"updatedAt\" : \"2021-04-16T19:18:39+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Mortada Sarheed\",\n                  \"url\" : \"https:\\/\\/github.com\\/mSarheed\"\n                }\n              ],\n              \"createdAt\" : \"2023-02-03T08:45:57+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get the battery level of your bluetooth headphones\",\n              \"filename\" : \"bluetooth-headphones-battery-level.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎧\"\n              },\n              \"identifier\" : \"0e6a4e95c4fef0b4d461f56d1ab20367\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Headphones Battery Level\",\n              \"updatedAt\" : \"2023-02-03T07:51:37Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-27T12:34:54-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch audio output to desired device.\",\n              \"filename\" : \"audio-output-switch.template.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔊\"\n              },\n              \"identifier\" : \"8dd25c9a462a193eb17953c7190d9772\",\n              \"isTemplate\" : true,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch Audio to <Device Name>\",\n              \"updatedAt\" : \"2021-11-07T15:24:00-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Maxim Krouk\",\n                  \"url\" : \"https:\\/\\/github.com\\/maximkrouk\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T18:28:38+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Reloads CoreAudio.\",\n              \"filename\" : \"reload-coreaudio.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎧\"\n              },\n              \"identifier\" : \"580b49c0d52425d9cab1cd4ac703fd44\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"System\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Reload CoreAudio\",\n              \"updatedAt\" : \"2021-04-16T19:18:39+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Annie Ma\",\n                  \"url\" : \"http:\\/\\/www.anniema.co\\/\"\n                }\n              ],\n              \"createdAt\" : \"2024-01-26T14:05:08-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles notification sounds.\",\n              \"filename\" : \"toggle-mute-notification-sounds.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔔\"\n              },\n              \"identifier\" : \"a3b32fd55c23706603f24da4c74fd8d0\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"System\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Mute Notifcation Sounds\",\n              \"updatedAt\" : \"2024-02-01T16:53:25Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Roland Leth\",\n                  \"url\" : \"https:\\/\\/runtimesharks.com\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-16T19:19:51+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Lists all audio devices\",\n              \"filename\" : \"get-audio-devices.swift\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔈\"\n              },\n              \"identifier\" : \"cf5a5edf5cd9fc9c369f149911456157\",\n              \"isTemplate\" : false,\n              \"language\" : \"swift\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Audio devices\",\n              \"updatedAt\" : \"2022-04-24T19:49:41+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Roland Leth\",\n                  \"url\" : \"https:\\/\\/runtimesharks.com\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-16T19:19:51+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Shows the selected audio devices for input and output\",\n              \"filename\" : \"get-selected-audio-device.swift\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔈\"\n              },\n              \"identifier\" : \"d8885d2f00ea821ec2656fd57afb7651\",\n              \"isTemplate\" : false,\n              \"language\" : \"swift\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : \"10m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Audio devices\",\n              \"updatedAt\" : \"2022-04-24T19:49:41+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Roland Leth\",\n                  \"url\" : \"https:\\/\\/runtimesharks.com\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-16T19:19:51+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Sets the input (i), the output (o) or both (b) audio sources, based on name. If `both` is passed, but no input or output device is found with the given name, it will still try to set the other one. For example, if you're trying to set both to \\\"External mic\\\", which doesn't have an input source, it will still set the output to the mic; vice-versa for a speaker.\",\n              \"filename\" : \"set-audio-device.swift\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎧\"\n              },\n              \"identifier\" : \"c53a8be130421322b399134699321dd3\",\n              \"isTemplate\" : false,\n              \"language\" : \"swift\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Audio\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set audio device\",\n              \"updatedAt\" : \"2022-04-24T19:49:41+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Matthew Morek\",\n                  \"url\" : \"https:\\/\\/github.com\\/matthewmorek\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-18T12:31:04Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles microphone.\",\n              \"filename\" : \"toggle-mic.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎙\"\n              },\n              \"identifier\" : \"f429f9a5cb87014a029d0a64cc5ce0f5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"System\",\n              \"path\" : \"system\\/audio\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Microphone\",\n              \"updatedAt\" : \"2021-04-16T19:18:39+03:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Dashboards\",\n      \"path\" : \"dashboards\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Sam Wright\",\n              \"url\" : \"https:\\/\\/raycast.com\\/samywamy10\"\n            }\n          ],\n          \"createdAt\" : \"2024-04-11T17:21:31+10:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Runs an iPerf Speed Test.\",\n          \"filename\" : \"iperf-speed-test.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💾\"\n          },\n          \"identifier\" : \"804d7f7d15474c0b6f5798afa59badee\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"iPerf\",\n          \"path\" : \"dashboards\\/\",\n          \"refreshTime\" : \"1h\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Speed Test\",\n          \"updatedAt\" : \"2024-04-11T07:23:05Z\"\n        }\n      ]\n    },\n    {\n      \"name\" : \"Ai\",\n      \"path\" : \"ai\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Gemini\",\n          \"path\" : \"gemini\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Est7\",\n                  \"url\" : \"https:\\/\\/github.com\\/est7\"\n                },\n                {\n                  \"name\" : \"Nimo Beeren\",\n                  \"url\" : \"https:\\/\\/github.com\\/nimobeeren\"\n                }\n              ],\n              \"createdAt\" : \"2025-04-24T11:38:46+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Gemini in Chrome browser and submit a prompt with optional selected text as context\",\n              \"filename\" : \"gemini.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/icon-gemini.svg\"\n              },\n              \"identifier\" : \"2a9c8b6698663cc8834ace7501bc9bec\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Gemini\",\n              \"path\" : \"ai\\/gemini\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Ask Gemini\",\n              \"updatedAt\" : \"2025-05-13T08:32:11Z\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Developer Utils\",\n      \"path\" : \"developer-utils\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Escapes shell character string and copies it again.\",\n          \"filename\" : \"escape-shell-chars.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"3556af78a49b7e2967aaf62fdf7af394\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Escape String for Shell\",\n          \"updatedAt\" : \"2020-12-09T22:19:19Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tommaso Panozzo\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2021-01-19T19:47:37+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Perform a dig command with the specified options\",\n          \"filename\" : \"dig.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌍\"\n          },\n          \"identifier\" : \"76e8a2bdb0755914ef14a8ace3a58bfd\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Dig\",\n          \"updatedAt\" : \"2021-01-20T15:45:08+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"es183923\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2021-06-21T19:28:31-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Counts the characters of either the clipboard or the passed argument\",\n          \"filename\" : \"count-characters.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"a33b175caa4abccee75bc6ad6d6b5e67\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Count Characters Bash\",\n          \"updatedAt\" : \"2021-06-23T07:27:53Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Stephen Kaplan\",\n              \"url\" : \"https:\\/\\/github.com\\/SKaplanOfficial\"\n            }\n          ],\n          \"createdAt\" : \"2023-11-08T05:45:01-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens the Scripting Dictionary for the given application, defaulting to the active application if none is provided.\",\n          \"filename\" : \"view-scripting-dictionary.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📖\"\n          },\n          \"identifier\" : \"2185a0ecf69c65f22c0ce316008c1bfb\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"View Scripting Dictionary\",\n          \"updatedAt\" : \"2023-11-08T05:45:01-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Nitin Gupta\",\n              \"url\" : \"https:\\/\\/twitter.com\\/gniting\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-21T22:44:40+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Transform the case of clipboard content. Defaults to lower case if no conversion type is specified.\",\n          \"filename\" : \"transform-case.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔠\"\n          },\n          \"identifier\" : \"92d1c03818363583b0df10944cdc072d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Transform Case\",\n          \"updatedAt\" : \"2021-01-24T20:18:06Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bin Hua\",\n              \"url\" : \"https:\\/\\/github.com\\/hzb\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-26T16:54:25+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Decode the base64 string \",\n          \"filename\" : \"base64-decode-input.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔓\"\n          },\n          \"identifier\" : \"cf858f45021ed3976ffa1cd6ac33f582\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Base64 Decode\",\n          \"updatedAt\" : \"2021-03-26T10:57:36+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-12-09T16:57:40+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Encodes clipboard content url and copies it again.\",\n          \"filename\" : \"encode-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"e03f480894d930f587385b48fdced736\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Encode URL\",\n          \"updatedAt\" : \"2020-12-09T16:57:40+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Encodes clipboard content to Base64 and copies it again.\",\n          \"filename\" : \"encode-base64.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"80c6334563b22e1d01c5913e6d871f77\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Encode Base64\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T15:49:35+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Decodes JSON web token from the clipboard.\",\n          \"filename\" : \"decode-jwt.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/jwt-logo.png\"\n          },\n          \"identifier\" : \"51e8857c2a5589de87c92ea2f20af7a9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Decode JWT\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"everdrone\",\n              \"url\" : \"https:\\/\\/github.com\\/everdrone\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-14T20:09:49+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generates an iOS style password\",\n          \"filename\" : \"genpasswd.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : \"images\\/genpasswd-iconDark.png\",\n            \"light\" : \"images\\/genpasswd.png\"\n          },\n          \"identifier\" : \"9dc51af4c249558a100fad853ffcc352\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Security\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate Password\",\n          \"updatedAt\" : \"2022-03-21T14:57:32-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Claven\",\n              \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-04T23:05:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Check if a website is up\",\n          \"filename\" : \"is-it-up.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"2889ef24ae8d92015ae9500dfc3e704a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Is It Up?\",\n          \"updatedAt\" : \"2023-02-21T22:56:29-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Andrii Barabash\",\n              \"url\" : \"https:\\/\\/github.com\\/AndriiBarabash\"\n            }\n          ],\n          \"createdAt\" : \"2025-09-27T20:40:28+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Toggles an SSH SOCKS proxy tunnel on and off.\",\n          \"filename\" : \"toggle_ssh_proxy_tunnel.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔒\"\n          },\n          \"identifier\" : \"aae74278107ffa5f34b3733eb2c8a813\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Toggle SSH SOCKS Tunnel\",\n          \"updatedAt\" : \"2025-09-29T13:44:50Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            },\n            {\n              \"name\" : \"Ronan Rodrigo Nunes\",\n              \"url\" : \"https:\\/\\/ronanrodrigo.dev\"\n            }\n          ],\n          \"createdAt\" : \"2020-10-31T13:18:27-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Whois of URL.\",\n          \"filename\" : \"whois.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"de0fd04fb4dac9268fcd8c745ab009e4\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Whois\",\n          \"updatedAt\" : \"2021-02-19T19:09:37-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Federico Miraglia\",\n              \"url\" : \"https:\\/\\/github.com\\/Mitra98t\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-30T10:40:35+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Add or Subtract specified amount of time from given date.\",\n          \"filename\" : \"time-calculator.js\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕒\"\n          },\n          \"identifier\" : \"1de7d90505c68023321e8f8e32908e30\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Time Calculator\",\n          \"updatedAt\" : \"2021-08-30T17:05:39+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Maxim Krouk\",\n              \"url\" : \"https:\\/\\/github.com\\/maximkrouk\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-04T15:26:50+03:00\",\n          \"currentDirectoryPath\" : \"~\\/Downloads\",\n          \"description\" : \"Records simulator to Downloads folder\",\n          \"filename\" : \"record-simulator.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📱\"\n          },\n          \"identifier\" : \"9d80c6864ac75f2e9051fe6b9f0e2186\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : true,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Record Simulator\",\n          \"updatedAt\" : \"2020-11-27T15:54:09+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Dean Moore\",\n              \"url\" : \"https:\\/\\/github.com\\/moored\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-18T10:28:52-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Use [swiftformat](https:\\/\\/github.com\\/nicklockwood\\/SwiftFormat) to format clipboard content.\",\n          \"filename\" : \"format-swift.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/swift.png\"\n          },\n          \"identifier\" : \"e88c615ae9cd3edd3deab50e75554356\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Format Swift\",\n          \"updatedAt\" : \"2021-01-18T10:28:52-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Senthil Prabhu\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2021-05-15T18:30:49-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get JSON-formatted text\",\n          \"filename\" : \"json-stringify-text.js\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"a4b5279dada552a93c9f6a4a2b7515fd\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Json Stringify Text\",\n          \"updatedAt\" : \"2021-05-15T18:30:49-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bin Hua\",\n              \"url\" : \"https:\\/\\/github.com\\/hzb\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-26T16:54:25+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Hashing any text data by using MD5 \",\n          \"filename\" : \"md5-hash.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"33557a7c765e2f161ce57838089fa133\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"MD5 Hash\",\n          \"updatedAt\" : \"2021-03-26T10:57:36+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kabilan VS\",\n              \"url\" : \"https:\\/\\/github.com\\/KABILAN235\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-17T13:10:32+05:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Creates A Flutter Project from Raycast\",\n          \"filename\" : \"flutter-create.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/flutter.png\"\n          },\n          \"identifier\" : \"c618b8ddac2e75b88bb80f7f992ba09b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"flutter-create\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Flutter Create Project\",\n          \"updatedAt\" : \"2021-08-17T16:40:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Vishal Telangre\",\n              \"url\" : \"https:\\/\\/github.com\\/vishaltelangre\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-30T21:05:51+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copies full path of the currently focused Finder window\",\n          \"filename\" : \"copy-focused-finder-window-path.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📁\"\n          },\n          \"identifier\" : \"6e8e65e874ff14cff3f49c902d7481b9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Focused Finder Window Path\",\n          \"updatedAt\" : \"2022-04-24T12:29:22+05:30\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Angelos Michalopoulos\",\n              \"url\" : \"https:\\/\\/github.com\\/miagg\"\n            }\n          ],\n          \"createdAt\" : \"2022-08-19T13:26:13+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copying the default SSH public key to the clipboard\",\n          \"filename\" : \"copy-ssh-public-key.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔑\"\n          },\n          \"identifier\" : \"47d77dea587aac1516a1fb3d1ab9408c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy SSH Public Key\",\n          \"updatedAt\" : \"2022-08-19T13:26:13+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-09T15:37:42-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Ping an IP address or URL on an interval.\",\n          \"filename\" : \"ping-monitor.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"37d45215abd0ff3284bb55a695316b26\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : \"10m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Ping Monitor\",\n          \"updatedAt\" : \"2020-11-28T12:02:29-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Wesley Martin\",\n              \"url\" : \"https:\\/\\/github.com\\/itsmewes\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-30T21:05:51+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Runs the specified command in the path of the frontmost Finder window.\",\n          \"filename\" : \"run-command-in-finder.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🛠\"\n          },\n          \"identifier\" : \"1d9d4db0327b77156dd2f3d90bc2178d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Run Command On Front Finder Window\",\n          \"updatedAt\" : \"2022-01-17T18:22:39-08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thiago Holanda\",\n              \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-05T21:07:26+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search for Script Commands available in the Raycast repository\",\n          \"filename\" : \"search-script-command.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔎\"\n          },\n          \"identifier\" : \"15992addc83ee43764382a5e2542d881\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Searches\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Script Command\",\n          \"updatedAt\" : \"2021-06-05T21:13:58+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-04T18:33:53+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Query the cheat.sh service (https:\\/\\/github.com\\/chubin\\/cheat.sh). You can change the color style in the script.\",\n          \"filename\" : \"cheat.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/cheat.png\"\n          },\n          \"identifier\" : \"d9751e4c2bbea57167d0deb109c59ed2\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Query cheat.sh\",\n          \"updatedAt\" : \"2023-09-06T19:19:46-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-29T23:38:39-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Add one or multiple SSH keys to your SSH agent (with Terminal).\",\n          \"filename\" : \"add-ssh-keys.template.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔑\"\n          },\n          \"identifier\" : \"0e05c991f24731e6a1e58371f344e642\",\n          \"isTemplate\" : true,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Add SSH Keys (with Terminal)\",\n          \"updatedAt\" : \"2020-11-30T12:43:15-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-10-31T13:18:27-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Ping an IP address or URL.\",\n          \"filename\" : \"ping.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"d54133efdfb60f4a106d5e71bca70d62\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Ping\",\n          \"updatedAt\" : \"2020-11-28T12:02:29-05:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-12-09T16:57:40+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Decodes clipboard content url and copies it again.\",\n          \"filename\" : \"decode-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"c2ef9c99c73b7a1d8630561785f9ea8e\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Decode URL\",\n          \"updatedAt\" : \"2020-12-09T16:57:40+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Nikita Galaiko\",\n              \"url\" : \"https:\\/\\/github.com\\/ngalaiko\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-18T17:37:27+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Unshortens clipboard content url and copies the result again.\",\n          \"filename\" : \"unshorten-url.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"51d92211ad21137b75d754f3b9667925\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Unshorten URL\",\n          \"updatedAt\" : \"2021-08-18T17:37:27+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bin Hua\",\n              \"url\" : \"https:\\/\\/github.com\\/hzb\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-26T16:54:25+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Hashing any text data by using SHA1 \",\n          \"filename\" : \"sha1-hash.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"1ad5c7f8159fc0dae9adfecbcfca4d8b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"SHA1 Hash\",\n          \"updatedAt\" : \"2021-03-26T10:57:36+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"David Molinero\",\n              \"url\" : \"https:\\/\\/github.com\\/doktor500\"\n            }\n          ],\n          \"createdAt\" : \"2021-12-20T12:46:48Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generates a ULID and copies it to the clipboard.\",\n          \"filename\" : \"generate-ulid.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"17aae21d1f94cccc5275cb681e873b28\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate ULID\",\n          \"updatedAt\" : \"2021-12-20T12:48:58Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"tiancheng92\",\n              \"url\" : \"https:\\/\\/github.com\\/tiancheng92\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-04T20:09:17+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert the copied JSON into a golang structure.\",\n          \"filename\" : \"json-to-go-struct.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/go.png\"\n          },\n          \"identifier\" : \"bd5ad11d3fcb36ac7933708b79445f81\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"JSON to Go Struct\",\n          \"updatedAt\" : \"2021-05-04T20:09:17+08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generates a UUID and copies it to the clipboard.\",\n          \"filename\" : \"generate-uuid.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"15e0cdafaec4ea8f9b3238e01492e2b6\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate UUID\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-26T03:10:03-05:00\",\n          \"currentDirectoryPath\" : \"~\\/Desktop\",\n          \"description\" : \"Run [Pa11y](https:\\/\\/github.com\\/pa11y\\/pa11y) web accessibility tool on specified path or URL.\",\n          \"filename\" : \"pa11y.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/pa11y-logo.png\"\n          },\n          \"identifier\" : \"309d6bde81fe018c53614348ce28d182\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Run Pa11y\",\n          \"updatedAt\" : \"2020-11-28T12:02:29-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Thomas Paul Mann\",\n              \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-16T22:31:57Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Create beautiful images of your code with https:\\/\\/ray.so\",\n          \"filename\" : \"create-image-from-code.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/ray-so.png\"\n          },\n          \"identifier\" : \"88ae1869a8a7487db63e8ff43fb3db43\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Create Image From Code\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create Image from Code\",\n          \"updatedAt\" : \"2024-03-12T21:01:55+07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Roland Leth\",\n              \"url\" : \"https:\\/\\/runtimesharks.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-26T10:48:43+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Ignore package folders (node_modules, Pods, etc) from Time Machine backups. They might not be big in size (altough they do add up), but they usually have tens of thousands of files, making backups slower than they should be. Many files are worse than big files when copying. You can also add a Spotlight comment to each file, to easily be able to exclude the same folders from Spotlight indexing (disabled by default).\",\n          \"filename\" : \"ignore-package-folders-time-machine.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧹\"\n          },\n          \"identifier\" : \"fd4d560b89abd1d877259b62d388d85a\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : \"1d\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Ignore Package Folders\",\n          \"updatedAt\" : \"2021-05-11T19:04:01+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ted Spare\",\n              \"url\" : \"https:\\/\\/y.at\\/🤘🐊🗿🚀\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-09T14:49:09-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Check the availability of a domain with the Vercel API.\",\n          \"filename\" : \"check-domain.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌐\"\n          },\n          \"identifier\" : \"6ff5efc0b5b6574ac92dcb9ffb4ba55d\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Check Domain\",\n          \"updatedAt\" : \"2021-04-09T16:30:08-04:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-10-22T17:56:24+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copy one paragraph of Lorem Ipsum to clipboard.\",\n          \"filename\" : \"lorem-ipsum.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📝\"\n          },\n          \"identifier\" : \"0e5e11aa786ebad91ffd4fa5749560ba\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Lorem Ipsum\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Achille Lacoin\",\n              \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-13T18:40:29+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Print the tldr documentation for a command\",\n          \"filename\" : \"tldr.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"fca22a689bb0bb51b37dd478c37ca23a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Print TLDR doc\",\n          \"updatedAt\" : \"2021-03-16T06:39:37Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Boyang Xu\",\n              \"url\" : \"https:\\/\\/github.com\\/BoyangMichael\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-18T22:35:37+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Run arbitrary bash command and return output in Raycast.\",\n          \"filename\" : \"run-bash-command.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/run-bash-command.png\"\n          },\n          \"identifier\" : \"29f3afd5e2cbb58c3472b93950e66acc\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Bash Command\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Run Command\",\n          \"updatedAt\" : \"2021-03-03T20:40:04+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Ronan Rodrigo Nunes\",\n              \"url\" : \"https:\\/\\/ronanrodrigo.dev\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-19T19:00:50-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get info about Apple API errors\",\n          \"filename\" : \"error-info.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"ℹ️\"\n          },\n          \"identifier\" : \"5d3a49d1e7ac5a244f43ec1e52cdd247\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Error Info\",\n          \"updatedAt\" : \"2021-03-01T16:54:23Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"decaylala\",\n              \"url\" : \"https:\\/\\/github.com\\/decaylala\"\n            }\n          ],\n          \"createdAt\" : \"2023-09-05T23:21:57+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Join multiple lines of text from the clipboard into a single line, separated by a specified delimiter.\",\n          \"filename\" : \"join-lines.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🛠\"\n          },\n          \"identifier\" : \"ed8ed8f5841fbb881efe5a16aef73695\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Join Clipboard Lines by Delimiter\",\n          \"updatedAt\" : \"2023-09-05T15:24:46Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Bin Hua\",\n              \"url\" : \"https:\\/\\/github.com\\/hzb\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-26T16:54:25+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Encode any text data by using base64\",\n          \"filename\" : \"base64-encode-input.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"413fdbfe4e1e457bcaa4dc47a186f9c8\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : false,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Base64 Encode\",\n          \"updatedAt\" : \"2021-03-26T10:57:36+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Annie Ma\",\n              \"url\" : \"http:\\/\\/www.anniema.co\\/\"\n            }\n          ],\n          \"createdAt\" : \"2024-01-26T02:19:25-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script deletes the line at cursor position.\",\n          \"filename\" : \"delete-current-line.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⌨️\"\n          },\n          \"identifier\" : \"155fc5e8e485cc9d9f7a08797ea68597\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Delete Current Line\",\n          \"updatedAt\" : \"2024-01-26T09:21:48Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Nitin Gupta\",\n              \"url\" : \"https:\\/\\/twitter.com\\/gniting\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-21T16:59:53+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generate a strong password of requested character length\",\n          \"filename\" : \"strong-password-generator.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"80a1fdca81c2624ad48f4ce213548c3f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Strong Password Generator\",\n          \"updatedAt\" : \"2021-01-24T20:15:25Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Decodes clipboard content to Base64 and copies it again.\",\n          \"filename\" : \"decode-base64.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"fb9ce529b10e97d45f16f0509c8de8a4\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Decode Base64\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kirill Gorbachyonok\",\n              \"url\" : \"https:\\/\\/github.com\\/japanese-goblinn\"\n            }\n          ],\n          \"createdAt\" : \"2021-06-14T20:33:34+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"This script clears all Xcode related junk.\",\n          \"filename\" : \"clear_xcode.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧹\"\n          },\n          \"identifier\" : \"f667f25957f079e625220ac6a9c06c36\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Xcode\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Clear All Related Junk\",\n          \"updatedAt\" : \"2023-02-10T21:22:03-06:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-27T20:25:40-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Copy the current epoch Unix timestamp.\",\n          \"filename\" : \"unix-timestamp.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"⏱️\"\n          },\n          \"identifier\" : \"ef251d58c5886e790c7388ae3e69ff48\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Copy Current Epoch Unix Timestamp\",\n          \"updatedAt\" : \"2021-07-29T11:41:55Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-10-30T16:44:15-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Save URL to [Wayback Machine](https:\\/\\/web.archive.org\\/).\",\n          \"filename\" : \"wayback-machine-save.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/ia-logo.jpg\"\n          },\n          \"identifier\" : \"bca52e4f447bf57ba31d0b6328767d4d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Internet\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Save URL to Wayback Machine\",\n          \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Roland Leth\",\n              \"url\" : \"https:\\/\\/runtimesharks.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-11T14:33:06+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generates a .gitignore file via https:\\/\\/gitignore.io\",\n          \"filename\" : \"generate-git-ignore.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤐\"\n          },\n          \"identifier\" : \"19cb3794d5961cfc2c000ba8dc1f360b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Create .gitignore\",\n          \"updatedAt\" : \"2021-03-12T13:26:05+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Pretty prints the JSON currently in the clipboard.\",\n          \"filename\" : \"prettify-json.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"💻\"\n          },\n          \"identifier\" : \"793262298b9e39806d6a8ea2c3cce0d7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Prettify JSON\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tomás Martins\",\n              \"url\" : \"https:\\/\\/github.com\\/tfmart\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-31T17:46:47-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Opens a URL inside the currently booted iOS Simulator. Can be used to open deeplinks\",\n          \"filename\" : \"open-link-simulator.applescript\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"3e18b6a937423f4bfd1058e830fe5757\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open Deep Link\",\n          \"updatedAt\" : \"2021-09-01T13:11:06Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Kiko Beats\",\n              \"url\" : \"https:\\/\\/github.com\\/kikobeats\"\n            }\n          ],\n          \"createdAt\" : \"2022-01-03T14:02:54+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Microlink API integration\",\n          \"filename\" : \"microlink.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/microlink.png\"\n          },\n          \"identifier\" : \"e9302dbc4177d6533a9279fd03436425\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Microlink\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Microlink API\",\n          \"updatedAt\" : \"2022-01-05T11:19:54+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-09-30T13:01:03+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Clear the derived data of Xcode.\",\n          \"filename\" : \"clear-derived-data.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🧹\"\n          },\n          \"identifier\" : \"ccd9291be77cdeda87ed3b37bfc25085\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Xcode\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Clear Derived Data\",\n          \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Saimir S.\",\n              \"url\" : \"https:\\/\\/www.saimirsulaj.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-27T00:08:52-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Utility to convert numbers between bases. Can be one number or a list of string-delimited numbers.\",\n          \"filename\" : \"base-converter.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤖\"\n          },\n          \"identifier\" : \"daefa8c3358b3663e42f53aa3f08210c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Base Converter\",\n          \"updatedAt\" : \"2021-05-31T13:00:42-07:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Angelos Michalopoulos\",\n              \"url\" : \"https:\\/\\/github.com\\/miagg\"\n            }\n          ],\n          \"createdAt\" : \"2022-08-19T12:58:32+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get the TTFB (Time to First Byte) of a website\",\n          \"filename\" : \"get-ttfb.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕐\"\n          },\n          \"identifier\" : \"d4474b109eb271a2ce54473c58edb94d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utils\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Get TTFB (Time to First Byte)\",\n          \"updatedAt\" : \"2023-01-05T20:54:09+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-16T22:04:43-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Trim full git commit hash down to seven characters.\",\n          \"filename\" : \"trim-git-commit-hash.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"✂\"\n          },\n          \"identifier\" : \"fac2d5bdb898b7e6f0d2e5ce93a44df7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Trim Git Commit Hash\",\n          \"updatedAt\" : \"2021-07-19T14:40:00Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Federico Miraglia\",\n              \"url\" : \"https:\\/\\/github.com\\/Mitra98t\"\n            }\n          ],\n          \"createdAt\" : \"2021-08-30T10:40:35+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Given two dates returns the time between them in multiple units of measure.\",\n          \"filename\" : \"time-between-dates.js\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕒\"\n          },\n          \"identifier\" : \"61a5ca9258cedf7950981a96058b12bc\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"fullOutput\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Time Between Dates\",\n          \"updatedAt\" : \"2021-08-30T17:05:39+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Sven Hofmann\",\n              \"url\" : \"https:\\/\\/github.com\\/hofmannsven\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-12T20:31:09+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Generates a random password and copies it to the clipboard.\",\n          \"filename\" : \"generate-password.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"a9156493eb0a70991d4fa0c6e86eb266\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Developer Utilities\",\n          \"path\" : \"developer-utils\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate Password\",\n          \"updatedAt\" : \"2020-11-23T12:53:48-05:00\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Xcode\",\n          \"path\" : \"xcode\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-09-27T01:47:33+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open recent Xcode project\",\n              \"filename\" : \"xcode-recent-project.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/xcode.png\"\n              },\n              \"identifier\" : \"1e147f71972fc7e7512ae987ef3c458c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Developer Utilities\",\n              \"path\" : \"developer-utils\\/xcode\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Recent Project\",\n              \"updatedAt\" : \"2021-09-28T19:41:01+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-09-27T01:47:33+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the last Xcode project \",\n              \"filename\" : \"xcode-last-project.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/xcode.png\"\n              },\n              \"identifier\" : \"3604faee01a482d8272b529b4d0384b7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Developer Utilities\",\n              \"path\" : \"developer-utils\\/xcode\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Last Project\",\n              \"updatedAt\" : \"2021-09-28T19:41:01+03:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Docker\",\n          \"path\" : \"docker\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fabián Delgado\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-09-21T14:21:48-03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Runs a Docker container\",\n              \"filename\" : \"run-docker.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"▶️\"\n              },\n              \"identifier\" : \"79e2d77eee8042ec057f2786356d44dc\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Run\",\n              \"updatedAt\" : \"2021-09-21T14:21:48-03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sebastian Kroll\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-06-04T16:19:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Remove unused data (system prune)\",\n              \"filename\" : \"docker-system-prune.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/docker.png\"\n              },\n              \"identifier\" : \"95f636043fb2a5e955d988fa82a0d0bc\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"System Prune\",\n              \"updatedAt\" : \"2021-06-04T19:48:34+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sebastian Kroll\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-06-04T16:19:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"List containers in Docker\",\n              \"filename\" : \"docker-ps.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/docker.png\"\n              },\n              \"identifier\" : \"b9734d1d53f83eeb9e6e134548846d56\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Containers\",\n              \"updatedAt\" : \"2021-06-04T18:57:07+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fabián Delgado\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-06-06T21:26:12+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stops a Docker container\",\n              \"filename\" : \"stop-docker.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏹️\"\n              },\n              \"identifier\" : \"9684377a02881cbf7dcf91f76712c550\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop\",\n              \"updatedAt\" : \"2021-09-21T14:21:48-03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Quentin Eude\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-06-06T21:26:12+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Script that cleans Docker images, volumes, and containers\",\n              \"filename\" : \"clean-docker.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🧹\"\n              },\n              \"identifier\" : \"7220089fce735f0f32ad17bb19da6dd7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clean\",\n              \"updatedAt\" : \"2021-06-12T17:33:18Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sebastian Kroll\",\n                  \"url\" : null\n                }\n              ],\n              \"createdAt\" : \"2021-06-04T16:19:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"List images in Docker\",\n              \"filename\" : \"docker-images.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/docker.png\"\n              },\n              \"identifier\" : \"d510dd549de0f922fae2bebd9af9e9b9\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Docker\",\n              \"path\" : \"developer-utils\\/docker\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List Images\",\n              \"updatedAt\" : \"2021-06-04T18:57:07+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"GitLab\",\n          \"path\" : \"gitlab\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Aigner\",\n                  \"url\" : \"https:\\/\\/github.com\\/tonka3000\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-06T19:31:30+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show merge requests from GitLab\",\n              \"filename\" : \"gitlab-mergerequests.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/gitlab.png\"\n              },\n              \"identifier\" : \"254da90334e688f80da3ae9271149ab0\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitLab\",\n              \"path\" : \"developer-utils\\/gitlab\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Merge Requests\",\n              \"updatedAt\" : \"2021-05-20T22:33:40+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Aigner\",\n                  \"url\" : \"https:\\/\\/github.com\\/tonka3000\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-06T19:31:30+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show todos from GitLab\",\n              \"filename\" : \"gitlab-todos.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/gitlab.png\"\n              },\n              \"identifier\" : \"5e7219e2862849a3b1493f75be378574\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitLab\",\n              \"path\" : \"developer-utils\\/gitlab\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"To-Dos\",\n              \"updatedAt\" : \"2021-05-20T22:34:31+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Aigner\",\n                  \"url\" : \"https:\\/\\/github.com\\/tonka3000\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-06T19:31:30+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show issues from GitLab\",\n              \"filename\" : \"gitlab-issues.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/gitlab.png\"\n              },\n              \"identifier\" : \"592433d14d3ad035934bb7c059358afb\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitLab\",\n              \"path\" : \"developer-utils\\/gitlab\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Issues\",\n              \"updatedAt\" : \"2021-05-20T22:32:25+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Minikube\",\n          \"path\" : \"minikube\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start Minikube cluster\",\n              \"filename\" : \"minikube-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🚀\"\n              },\n              \"identifier\" : \"1d2543332c8c0ca25fe54aed2ee3f982\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause Minikube cluster\",\n              \"filename\" : \"minikube-config-set.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⚙️\"\n              },\n              \"identifier\" : \"d6f637554979e38d38f4149244d245c1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Config Set\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stops a running Minikube cluster\",\n              \"filename\" : \"minikube-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🤖\"\n              },\n              \"identifier\" : \"8b6bf7326d5c1bee0c704d3decf724de\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause Minikube cluster\",\n              \"filename\" : \"minikube-unpause.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏸\"\n              },\n              \"identifier\" : \"c164a2e673e4cf59c3180d154f1e78c6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unpause\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Minikube cluster status\",\n              \"filename\" : \"minikube-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"ℹ️\"\n              },\n              \"identifier\" : \"606629ecfbefdad4b07765587a208546\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Status\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/danpetrov.xyz\"\n                }\n              ],\n              \"createdAt\" : \"2022-08-06T20:55:00+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause Minikube cluster\",\n              \"filename\" : \"minikube-pause.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏸\"\n              },\n              \"identifier\" : \"8b95921fd6d9305ef97cd1e7ab038594\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Minikube\",\n              \"path\" : \"developer-utils\\/minikube\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2022-08-06T20:55:00+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Google\",\n          \"path\" : \"google\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-09T11:57:38-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run a [PageSpeed Insights](https:\\/\\/developers.google.com\\/speed\\/pagespeed\\/insights\\/) analysis on desktop of URL.\",\n              \"filename\" : \"google-psi-desktop.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/google-psi-logo.png\"\n              },\n              \"identifier\" : \"75d5bcfc2c27d0a67a02e8832413ea05\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Google\",\n              \"path\" : \"developer-utils\\/google\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"PageSpeed Insights - Desktop\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-09T11:57:38-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run a [PageSpeed Insights](https:\\/\\/developers.google.com\\/speed\\/pagespeed\\/insights\\/) analysis on mobile of URL.\",\n              \"filename\" : \"google-psi-mobile.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/google-psi-logo.png\"\n              },\n              \"identifier\" : \"e7ea215de7f19cf0b6379a5c6845ce9b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Google\",\n              \"path\" : \"developer-utils\\/google\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"PageSpeed Insights - Mobile\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-09T11:57:38-05:00\",\n              \"currentDirectoryPath\" : \"~\\/Desktop\",\n              \"description\" : \"Open a [Lighthouse](https:\\/\\/developers.google.com\\/web\\/tools\\/lighthouse\\/) report of URL.\",\n              \"filename\" : \"google-lighthouse.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/google-lighthouse-logo.png\"\n              },\n              \"identifier\" : \"133261278856325c8efd9cbfb976ee89\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Google\",\n              \"path\" : \"developer-utils\\/google\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lighthouse\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Cloudflare\",\n          \"path\" : \"cloudflare\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-08T14:08:53-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Purge Cloudflare cache for zone.\",\n              \"filename\" : \"purge-cloudflare-cache.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/cloudflare-logo.png\"\n              },\n              \"identifier\" : \"1a0200798cf02f1d51373e7abe1c28d7\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Developer Utilities\",\n              \"path\" : \"developer-utils\\/cloudflare\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Purge Cloudflare cache\",\n              \"updatedAt\" : \"2021-02-12T11:49:03+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Brew\",\n          \"path\" : \"brew\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"LanikSJ\",\n                  \"url\" : \"https:\\/\\/github.com\\/LanikSJ\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-03T00:32:00-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Updates brew and upgrades every outdated app\",\n              \"filename\" : \"brew-cask-upgrade.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"d1c2825e774ea720d9897eaf8a0d7b9d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Cask Upgrade\",\n              \"updatedAt\" : \"2022-03-03T00:32:00-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Alex Zotov\",\n                  \"url\" : \"https:\\/\\/github.com\\/lex4hex\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Installs specified brew package.\",\n              \"filename\" : \"brew-install.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"adca4439b61acdf144d8c88eccc99015\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Install a package\",\n              \"updatedAt\" : \"2021-02-27T17:45:55+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Brew Doctor\",\n              \"filename\" : \"brew-doctor.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"10533c5bd131980a3c04140be37c08df\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Doctor\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show list of outdated formulae\",\n              \"filename\" : \"brew-outdated.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"7c4d3d97c9fb7c35484b619b6b0b4baa\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Outdated List\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"owpac\",\n                  \"url\" : \"https:\\/\\/github.com\\/Owpac\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show list of installed brew formulae that are not dependencies of other installed formula.\",\n              \"filename\" : \"brew-leaves.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"06b8fc10bd7a10a81c62b0497065bbef\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Leaves\",\n              \"updatedAt\" : \"2021-07-27T09:53:34+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start Service in Brew\",\n              \"filename\" : \"brew-services-start.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"14f68427c73fceff2728ea49d7913910\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Service\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"chengzhiqi\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/1872Fate\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Brew List\",\n              \"filename\" : \"brew-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"b3fc6fec062d9818837b5c81ce8c9289\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List\",\n              \"updatedAt\" : \"2021-03-19T16:42:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Brew Upgrade\",\n              \"filename\" : \"brew-upgrade.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"e3f952d3afb2505f743d46dead96f0be\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Upgrade\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop Service in Brew\",\n              \"filename\" : \"brew-services-stop.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"966dcea0d9a03789afb749ede84d2a5c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Service\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"chengzhiqi\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/1872Fate\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Brew Update\",\n              \"filename\" : \"brew-update.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"ebc4e137618151763aabdb69ffbab710\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Update\",\n              \"updatedAt\" : \"2021-03-19T16:42:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Restart Service in Brew\",\n              \"filename\" : \"brew-services-restart.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"9bd016400e1090535e0049cf056f61d0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Restart Service\",\n              \"updatedAt\" : \"2021-09-07T10:00:18Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"StevenRCE0\",\n                  \"url\" : \"https:\\/\\/github.com\\/StevenRCE0\"\n                }\n              ],\n              \"createdAt\" : \"2022-04-06T00:01:05+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Uninstalls an Specified Application Using Homebrew\",\n              \"filename\" : \"brew-uninstall-application.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"90405cfd617b86b933e641e182bb12c9\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Uninstall\",\n              \"updatedAt\" : \"2022-04-06T00:01:05+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thiago Holanda\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T22:12:12+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Brew Services List\",\n              \"filename\" : \"brew-services-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍺\"\n              },\n              \"identifier\" : \"d054a5f29c43451ae7057b53796ea450\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Brew\",\n              \"path\" : \"developer-utils\\/brew\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Services List\",\n              \"updatedAt\" : \"2021-02-25T00:34:23Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Solana\",\n          \"path\" : \"solana\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"bjoerndotsol\",\n                  \"url\" : \"https:\\/\\/github.com\\/bjoerndotsol\"\n                }\n              ],\n              \"createdAt\" : \"2025-11-09T12:49:22+04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Extract transaction from Blink endpoint in clipboard and replaces with the transaction\",\n              \"filename\" : \"solana-tx-blink-extract.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/solana-logo.png\"\n              },\n              \"identifier\" : \"b6d5f4f47851592cfb80de671a69b6d6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Solana\",\n              \"path\" : \"developer-utils\\/solana\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Extract Transaction from Blink Response\",\n              \"updatedAt\" : \"2025-11-09T12:49:22+04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"bjoerndotsol\",\n                  \"url\" : \"https:\\/\\/github.com\\/bjoerndotsol\"\n                }\n              ],\n              \"createdAt\" : \"2025-11-09T12:49:22+04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens a Solana transaction in Solscan. Network: empty\\/mainnet, d\\/dev\\/devnet, t\\/test\\/testnet\",\n              \"filename\" : \"solana-tx-details.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/solana-logo.png\"\n              },\n              \"identifier\" : \"8d593a4cf4ef3adafe986a1c06b00909\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Solana\",\n              \"path\" : \"developer-utils\\/solana\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"View Solana Transaction\",\n              \"updatedAt\" : \"2025-11-09T12:49:22+04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"bjoerndotsol\",\n                  \"url\" : \"https:\\/\\/github.com\\/bjoerndotsol\"\n                }\n              ],\n              \"createdAt\" : \"2025-11-09T12:49:22+04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Extracts the message from a signed Solana transaction and opens Explorer's Inspector with it.\",\n              \"filename\" : \"solana-tx-inspector.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/solana-logo.png\"\n              },\n              \"identifier\" : \"a2218c35f59137757e59aa21f61cb1a0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Solana\",\n              \"path\" : \"developer-utils\\/solana\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open in Solana Inspector\",\n              \"updatedAt\" : \"2025-11-09T12:49:22+04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"GitHub\",\n          \"path\" : \"github\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-10-30T17:06:29-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a GitHub Gist from clipboard contents and copy Gist URL.\",\n              \"filename\" : \"create-github-gist.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"2a28a49eb7824d5f54861fe0c9245a11\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create GitHub Gist from Clipboard\",\n              \"updatedAt\" : \"2021-05-02T10:22:03-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-27T10:40:24Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show statistics of your GitHub repository.\",\n              \"filename\" : \"github-repository-stars.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⭐️\"\n              },\n              \"identifier\" : \"bda99211bf65f1b5219db20e1b8f1b3d\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Repository Statistics\",\n              \"updatedAt\" : \"2020-11-27T10:40:24Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Astrit\",\n                  \"url\" : \"https:\\/\\/github.com\\/astrit\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-19T19:14:43+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show GitHub user contributions from the current year\",\n              \"filename\" : \"github-contributions.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"23544f0e4fd17e7d9cfb092fd82e1452\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub Contributions\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"2h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"GitHub Contributions\",\n              \"updatedAt\" : \"2021-11-19T19:14:43+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valdir Junior\",\n                  \"url\" : \"https:\\/\\/github.com\\/valdirjunior011 \"\n                }\n              ],\n              \"createdAt\" : \"2023-07-25T02:12:24+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show statistics of your GitHub repositories.\",\n              \"filename\" : \"github-repository-stars_all_repos_template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⭐️\"\n              },\n              \"identifier\" : \"b1a1df37b2ee1f7965f5bad16f491ddd\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Repository Statistics\",\n              \"updatedAt\" : \"2023-07-25T00:17:33Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-18T17:35:59-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open a repository, pull request, or issue on GitHub\",\n              \"filename\" : \"open-gh-repo-pr-or-issue.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"454c25458144284fc3c579691f9904b5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Visit a Repository, Pull Request, or Issue\",\n              \"updatedAt\" : \"2021-01-23T18:06:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faye Sipiano\",\n                  \"url\" : \"https:\\/\\/github.com\\/FSipiano\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-17T17:31:38Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display number of open pull requests\",\n              \"filename\" : \"github-open-pull-requests.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"07da15e048906bd7b5ee0275044649f8\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Pull Requests\",\n              \"updatedAt\" : \"2021-03-18T11:30:06Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faye Sipiano\",\n                  \"url\" : \"https:\\/\\/github.com\\/FSipiano\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-17T17:31:38Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display (detailed) GitHub pull requests\",\n              \"filename\" : \"github-open-pull-requests-details.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"d01e8e7a75307d40d48797d8ec6041b8\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Open Pull Requests\",\n              \"updatedAt\" : \"2021-05-02T10:25:44-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faye Sipiano\",\n                  \"url\" : \"https:\\/\\/github.com\\/FSipiano\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-17T17:31:38Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open your GitHub pull requests page\",\n              \"filename\" : \"github-open-pull-requests-page.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"1568c128b1e4e3897c8f2a65bb14d551\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Pull Requests page\",\n              \"updatedAt\" : \"2021-03-18T11:30:06Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Vince Picone\",\n                  \"url\" : \"https:\\/\\/github.com\\/vpicone\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-17T17:31:38Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display number of Pull Requests requesting your review\",\n              \"filename\" : \"github-review-requests.template.rb\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"d1fc531c2aa8d1bac53ac6f630c1ca90\",\n              \"isTemplate\" : true,\n              \"language\" : \"ruby\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Review Requests\",\n              \"updatedAt\" : \"2021-11-03T15:03:45-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-10-30T17:06:29-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display (detailed) number of unread GitHub notifications.\",\n              \"filename\" : \"github-unread-notifications.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/github-logo-iconDark.png\",\n                \"light\" : \"images\\/github-logo.png\"\n              },\n              \"identifier\" : \"9d6b84dd61dd585e27274651a7fda8fe\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unread Notifications\",\n              \"updatedAt\" : \"2021-08-20T16:42:39-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-22T16:12:34+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens the commit history of the filepath in the clipboard or the frontmost window. Alternatively can open the file view on GitHub.\",\n              \"filename\" : \"github-open-commit-history.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/github-logo-iconDark.png\",\n                \"light\" : \".\\/images\\/github-logo.png\"\n              },\n              \"identifier\" : \"2331a0f74a526204c81966b567479a1c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GitHub\",\n              \"path\" : \"developer-utils\\/github\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Commit History\",\n              \"updatedAt\" : \"2021-04-22T17:15:50+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Aws\",\n          \"path\" : \"aws\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Chris Cook\",\n                  \"url\" : \"https:\\/\\/github.com\\/zirkelc\"\n                }\n              ],\n              \"createdAt\" : \"2024-06-14T14:31:44+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Download from Amazon S3 via URL\",\n              \"filename\" : \"amazon-s3-download.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/amazon-s3.png\"\n              },\n              \"identifier\" : \"b4dd5f3fe1c6dd1b9b44fc9f0fe88364\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"AWS\",\n              \"path\" : \"developer-utils\\/aws\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"S3 Download\",\n              \"updatedAt\" : \"2024-09-17T11:36:59+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"David Molinero\",\n                  \"url\" : \"https:\\/\\/github.com\\/doktor500\"\n                }\n              ],\n              \"createdAt\" : \"2021-12-15T22:46:57+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Login to AWS using aws-sso-util\",\n              \"filename\" : \"aws-sso-util.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/aws-sso-util.png\"\n              },\n              \"identifier\" : \"97368460c4c6dd74419fb9fa3769c23e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"AWS\",\n              \"path\" : \"developer-utils\\/aws\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Single Sign-On\",\n              \"updatedAt\" : \"2021-12-19T15:22:29Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Oğuzhan Yılmaz\",\n                  \"url\" : \"https:\\/\\/github.com\\/c1982\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-29T23:14:00+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the AWS IPv4 to the clipboard.\",\n              \"filename\" : \"whatismyregion.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🤖\"\n              },\n              \"identifier\" : \"3c3c86c801d87462b02da5e9a2b8af00\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Developer Utilities\",\n              \"path\" : \"developer-utils\\/aws\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Find AWS Region by IP\",\n              \"updatedAt\" : \"2021-01-04T13:34:28Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Sentry\",\n          \"path\" : \"sentry\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-02T09:13:05Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show unresolved issues of the last 24 hours from Sentry.\",\n              \"filename\" : \"sentry-unresolved-issues.template.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \"images\\/sentry-dark.png\",\n                \"light\" : \"images\\/sentry.png\"\n              },\n              \"identifier\" : \"d965f2571912eb46a116071bd5a25111\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sentry\",\n              \"path\" : \"developer-utils\\/sentry\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unresolved Issues\",\n              \"updatedAt\" : \"2020-12-02T09:13:05Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                },\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-02T09:13:05Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show unresolved issues in the last 24 hours (by project) from Sentry.\",\n              \"filename\" : \"sentry-unresolved-issues-by-project.template.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/sentry-dark.png\",\n                \"light\" : \"images\\/sentry.png\"\n              },\n              \"identifier\" : \"cd9dc8603b5433fe83c15dd43785add6\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sentry\",\n              \"path\" : \"developer-utils\\/sentry\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unresolved Issues By Project\",\n              \"updatedAt\" : \"2021-02-20T19:00:22-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Ip\",\n          \"path\" : \"ip\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T13:18:04+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the local IPv4 to the clipboard.\",\n              \"filename\" : \"get-local-ip-v4.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"2d00ef79e3863dac5effcc73a62d3222\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Local IPv4\",\n              \"updatedAt\" : \"2022-01-19T12:05:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-10-31T13:10:47-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get IPv6 address of URL.\",\n              \"filename\" : \"get-url-ip-v6.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"7eaf42e6a3c85eeff9f35a84b6b80706\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"URL IPv6\",\n              \"updatedAt\" : \"2021-07-06T10:54:12+02:00\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T13:18:04+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the external IPv4 to the clipboard.\",\n              \"filename\" : \"get-external-ip-v4.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"31067b36b44e2c92476986f5be766a64\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"External IPv4\",\n              \"updatedAt\" : \"2022-01-19T12:05:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-10-31T13:10:47-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get IPv4 address of URL.\",\n              \"filename\" : \"get-url-ip-v4.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"5fc170964dbedecab11873849783b580\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"URL IPv4\",\n              \"updatedAt\" : \"2021-07-06T10:54:12+02:00\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T13:18:04+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the external IPv6 to the clipboard.\",\n              \"filename\" : \"get-external-ip-v6.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"76ee0abac28dee6ac5bcab6a13719a2a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"External IPv6\",\n              \"updatedAt\" : \"2022-01-19T12:05:31+01:00\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T13:18:04+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the local IPv6 to the clipboard.\",\n              \"filename\" : \"get-local-ip-v6.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌐\"\n              },\n              \"identifier\" : \"b8e90aa9ba83248b67f79cf54ad42a70\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Internet\",\n              \"path\" : \"developer-utils\\/ip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Local IPv6\",\n              \"updatedAt\" : \"2022-01-19T12:05:31+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Vscode\",\n          \"path\" : \"vscode\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Maksim Zemlyanikin\",\n                  \"url\" : \"https:\\/\\/github.com\\/Maksimka101\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-11T13:31:08+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Finds path to the given directory which must be a VS Code or Git project and opens it with VS Code\",\n              \"filename\" : \"open-project-in-vscode.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/vscode.png\"\n              },\n              \"identifier\" : \"66befabf033302a672d20d8d207a3dfd\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VS Code\",\n              \"path\" : \"developer-utils\\/vscode\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Project\",\n              \"updatedAt\" : \"2022-11-08T14:51:04+05:30\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"chohner\",\n                  \"url\" : \"https:\\/\\/github.com\\/chohner\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-22T11:26:39+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens current topmost directory in VS Code\",\n              \"filename\" : \"open-folder-in-vscode.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/vscode.png\"\n              },\n              \"identifier\" : \"2b0b56d7b5b14aacf924a1a6f236ecb3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"VS Code\",\n              \"path\" : \"developer-utils\\/vscode\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Directory\",\n              \"updatedAt\" : \"2022-11-08T14:51:04+05:30\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Git\",\n          \"path\" : \"git\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : \"~\\/Developer\\/script-commands\",\n              \"description\" : \"Shows the status of your Git repository.\",\n              \"filename\" : \"git-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"6ecda0ea71b6028d26ad0d114417d2b4\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Status\",\n              \"updatedAt\" : \"2021-07-19T15:52:56+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : \"~\\/Developer\\/script-commands\",\n              \"description\" : \"Switch to a new branch. If not name was provided, it checks out the default branch.\",\n              \"filename\" : \"git-switch-branch.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"8211369aa865446a41bcd4c5b1f1d6f4\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch Branch\",\n              \"updatedAt\" : \"2021-07-19T15:52:56+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : \"~\\/Developer\\/script-commands\",\n              \"description\" : \"Pulls, rebases and pushes your changes.\",\n              \"filename\" : \"git-sync-changes.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"f2d387141a75ac5d60fb34cc853a452d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Sync Changes\",\n              \"updatedAt\" : \"2021-07-19T15:52:56+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Lists your commits from the last 24 hours. Optionally specify since when, e.g. \\\"1 week\\\".\",\n              \"filename\" : \"git-standup.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"1e8d6e949bd023be73d76a0b4c921ddf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Standup\",\n              \"updatedAt\" : \"2021-08-06T19:27:39+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : \"~\\/Developer\\/script-commands\",\n              \"description\" : \"Clear all changes\",\n              \"filename\" : \"git-clear-changes.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"b92aaee255e5488a0eb3b8be826ebbbb\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clear Changes\",\n              \"updatedAt\" : \"2021-07-19T15:52:56+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T15:52:56+01:00\",\n              \"currentDirectoryPath\" : \"~\\/Developer\\/script-commands\",\n              \"description\" : \"Commit all pending changes. If no commit message is provided, it will amend the changes.\",\n              \"filename\" : \"git-save-changes.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/git.png\"\n              },\n              \"identifier\" : \"2db5481c5b71c36aa1723c442f12c949\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Git\",\n              \"path\" : \"developer-utils\\/git\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Save Changes\",\n              \"updatedAt\" : \"2021-07-19T15:52:56+01:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Communication\",\n      \"path\" : \"communication\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-16T16:14:09-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Use [xkcdpass](https:\\/\\/github.com\\/redacted\\/XKCD-password-generator) to create a passphrase.\",\n          \"filename\" : \"xkcdpass.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"e48d4638b40bf69a6c441a609f09e27b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Communication\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Generate Passphrase\",\n          \"updatedAt\" : \"2020-12-09T15:47:57-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Leo Fritsch\",\n              \"url\" : \"https:\\/\\/github.com\\/leofritsch\"\n            }\n          ],\n          \"createdAt\" : \"2023-06-26T20:03:01+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Let Me Google That For You\",\n          \"filename\" : \"let-me-google-that.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🤡\"\n          },\n          \"identifier\" : \"8c26812f87ffcd8305d704e94d8146eb\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Communication\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Let Me Google That\",\n          \"updatedAt\" : \"2023-06-27T09:57:07Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alexander JH Steffen\",\n              \"url\" : \"https:\\/\\/github.com\\/alexjsteffen\"\n            }\n          ],\n          \"createdAt\" : \"2021-12-20T07:46:10-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Place a telephone call via your iPhone on Wi-Fi.\",\n          \"filename\" : \"call-with-iphone.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📱\"\n          },\n          \"identifier\" : \"6a212b23c41606e8701b64a7e18a00bb\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Communication\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Call with iPhone\",\n          \"updatedAt\" : \"2021-12-20T07:46:10-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Felipe Turcheti\",\n              \"url\" : \"https:\\/\\/felipeturcheti.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-14T11:35:06-03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Convert text to audible speech.\",\n          \"filename\" : \"say.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🗣\"\n          },\n          \"identifier\" : \"36d92cab708c342b05f9c7ac27e5e96f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Communication\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Say\",\n          \"updatedAt\" : \"2021-04-14T12:13:12-03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Petr Nikolaev\",\n              \"url\" : \"https:\\/\\/github.com\\/PitNikola\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-14T20:36:28Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Share secret securely using https:\\/\\/share.doppler.com\\/.\",\n          \"filename\" : \"share-secret-doppler.py\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/doppler-logo.png\"\n          },\n          \"identifier\" : \"348009c977b2cf35d589b7723f89b8ed\",\n          \"isTemplate\" : false,\n          \"language\" : \"python\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Doppler\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Share Secret from Clipboard\",\n          \"updatedAt\" : \"2021-03-14T20:36:28Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            },\n            {\n              \"name\" : \"Thiago Holanda\",\n              \"url\" : \"https:\\/\\/twitter.com\\/tholanda\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-09T09:32:06-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get most recent two-factor authentication code from iMessages.\",\n          \"filename\" : \"imessage-2fa.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔐\"\n          },\n          \"identifier\" : \"12f0f2ced06b2baa123a6105dbfaca73\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"iMessage\",\n          \"path\" : \"communication\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"2FA from iMessages\",\n          \"updatedAt\" : \"2020-11-28T13:47:10-05:00\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Google Meet\",\n          \"path\" : \"google-meet\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Mujib Azizi\",\n                  \"url\" : \"https:\\/\\/github.com\\/mujibazizi\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-30T10:13:53+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a Google Meet session\",\n              \"filename\" : \"meet.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/logo.png\"\n              },\n              \"identifier\" : \"05b7c0a10c2a7fe1d487f1d608b3a9b3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Google\",\n              \"path\" : \"communication\\/google-meet\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Google Meet\",\n              \"updatedAt\" : \"2021-07-14T20:00:21+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Mail\",\n          \"path\" : \"mail\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ben Yoon\",\n                  \"url\" : \"https:\\/\\/github.com\\/benyn\"\n                }\n              ],\n              \"createdAt\" : \"2023-02-02T13:38:06-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the last received email in your inbox in Mail.app\",\n              \"filename\" : \"open-most-recent-email.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"✉️\"\n              },\n              \"identifier\" : \"3766484ecb1942dab17dd995c1e51f14\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mail\",\n              \"path\" : \"communication\\/mail\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Most Recent Email\",\n              \"updatedAt\" : \"2023-02-03T00:48:14Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"DuckDuckGo Email Protection\",\n          \"path\" : \"duckduckgo-email-protection\",\n          \"readme\" : \"communication\\/duckduckgo-email-protection\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-10T09:48:48+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Use this script command to configure your @duck.com authorizationID\",\n              \"filename\" : \"configure-@duck.com-script-command.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/duckduckgo_logo.png\"\n              },\n              \"identifier\" : \"f21768def3b65261d459100b8eac5e8c\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DuckDuckGo Email Protection\",\n              \"path\" : \"communication\\/duckduckgo-email-protection\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Configure\",\n              \"updatedAt\" : \"2022-02-10T09:48:48+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rediwed\",\n                  \"url\" : \"github.com\\/Rediwed\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-10T09:48:48+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"This script command generates a unique private @duck.com email address.\",\n              \"filename\" : \"generate-unique-email-address.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/duckduckgo_logo.png\"\n              },\n              \"identifier\" : \"6c12d494954c21d0580e847a688d9eb3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DuckDuckGo Email Protection\",\n              \"path\" : \"communication\\/duckduckgo-email-protection\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Generate Unique Address\",\n              \"updatedAt\" : \"2024-07-14T22:23:53+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Messenger\",\n          \"path\" : \"messenger\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-18T17:49:46+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"messenger-open-conversation.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/messenger.png\"\n              },\n              \"identifier\" : \"d323b0b1ce4d1b6c8f6397c079a23681\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Messenger\",\n              \"path\" : \"communication\\/messenger\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Conversation\",\n              \"updatedAt\" : \"2021-07-23T17:47:14-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Zoom\",\n          \"path\" : \"zoom\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-02T20:25:26+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Leaves Current Zoom meeting\",\n              \"filename\" : \"leave-meeting.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/zoom-logo.png\"\n              },\n              \"identifier\" : \"1bfa04dd638bb1a5f9d93f3a556e96a3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Zoom\",\n              \"path\" : \"communication\\/zoom\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Leave Meeting\",\n              \"updatedAt\" : \"2021-05-03T09:54:17Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Leo Voon\",\n                  \"url\" : \"https:\\/\\/github.com\\/leovoon\"\n                }\n              ],\n              \"createdAt\" : \"2023-03-31T09:30:18+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Rename your profile in Zoom Meeting App (Mac Only) and cliclick.\",\n              \"filename\" : \"rename-profile.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/zoom-logo.png\"\n              },\n              \"identifier\" : \"ff7531c3b095eb59465663d7b2e5626b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Zoom\",\n              \"path\" : \"communication\\/zoom\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Rename Profile\",\n              \"updatedAt\" : \"2023-03-31T03:48:28Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                },\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-31T10:32:28+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show\\/Hide your microphone in the current meeting\",\n              \"filename\" : \"toggle-video.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/zoom-logo.png\"\n              },\n              \"identifier\" : \"a36414a653b2c264285dc7fd4b62563b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Zoom\",\n              \"path\" : \"communication\\/zoom\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Video\",\n              \"updatedAt\" : \"2021-08-31T16:37:44+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                },\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-31T10:32:28+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Mute\\/Unmute your microphone in the current meeting\",\n              \"filename\" : \"toggle-mic.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/zoom-logo.png\"\n              },\n              \"identifier\" : \"5f4ac638a28f19b6fa2f377204f1d6dc\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Zoom\",\n              \"path\" : \"communication\\/zoom\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Microphone\",\n              \"updatedAt\" : \"2021-08-31T16:37:44+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Slack\",\n          \"path\" : \"slack\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-16T16:05:58+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"slack-open-workspace-by-index.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"4a802368b9f32f0e1f2f6a44338f7ce8\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Workspace by Index\",\n              \"updatedAt\" : \"2021-07-23T17:47:56-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"alongat\",\n                  \"url\" : \"https:\\/\\/github.com\\/alongat\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-05T21:47:13+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set your status in Slack to a song currently playing in Spotify.\",\n              \"filename\" : \"set-slack-status-spotify.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"01d42581576437961b8a3aa2af5e6b93\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : \"30s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Status in Slack to Spotify Song\",\n              \"updatedAt\" : \"2021-01-24T22:49:22+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sam Ching\",\n                  \"url\" : \"https:\\/\\/github.com\\/samching\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-26T13:39:55Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Clear DND Status in Slack\",\n              \"filename\" : \"clear-slack-DND-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"05872fc3bb67f93dd979fe0f25b06545\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clear Slack DND\",\n              \"updatedAt\" : \"2021-01-24T22:49:22+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Zeb Pykosz\",\n                  \"url\" : \"https:\\/\\/github.com\\/zebapy\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-26T13:39:55Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a Slack reminder\",\n              \"filename\" : \"add-slack-reminder.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏰\"\n              },\n              \"identifier\" : \"8f2bf69938e8df32b08bf016b259d993\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Reminder\",\n              \"updatedAt\" : \"2022-01-15T18:23:42Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-18T10:01:58+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"slack-open-workspace-by-name.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"d2fdd94734c119a616fe67b54ebcdd7c\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Workspace by Name\",\n              \"updatedAt\" : \"2021-07-23T17:48:20-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-26T13:39:55Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Clear your status in Slack.\",\n              \"filename\" : \"clear-slack-status.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🧼\"\n              },\n              \"identifier\" : \"17d4ffd95aaa50ac53208639c1807969\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clear Status\",\n              \"updatedAt\" : \"2020-11-26T13:44:17Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-18T07:53:58+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"slack-jump-to.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"27ca9558af53540a5077aa69fcbcd4db\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Jump to...\",\n              \"updatedAt\" : \"2021-07-23T17:47:47-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"alongat\",\n                  \"url\" : \"https:\\/\\/github.com\\/alongat\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-16T22:05:43+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set your status in Slack to WFH or WFO depending on your WiFi\",\n              \"filename\" : \"set-slack-wfh-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"2f4a857abf56b4212c65bae64c6ccd1a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set WFH Status in Slack\",\n              \"updatedAt\" : \"2021-01-24T22:49:22+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-03T16:28:28+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"This script posts a message text to a slack channel and sets active status (defaults to random good morning message in #general)\",\n              \"filename\" : \"slack-send-message.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"1461432132438418bd52997cf850803f\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Send Message in Channel\",\n              \"updatedAt\" : \"2021-05-03T14:30:44Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-26T13:39:55Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set your status in Slack.\",\n              \"filename\" : \"set-slack-status.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"☕️\"\n              },\n              \"identifier\" : \"57e23350fff64274696cfe28cce9d8ee\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Status to Coffee\",\n              \"updatedAt\" : \"2020-11-26T18:24:36Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sam Ching\",\n                  \"url\" : \"https:\\/\\/github.com\\/samching\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-29T18:11:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set your DND status in Slack\",\n              \"filename\" : \"set-slack-DND-status.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"2b163126ade42de031d2e7ebe0a63c00\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set DND Status\",\n              \"updatedAt\" : \"2021-03-04T08:32:41+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Cody Carrell\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/sourcecody\"\n                }\n              ],\n              \"createdAt\" : \"2024-03-10T17:10:31-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Slack with the Developer Menu enabled. ⌘⌥I to access the Developer Menu. If you find it's not working, quit Slack and run this command again.\",\n              \"filename\" : \"slack-dev-mode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/slack-logo.png\"\n              },\n              \"identifier\" : \"7c43ddc9b86f860583abf7ea64a4d324\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Slack\",\n              \"path\" : \"communication\\/slack\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Launch Dev Mode\",\n              \"updatedAt\" : \"2024-03-10T21:12:02Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Cloudup\",\n          \"path\" : \"cloudup\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T14:59:48-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Upload path or URL in clipboard to [Cloudup](https:\\/\\/cloudup.com\\/).\",\n              \"filename\" : \"cloudup-upload.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/cloudup-logo.png\"\n              },\n              \"identifier\" : \"1d19e17167ac0881721d259150cbd124\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cloudup\",\n              \"path\" : \"communication\\/cloudup\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Upload\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T14:59:48-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open file dialog and upload to [Cloudup](https:\\/\\/cloudup.com\\/).\",\n              \"filename\" : \"cloudup-pick.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/cloudup-logo.png\"\n              },\n              \"identifier\" : \"dde6ec22216c5e9e5befc0f6f7d03530\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cloudup\",\n              \"path\" : \"communication\\/cloudup\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pick\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T14:59:48-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Upload clipboard contents to [Cloudup](https:\\/\\/cloudup.com\\/).\",\n              \"filename\" : \"cloudup-paste.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/cloudup-logo.png\"\n              },\n              \"identifier\" : \"c95e8b9dcdd3aff96e0e7d2499528210\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cloudup\",\n              \"path\" : \"communication\\/cloudup\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Paste\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Emojis\",\n          \"path\" : \"emojis\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-16T16:27:42-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search for emojis related to input.\",\n              \"filename\" : \"emojis-search.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📙\"\n              },\n              \"identifier\" : \"ca84f5b82455c8b57880dbd2257b2137\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Communication\",\n              \"path\" : \"communication\\/emojis\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search Emojis\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-16T16:27:42-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copy first emoji related to input.\",\n              \"filename\" : \"emoji-copy.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📙\"\n              },\n              \"identifier\" : \"0b6610d2a4025e0cde003b6de4d28026\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Communication\",\n              \"path\" : \"communication\\/emojis\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search and Copy First Related Emoji\",\n              \"updatedAt\" : \"2020-11-28T12:02:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tomohiro Nishimura\",\n                  \"url\" : \"https:\\/\\/github.com\\/Sixeight\"\n                }\n              ],\n              \"createdAt\" : \"2025-01-23T18:29:53+09:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copy a random emoji to the clipboard.\",\n              \"filename\" : \"random-emoji.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎲\"\n              },\n              \"identifier\" : \"52479cec0740642d40a8902ee5efa1fe\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Emojis\",\n              \"path\" : \"communication\\/emojis\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Random Emoji\",\n              \"updatedAt\" : \"2025-03-25T19:27:06+09:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Gmail\",\n          \"path\" : \"gmail\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Aigner\",\n                  \"url\" : \"https:\\/\\/github.com\\/tonka3000\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-07T17:06:46+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open gmail.com in the default browser\",\n              \"filename\" : \"google-gmail.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/google-gmail-logo.png\"\n              },\n              \"identifier\" : \"662ff76918550ca9bf46ad724d87ac91\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Google\",\n              \"path\" : \"communication\\/gmail\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Gmail\",\n              \"updatedAt\" : \"2020-12-07T20:12:02Z\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Web Searches\",\n      \"path\" : \"web-searches\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jon Callahan\",\n              \"url\" : \"https:\\/\\/www.joncallahan.com\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-27T06:57:40-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"mozilla-developer-network.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/mozilla-developer-network.png\"\n          },\n          \"identifier\" : \"a62ffa9e47fad8ce4b16d33b46fa7ada\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search MDN (Mozilla Developer Network)\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-bilibili.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/bilibili.png\"\n          },\n          \"identifier\" : \"6a254f4ee998b0831f7cfd45da57c005\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Bilibili\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T02:48:26-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [cdnjs.com](https:\\/\\/cdnjs.com\\/) for library.\",\n          \"filename\" : \"search-cdnjs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/cloudflare-logo.png\"\n          },\n          \"identifier\" : \"bf8c3f617de74111aa361af48038d25f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search cdnjs\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Andrei Borisov\",\n              \"url\" : \"https:\\/\\/github.com\\/andreiborisov\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"kinopoisk.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/kinopoisk.png\"\n          },\n          \"identifier\" : \"3035530c75101abbeb24a0a27b0ed685\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Kinopoisk\",\n          \"updatedAt\" : \"2021-01-29T19:03:28+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Roland Leth\",\n              \"url\" : \"https:\\/\\/runtimesharks.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-14T10:07:47+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Translates via Google Translate\",\n          \"filename\" : \"google-translate.rb\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌍\"\n          },\n          \"identifier\" : \"63a5465b18915d379fa63a6a3339652a\",\n          \"isTemplate\" : false,\n          \"language\" : \"ruby\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Google Translate\",\n          \"updatedAt\" : \"2021-08-27T15:40:05+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T21:18:01Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"giphy.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/giphy.png\"\n          },\n          \"identifier\" : \"3613b602176200bab2cb81cf3e3a31fc\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Giphy search\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"yandex-search.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/yandex.png\"\n          },\n          \"identifier\" : \"14ac258936b541c8b080afd875c888e9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Yandex\",\n          \"updatedAt\" : \"2021-04-27T23:35:53+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-29T20:42:38-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search Netflix.\",\n          \"filename\" : \"search-netflix.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/netflix-logo.png\"\n          },\n          \"identifier\" : \"f23559720b44c78c6c763f9f999153e8\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Netflix\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Benedict Neo\",\n              \"url\" : \"https:\\/\\/github.com\\/benthecoder\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-04T20:17:28+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Searches coinmarketcap currencies.\",\n          \"filename\" : \"search-coinmarketcap.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🪙\"\n          },\n          \"identifier\" : \"451ddeb79ef02e03e6af7132ceba99c0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Search Coinmarketcap\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"CoinMarketCap Search\",\n          \"updatedAt\" : \"2021-05-04T15:47:27+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"sunbufu\",\n              \"url\" : \"https:\\/\\/sunbufu.github.io\\/\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-16T17:51:26+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"translate-with-baidu.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/baidu-translate.png\"\n          },\n          \"identifier\" : \"2747cbdea0aa1fd082620aca852a9c11\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Translate with Baidu\",\n          \"updatedAt\" : \"2021-02-16T17:51:26+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Andrei Borisov\",\n              \"url\" : \"https:\\/\\/github.com\\/andreiborisov\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-30T23:52:56+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search in App Store app\",\n          \"filename\" : \"app-store.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/app-store.png\"\n          },\n          \"identifier\" : \"94217255062eb0133a0d4cd0d2bfd91b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in App Store\",\n          \"updatedAt\" : \"2021-01-30T23:52:56+03:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T21:18:01Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"njt.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🐸\"\n          },\n          \"identifier\" : \"bf292fd5c6a6daeb7cb500aed47c97ce\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"njt\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T21:13:15Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"npmjs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/npmjs.png\"\n          },\n          \"identifier\" : \"1c60d434bfa470adfa9e5c4fad31a29a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search npm Packages\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Phil Salant\",\n              \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-15T19:33:39-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search pkg.go.dev for package documentation\",\n          \"filename\" : \"pkg-go-dev.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/go.png\"\n          },\n          \"identifier\" : \"3e353cacc9a32594ee0e35b6d429860c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Go Package Documentation\",\n          \"updatedAt\" : \"2021-01-18T16:44:26Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-19T21:13:15Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"repo.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📦\"\n          },\n          \"identifier\" : \"fd304aeeb3b07086af4d259dc6bd8a44\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open npm Package Repo\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-baidu.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/baidu.png\"\n          },\n          \"identifier\" : \"6e554e964804583913116bab85b8f8ce\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Baidu\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Chris Koerner Zeller\",\n              \"url\" : \"https:\\/\\/github.com\\/ChessMess\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-04T09:55:55-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-dndbeyond.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/ddbicon.png\"\n          },\n          \"identifier\" : \"1a0ffb01f735b1adb548ece3b463d337\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in DnDBeyond.com\",\n          \"updatedAt\" : \"2021-03-04T12:35:48-05:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"twitter-search.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/twitter.png\"\n          },\n          \"identifier\" : \"5325fd3de931054a254082b1ce061ec9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Twitter\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-zhihu.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/zhihu.png\"\n          },\n          \"identifier\" : \"24dc5c3101863a686c8199013859f430\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Zhihu\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T12:49:12-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [Unsplash](https:\\/\\/unsplash.com).\",\n          \"filename\" : \"search-unsplash.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : \"images\\/unsplash-logo-iconDark.png\",\n            \"light\" : \"images\\/unsplash-logo.png\"\n          },\n          \"identifier\" : \"5d394ef839f8f7cde7314acce890d250\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Unsplash\",\n          \"updatedAt\" : \"2020-12-02T14:53:50-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alessandra Pereyra\",\n              \"url\" : \"https:\\/\\/github.com\\/alessandrapereyra\"\n            }\n          ],\n          \"createdAt\" : \"2022-09-09T11:36:33-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open 17TRACK with the tracking code found in the clipboard\",\n          \"filename\" : \"clipboard-to-17track.js\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🚚\"\n          },\n          \"identifier\" : \"5bf7134b1d8dfeca8b30b6b3a598f247\",\n          \"isTemplate\" : false,\n          \"language\" : \"node\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Clipboard to 17TRACK\",\n          \"updatedAt\" : \"2022-09-09T11:36:33-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Wade Garrett\",\n              \"url\" : \"https:\\/\\/wadegarrett.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-26T23:53:16-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [pub.dev](https:\\/\\/pub.dev\\/) for packages to build Dart and Flutter apps.\",\n          \"filename\" : \"pub-search.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/dart-logo.png\"\n          },\n          \"identifier\" : \"1e4035244521e2dcd75dfd628233b19a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Pub.dev Search\",\n          \"updatedAt\" : \"2021-05-31T09:21:31Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"sunbufu\",\n              \"url\" : \"https:\\/\\/sunbufu.github.io\\/\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-16T17:51:26+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"translate-with-google.template.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/google-translate.png\"\n          },\n          \"identifier\" : \"66a9a660752d72d78d5d210da52f9364\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Translate with Google\",\n          \"updatedAt\" : \"2021-02-16T17:51:26+08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"amazon.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/amazon.png\"\n          },\n          \"identifier\" : \"7ca50f13f43b953f6d587c52f61005a9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Amazon\",\n          \"updatedAt\" : \"2021-04-02T14:02:23-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T12:49:12-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [WP Engine](https:\\/\\/wpengine.com) installs.\",\n          \"filename\" : \"search-wpengine-installs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/wpengine-logo.png\"\n          },\n          \"identifier\" : \"77cda0a2c18fa52437888cd6cca81d42\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search WP Engine Installs\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jakub Lanski\",\n              \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-17T01:54:39+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"check-weather.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🌦\"\n          },\n          \"identifier\" : \"89e16f559eec7369f442eb1208c72107\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"wttr.in\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Check Weather\",\n          \"updatedAt\" : \"2021-05-18T07:57:13+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T21:18:01Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"unfurl.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔗\"\n          },\n          \"identifier\" : \"19f9cd5c3c78c5008f84417d01f14dee\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Unfurl URL\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-wikipedia.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/wikipedia.png\"\n          },\n          \"identifier\" : \"9eeb58b0819b5d0cfa9a84b739077880\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Wikipedia\",\n          \"updatedAt\" : \"2021-02-16T16:00:45Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Razvan Azamfirei\",\n              \"url\" : \"https:\\/\\/github.com\\/razvanazamfirei\"\n            }\n          ],\n          \"createdAt\" : \"2022-12-16T16:54:47-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Parses and opens DOI links in your browser\",\n          \"filename\" : \"doi.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📖\"\n          },\n          \"identifier\" : \"f0a1d84b48cb82b7b89f17f05565d7f5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"DOI\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Find Paper\",\n          \"updatedAt\" : \"2022-12-16T16:54:47-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Benedict Neo\",\n              \"url\" : \"https:\\/\\/github.com\\/benthecoder\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-07T03:17:13+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search for emojis at emojipedia.\",\n          \"filename\" : \"search-emojipedia.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🔎\"\n          },\n          \"identifier\" : \"dff7a5b11421eb5fbca70e5e567526e2\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Emojipedia\",\n          \"updatedAt\" : \"2021-05-07T07:58:55+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Daniel Sieradski\",\n              \"url\" : \"https:\\/\\/github.com\\/selfagency\"\n            }\n          ],\n          \"createdAt\" : \"2023-04-20T10:30:42-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"opensecrets.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/opensecrets.png\"\n          },\n          \"identifier\" : \"38597aea679968985276b287c7860174\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search OpenSecrets.org\",\n          \"updatedAt\" : \"2023-04-24T06:57:26Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-04T22:42:03-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open specified [WP Engine](https:\\/\\/wpengine.com) install.\",\n          \"filename\" : \"wpengine-install.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/wpengine-logo.png\"\n          },\n          \"identifier\" : \"5949a935338b8a2cd8808c92a5a78aa5\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Open WP Engine Install\",\n          \"updatedAt\" : \"2020-12-07T10:40:46-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T21:18:01Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"caniuse.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"❓\"\n          },\n          \"identifier\" : \"d57b60f7bec95ebaf6ecd985d539eb33\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Caniuse.com search\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tanguy Le Stradic\",\n              \"url\" : \"https:\\/\\/github.com\\/tanguyls\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-07T20:16:05+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search files in Figma\",\n          \"filename\" : \"figma.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/figma.png\"\n          },\n          \"identifier\" : \"689f477e616d7c7a0439c66b2a26c2cc\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Figma\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Matthew Gleich\",\n              \"url\" : \"https:\\/\\/mattglei.ch\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-13T17:27:25-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search for a rust crate on crates.io\",\n          \"filename\" : \"rust-crate.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/cargo-logo.png\"\n          },\n          \"identifier\" : \"9bc23b6009c4631c2153c0f4b8712369\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Search\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search for Crate\",\n          \"updatedAt\" : \"2021-03-17T00:15:37-04:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-19T21:13:15Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"npms.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/npms.png\"\n          },\n          \"identifier\" : \"c50c4272f0b39efd127d169968b96a9c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"npms\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Sasivarnan R\",\n              \"url\" : \"https:\\/\\/github.com\\/sasivarnan\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-22T18:23:32+05:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"ecosia.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/ecosia.png\"\n          },\n          \"identifier\" : \"758a76a0377d915c7cb7817c11d78a8c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Ecosia\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"sunbufu\",\n              \"url\" : \"https:\\/\\/sunbufu.github.io\\/\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-13T21:40:07+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-jingdong.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/jingdong.png\"\n          },\n          \"identifier\" : \"147fa1b2258dddb1bdfe2b851fb7136d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Jingdong\",\n          \"updatedAt\" : \"2021-02-16T17:51:26+08:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"grep-app-search.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"https:\\/\\/grep.app\\/favicon.ico\"\n          },\n          \"identifier\" : \"3c1b4b1b7f98114881247bd9e9c44166\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in grep.app\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Phil Salant\",\n              \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n            }\n          ],\n          \"createdAt\" : \"2021-03-03T16:44:26-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search PostgreSQL documentation\",\n          \"filename\" : \"postgresql.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/psql.png\"\n          },\n          \"identifier\" : \"613c71297c151b108ad75ab5a7c1ecd6\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"PostgreSQL Documentation\",\n          \"updatedAt\" : \"2021-03-04T12:40:16-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Razvan Azamfirei\",\n              \"url\" : \"https:\\/\\/github.com\\/razvanazamfirei\"\n            }\n          ],\n          \"createdAt\" : \"2022-12-16T16:54:47-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Scans clipboard and opens DOI links in your browser\",\n          \"filename\" : \"doi-clipboard.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📖\"\n          },\n          \"identifier\" : \"5a5b14ccec3b42e5980dbd993beee9db\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"DOI\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Find Paper\",\n          \"updatedAt\" : \"2022-12-16T16:54:47-05:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Achille Lacoin\",\n              \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-23T18:01:06+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Open the first DuckDuckGo search result page for your query (also supports bang!)\",\n          \"filename\" : \"im-feeling-ducky.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/duck-duck-go.png\"\n          },\n          \"identifier\" : \"3ee1a0eaf376792ede9a3bfdb91e3b74\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"I'm Feeling Ducky\",\n          \"updatedAt\" : \"2021-05-23T18:01:06+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Marco Varisco\",\n              \"url\" : \"https:\\/\\/github.com\\/mava\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-17T17:04:15-04:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"arxiv.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/arxiv.png\"\n          },\n          \"identifier\" : \"60c8adb8288a5cf3ceb6936b1184f15a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in arXiv\",\n          \"updatedAt\" : \"2021-04-22T23:08:33-04:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2021-02-26T19:18:23Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-swift-github.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \".\\/images\\/swift.png\"\n          },\n          \"identifier\" : \"ded067c8f231e019897a58bd2b5bb30c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Swift Code\",\n          \"updatedAt\" : \"2021-02-26T19:18:23Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T12:49:12-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [GitHub](https:\\/\\/github.com).\",\n          \"filename\" : \"search-github.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : \"images\\/github-logo-iconDark.png\",\n            \"light\" : \"images\\/github-logo.png\"\n          },\n          \"identifier\" : \"5eb2c938ea4fc44d2615230d2249305f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search GitHub\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"duck-duck-go.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/duck-duck-go.png\"\n          },\n          \"identifier\" : \"137568a154ee81cb2a1ca68aa4bbfd0d\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in DuckDuckGo\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Francois\",\n              \"url\" : \"https:\\/\\/github.com\\/AsterYujano\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T11:33:45+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-devhints.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/devhints.png\"\n          },\n          \"identifier\" : \"f6f2addf68e5f329bd2e1351cc9a264c\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in devhints.io\",\n          \"updatedAt\" : \"2021-02-24T15:01:38+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Lucas Costa\",\n              \"url\" : \"https:\\/\\/github.com\\/lucasrcosta\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-19T16:13:59-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search IMDB.\",\n          \"filename\" : \"search-imdb.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/imdb.png\"\n          },\n          \"identifier\" : \"9319290c0a1ce9fdd2bfb087fc36e79f\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search IMDB\",\n          \"updatedAt\" : \"2021-02-21T22:06:55Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"youtube.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/youtube.png\"\n          },\n          \"identifier\" : \"aed6056723b8ff63788a8cec2fdfa88a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in YouTube\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-19T21:13:15Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"bundlephobia.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"📦\"\n          },\n          \"identifier\" : \"be1cdb15aaca06deb525512db504e89a\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Bundlephobia cost\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"The Swift Package Index\",\n              \"url\" : \"https:\\/\\/swiftpackageindex.com\"\n            }\n          ],\n          \"createdAt\" : \"2021-05-20T16:49:36+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search for Swift packages in the Swift Package Index.\",\n          \"filename\" : \"swift-package-index.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/spi.png\"\n          },\n          \"identifier\" : \"143dfe6f71f6a1dfcaf7aed15c9397c3\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Swift Package Index\",\n          \"updatedAt\" : \"2021-05-20T16:49:36+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"crunchbase.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/crunchbase.png\"\n          },\n          \"identifier\" : \"31c55bcec6408a3702a8f834a2b6457e\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Crunchbase\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2020-11-19T15:07:52Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"google-search.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/google.png\"\n          },\n          \"identifier\" : \"892301cd7b236406f6efc128ae07c4e3\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Google\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Zander Martineau\",\n              \"url\" : \"https:\\/\\/zander.wtf\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-24T21:18:01Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"wayback-machine.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/ia-logo.jpg\"\n          },\n          \"identifier\" : \"3438cbb2bcc47a029bd463eb8229b673\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Wayback Machine Search\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Shannon Matthews\",\n              \"url\" : \"https:\\/\\/github.com\\/s-oram\"\n            }\n          ],\n          \"createdAt\" : \"2020-11-22T18:23:32+05:30\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search Hacker News\",\n          \"filename\" : \"search-hacker-news.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/hacker-news.png\"\n          },\n          \"identifier\" : \"6c9056611a35538a19c2beaec400e9f7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Hacker News\",\n          \"updatedAt\" : \"2021-05-23T10:40:15+10:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Tanguy Le Stradic\",\n              \"url\" : \"https:\\/\\/github.com\\/tanguyls\"\n            }\n          ],\n          \"createdAt\" : \"2021-04-09T11:42:18+02:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Find emails using hunter.io\",\n          \"filename\" : \"hunter.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/hunter.png\"\n          },\n          \"identifier\" : \"8e6cff3c40f958a3693db43e85566ffa\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Find Email Address With Hunter\",\n          \"updatedAt\" : \"2021-04-09T11:25:34Z\"\n        },\n        {\n          \"authors\" : null,\n          \"createdAt\" : \"2021-02-19T09:10:21Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"google-maps.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/google-map.png\"\n          },\n          \"identifier\" : \"8a71bb6b31307d65cf23a94c619c9971\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Google Maps\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Google Maps\",\n          \"updatedAt\" : \"2024-12-05T12:33:50+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Alexandru Turcanu\",\n              \"url\" : \"https:\\/\\/github.com\\/Pondorasti\"\n            }\n          ],\n          \"createdAt\" : \"2021-07-13T21:10:54-07:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https:\\/\\/scriptcommands.alexandru.so).\",\n          \"filename\" : \"search-script-command-marketplace.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/marketplace-logo.png\"\n          },\n          \"identifier\" : \"701670f20721b663d34caa4ebd42fddf\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"compact\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Script Command\",\n          \"updatedAt\" : \"2024-12-04T11:52:04+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Caleb Stauffer\",\n              \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-07T17:32:35-05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search [PHP official documentation](https:\\/\\/www.php.net\\/docs.php).\",\n          \"filename\" : \"search-php-docs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : \"images\\/php-logo-iconDark.png\",\n            \"light\" : \"images\\/php-logo.png\"\n          },\n          \"identifier\" : \"ca1b15b0f16563f3865627097186d05b\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search PHP Docs\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"quelhasu\",\n              \"url\" : \"https:\\/\\/github.com\\/quelhasu\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-05T16:26:45+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Find the current Spotify track's gender in Chosic\",\n          \"filename\" : \"search-gender-in-chosic.applescript\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/chosic.png\"\n          },\n          \"identifier\" : \"5cd6572c960465d18d40d39e4b5063d6\",\n          \"isTemplate\" : false,\n          \"language\" : \"applescript\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Genre in Chosic\",\n          \"updatedAt\" : \"2021-02-12T11:28:52Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jesse Traynham\",\n              \"url\" : \"https:\\/\\/github.com\\/traynham\"\n            }\n          ],\n          \"createdAt\" : \"2020-12-07T19:59:12Z\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search in MDN (Mozilla) Docs by topic\",\n          \"filename\" : \"mdn.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : \"images\\/mdn_dark.png\",\n            \"light\" : \"images\\/mdn_light.png\"\n          },\n          \"identifier\" : \"991511e9548f80fc5f5dfa70172df0c9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in MDN (Mozilla) Docs by Topic\",\n          \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Nitin Gupta\",\n              \"url\" : \"https:\\/\\/twitter.com\\/gniting\"\n            }\n          ],\n          \"createdAt\" : \"2021-01-22T22:46:49+01:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search LinkedIn\",\n          \"filename\" : \"search-linkedin.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/linkedin.png\"\n          },\n          \"identifier\" : \"2b9bc8a44f2880a46505af014d37d620\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search LinkedIn\",\n          \"updatedAt\" : \"2021-01-24T20:18:06Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"lemorage\",\n              \"url\" : \"https:\\/\\/raycast.com\\/lemorage\"\n            }\n          ],\n          \"createdAt\" : \"2024-09-19T08:42:28+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search Rust documentation\",\n          \"filename\" : \"search-rust-docs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/rust.png\"\n          },\n          \"identifier\" : \"2f4472d80148aaadabf915529d6f68c9\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Rust Documentation\",\n          \"updatedAt\" : \"2024-09-19T08:42:28+08:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Jax0rz\",\n              \"url\" : null\n            }\n          ],\n          \"createdAt\" : \"2020-12-27T19:22:09+08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : null,\n          \"filename\" : \"search-in-taobao.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/taobao.png\"\n          },\n          \"identifier\" : \"04277ba6da1c3e592466a9823125dd6e\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search in Taobao\",\n          \"updatedAt\" : \"2021-01-05T12:30:16Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Lucas Costa\",\n              \"url\" : \"https:\\/\\/github.com\\/lucasrcosta\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-20T16:54:22-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search Python Package Index (PyPI)\",\n          \"filename\" : \"search-pypi.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/pip.png\"\n          },\n          \"identifier\" : \"c49e96e50bc2c30920f468d9057ec3a7\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Python Package Index (PyPI)\",\n          \"updatedAt\" : \"2021-05-10T09:23:50+02:00\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Lucas Costa\",\n              \"url\" : \"https:\\/\\/github.com\\/lucasrcosta\"\n            }\n          ],\n          \"createdAt\" : \"2021-02-20T16:54:22-08:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Search Python 3 Documentation\",\n          \"filename\" : \"search-python3-docs.sh\",\n          \"hasArguments\" : true,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"images\\/python.png\"\n          },\n          \"identifier\" : \"3e2a25007598f01b5e8e5b437759c3f0\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"silent\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Web Searches\",\n          \"path\" : \"web-searches\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Search Python 3 Documentation\",\n          \"updatedAt\" : \"2021-05-10T09:23:50+02:00\"\n        }\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"WordPress\",\n          \"path\" : \"wordpress\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-24T12:49:12-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search [WordPress Developer documentation](https:\\/\\/developer.wordpress.org\\/reference\\/).\",\n              \"filename\" : \"search-wordpress-docs.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/wordpress-logo-iconDark.png\",\n                \"light\" : \"images\\/wordpress-logo.png\"\n              },\n              \"identifier\" : \"a98925d26c19810371ec37ed064dd70a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WordPress\",\n              \"path\" : \"web-searches\\/wordpress\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search WordPress Docs\",\n              \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T16:27:32-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open [WordPress CLI command reference](https:\\/\\/developer.wordpress.org\\/cli\\/commands\\/) for specified command.\",\n              \"filename\" : \"wordpress-cli-command.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/wordpress-logo-iconDark.png\",\n                \"light\" : \"images\\/wordpress-logo.png\"\n              },\n              \"identifier\" : \"ab5499094ef6353357d01f817812ba76\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WordPress\",\n              \"path\" : \"web-searches\\/wordpress\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"WordPress CLI Command\",\n              \"updatedAt\" : \"2020-12-04T22:07:52-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-29T21:19:56-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open [WordPress functions reference](https:\\/\\/developer.wordpress.org\\/reference\\/functions\\/) for specified function.\",\n              \"filename\" : \"wordpress-functions-reference.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/wordpress-logo-iconDark.png\",\n                \"light\" : \"images\\/wordpress-logo.png\"\n              },\n              \"identifier\" : \"b149ed5a6cce9f124a9219f368de7ecc\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WordPress\",\n              \"path\" : \"web-searches\\/wordpress\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"WordPress Functions Reference\",\n              \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-29T21:19:56-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open [WordPress classes reference](https:\\/\\/developer.wordpress.org\\/reference\\/classes\\/) for specified class.\",\n              \"filename\" : \"wordpress-classes-reference.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/wordpress-logo-iconDark.png\",\n                \"light\" : \"images\\/wordpress-logo.png\"\n              },\n              \"identifier\" : \"358cd33183b77c7770949c0b0ab732d3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WordPress\",\n              \"path\" : \"web-searches\\/wordpress\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"WordPress Classes Reference\",\n              \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T14:19:51-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open [WordPress hooks reference](https:\\/\\/developer.wordpress.org\\/reference\\/hooks\\/) for specified hook.\",\n              \"filename\" : \"wordpress-hooks-reference.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/wordpress-logo-iconDark.png\",\n                \"light\" : \"images\\/wordpress-logo.png\"\n              },\n              \"identifier\" : \"9f17bba3f9bf3cd0276fcb70cef3023f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WordPress\",\n              \"path\" : \"web-searches\\/wordpress\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"WordPress Hooks Reference\",\n              \"updatedAt\" : \"2021-02-22T23:18:02+01:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Apps\",\n      \"path\" : \"apps\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"MeetingBar\",\n          \"path\" : \"meetingbar\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-23T05:05:54+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Join the ongoing or upcoming meeting.\",\n              \"filename\" : \"meetingbar-join-meeting.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/meetingbar.png\"\n              },\n              \"identifier\" : \"b8993c798f512a75626c91ead46662be\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"MeetingBar\",\n              \"path\" : \"apps\\/meetingbar\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Join Meeting\",\n              \"updatedAt\" : \"2021-08-23T12:18:02+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-23T05:05:54+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new meeting.\",\n              \"filename\" : \"meetingbar-create-meeting.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/meetingbar.png\"\n              },\n              \"identifier\" : \"79b4a204b8d40f498a14d7d0623bac23\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"MeetingBar\",\n              \"path\" : \"apps\\/meetingbar\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Meeting\",\n              \"updatedAt\" : \"2021-08-23T12:18:02+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Lungo\",\n          \"path\" : \"lungo\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Lungo\",\n                  \"url\" : \"https:\\/\\/sindresorhus.com\\/lungo\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-29T16:08:45+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle Lungo.\",\n              \"filename\" : \"lungo-toggle.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/lungo.png\"\n              },\n              \"identifier\" : \"1e1201142099074bd201c2e04bfed472\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Lungo\",\n              \"path\" : \"apps\\/lungo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle\",\n              \"updatedAt\" : \"2021-10-29T16:08:45+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Lungo\",\n                  \"url\" : \"https:\\/\\/sindresorhus.com\\/lungo\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-29T16:08:45+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Deactivate Lungo.\",\n              \"filename\" : \"lungo-activate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/lungo.png\"\n              },\n              \"identifier\" : \"e41a768d833a7cca41cb21491926b013\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Lungo\",\n              \"path\" : \"apps\\/lungo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Activate\",\n              \"updatedAt\" : \"2021-10-29T16:08:45+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Lungo\",\n                  \"url\" : \"https:\\/\\/sindresorhus.com\\/lungo\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-29T16:08:45+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Deactivate Lungo.\",\n              \"filename\" : \"lungo-deactivate.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/lungo.png\"\n              },\n              \"identifier\" : \"7ad4b7c36c41fb0730596bdd72a12515\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Lungo\",\n              \"path\" : \"apps\\/lungo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Deactivate\",\n              \"updatedAt\" : \"2021-10-29T16:08:45+07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"iTerm\",\n          \"path\" : \"iterm\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Andrei Borisov\",\n                  \"url\" : \"https:\\/\\/github.com\\/andreiborisov\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-02T11:58:56+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"iterm-run-shell-command.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/iterm.png\"\n              },\n              \"identifier\" : \"aad45bb498bc30bd7cf7c2e9405c1477\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"iTerm\",\n              \"path\" : \"apps\\/iterm\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Run Shell Command\",\n              \"updatedAt\" : \"2021-02-02T11:58:56+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"sunrisewestern\",\n                  \"url\" : \"https:\\/\\/github.com\\/sunrisewestern\"\n                }\n              ],\n              \"createdAt\" : \"2024-05-23T03:31:30-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"iterm-open-profile-in-new-window.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🤖\"\n              },\n              \"identifier\" : \"c3e9bc8ec6236fd9d214785417f4c420\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"iTerm\",\n              \"path\" : \"apps\\/iterm\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open profile\",\n              \"updatedAt\" : \"2024-05-23T07:33:06Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Cleanshot\",\n          \"path\" : \"cleanshot\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens a new Quick Access Overlay with the specified image or video.\",\n              \"filename\" : \"cleanshot-add-quick-access-overlay.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/add-quick-access-overlay.png\"\n              },\n              \"identifier\" : \"7239456521bcd7c3373cf8870936d3a7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Quick Access Overlay\",\n              \"updatedAt\" : \"2021-07-20T15:49:26+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens Text Recognition (OCR) tool or extracts text from the specified file.\",\n              \"filename\" : \"cleanshot-capture-text.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/capture-text.png\"\n              },\n              \"identifier\" : \"7fe6d44fdbe6d9bb201ff65b756d860f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Capture Text\",\n              \"updatedAt\" : \"2021-07-20T15:49:26+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take a screenshot of a window.\",\n              \"filename\" : \"cleanshot-capture-window.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/capture-window.png\"\n              },\n              \"identifier\" : \"3d218b4cbed21f7454562678b6a0b8ee\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Capture Window\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take a screenshot of the previously specified area of your screen.\",\n              \"filename\" : \"cleanshot-capture-previous-area.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/capture-previous-area.png\"\n              },\n              \"identifier\" : \"43f62174fe500ba2f6cb4661195f3ebb\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Capture Previous Area\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Restore the recently closed file.\",\n              \"filename\" : \"cleanshot-restore.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/restore.png\"\n              },\n              \"identifier\" : \"775af547f54533d780759eea34761aeb\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Restore Recently Closed File\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pin a screenshot to the screen.\",\n              \"filename\" : \"cleanshot-pin.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/pin.png\"\n              },\n              \"identifier\" : \"938d3ce2be34e29a9f58d9099996e9ef\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pin to the Screen\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens specified file in Annotate.\",\n              \"filename\" : \"cleanshot-annotate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/annotate.png\"\n              },\n              \"identifier\" : \"ca28647e99a4bbdea940fed93e688236\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Annotate\",\n              \"updatedAt\" : \"2021-07-20T15:49:26+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take a screenshot of a specific area on your screen.\",\n              \"filename\" : \"cleanshot-capture-area.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/capture-area.png\"\n              },\n              \"identifier\" : \"f0cd821e3dea3225012f1ee24e0ee2a6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Capture Area\",\n              \"updatedAt\" : \"2021-05-28T10:40:29+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open screenshot that is currently in the clipboard.\",\n              \"filename\" : \"cleanshot-open-from-clipboard.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/clipboard.png\"\n              },\n              \"identifier\" : \"6c834b826f74f76d659ee54377d73e9e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open from Clipboard\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take a screenshot of your screen.\",\n              \"filename\" : \"cleanshot-capture-fullscreen.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/capture-fullscreen.png\"\n              },\n              \"identifier\" : \"b4bdb548dc357d8483d2c7afda0fa2ad\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Capture Fullscreen\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Danylo Zalizchuk\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/danulqua\"\n                }\n              ],\n              \"createdAt\" : \"2023-08-16T16:56:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a screen recording with keystrokes using the Keystroke Pro app and save it as a video or an optimized GIF file.\",\n              \"filename\" : \"cleanshot-record-screen-with-keystroke-pro.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/record-screen-keystroke-pro.png\"\n              },\n              \"identifier\" : \"2b2c4df77dc49c058edc490dd1e4d066\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Record Screen With Keystroke Pro\",\n              \"updatedAt\" : \"2023-08-16T16:56:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take a screenshot after a specified delay to capture the perfect moment.\",\n              \"filename\" : \"cleanshot-self-timer.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/self-timer.png\"\n              },\n              \"identifier\" : \"7ff128b4069f95b91a61d2a920748340\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Self-Timer\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Capture any scrollable content.\",\n              \"filename\" : \"cleanshot-scrolling-capture.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/scrolling-capture.png\"\n              },\n              \"identifier\" : \"66f040a60fe27b26e31f2dfea19a9200\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Scrolling Capture\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a screen recording and save it as a video or an optimized GIF file.\",\n              \"filename\" : \"cleanshot-record-screen.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/record-screen.png\"\n              },\n              \"identifier\" : \"745e006488dbf13262100b0d9992bd06\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Record Screen\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"CleanShot X\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/CleanShot_app\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-01T16:53:29Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Hide clutter on your Desktop.\",\n              \"filename\" : \"cleanshot-toggle-desktop-icons.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/toggle-desktop-icons.png\"\n              },\n              \"identifier\" : \"12f891f99170ce75263600efdf9819e7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"CleanShot X\",\n              \"path\" : \"apps\\/cleanshot\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Desktop Icons\",\n              \"updatedAt\" : \"2021-05-28T10:40:29+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Craft\",\n          \"path\" : \"craft\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-23T13:32:38-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Searches in Workspace in Craft\",\n              \"filename\" : \"craft-search-workspace.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/craft.png\"\n              },\n              \"identifier\" : \"e2b36133ba62c2b1adf96510991fa097\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Craft\",\n              \"path\" : \"apps\\/craft\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search in Workspace\",\n              \"updatedAt\" : \"2021-03-23T13:32:38-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-23T13:32:38-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Creates a doc in Craft\",\n              \"filename\" : \"craft-create-doc.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/craft.png\"\n              },\n              \"identifier\" : \"ceaaea45ae0681858ca57b43e3c711c1\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Craft\",\n              \"path\" : \"apps\\/craft\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Doc\",\n              \"updatedAt\" : \"2021-03-23T13:32:38-07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Wikipedia\",\n          \"path\" : \"wikipedia\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Juan I. Serra\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/jiserra\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-20T16:18:28-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search Wikipedia and display the result in Raycast\",\n              \"filename\" : \"wikipedia-search.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/wikipedia.png\"\n              },\n              \"identifier\" : \"598f86d0a3b9f15d762df1930ee39665\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Wikipedia\",\n              \"path\" : \"apps\\/wikipedia\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Wikipedia Search\",\n              \"updatedAt\" : \"2021-07-23T17:46:53-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"GoodLinks\",\n          \"path\" : \"goodlinks\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Read list in the GoodLinks app\",\n              \"filename\" : \"goodlinks-read-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"c0796027794a07c76f5eb52bab4e8d39\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Read List\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open a link in the GoodLinks app\",\n              \"filename\" : \"goodlinks-open-link.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"3636d0d2ff5bb61acff5b577e364122a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Link\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Untagged list in the GoodLinks app\",\n              \"filename\" : \"goodlinks-untagged-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"c80ffd45f9345adbcc18b9140d865da0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Untagged List\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Unread list in the GoodLinks app\",\n              \"filename\" : \"goodlinks-unread-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"bfd473a3c237f50761e5716e9abee708\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Unread List\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the last unread link in the GoodLinks app\",\n              \"filename\" : \"goodlinks-last-unread-link.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"574ebc7209ea95507f347597e25cc284\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Last Unread Link\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show Starred list in the GoodLinks app\",\n              \"filename\" : \"goodlinks-starred-list.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"1b30afbd9d13fa4c0361905818295682\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Starred List\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Saves a new link to GoodLinks\",\n              \"filename\" : \"goodlinks-save-link.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"3a5576e914a31aadb395f733a49f047d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Save Link\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open a random unread link in the GoodLinks app\",\n              \"filename\" : \"goodlinks-random-unread-link.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"b3f2decfb875757a8a2bcebf5904a88f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Random Unread Link\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Filip Chabik\",\n                  \"url\" : \"https:\\/\\/github.com\\/hadret\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-21T21:19:09+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show links tagged with the specified tag in the GoodLinks app\",\n              \"filename\" : \"goodlinks-tagged-links.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/goodlinks.png\"\n              },\n              \"identifier\" : \"10a6aa033cfb6122dfbbe70eaa5ea8e8\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"GoodLinks\",\n              \"path\" : \"apps\\/goodlinks\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Tag\",\n              \"updatedAt\" : \"2022-09-21T21:19:09+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Terminal Translate\",\n          \"path\" : \"terminal-translate\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fatpandac\",\n                  \"url\" : \"https:\\/\\/github.com\\/Fatpandac\"\n                }\n              ],\n              \"createdAt\" : \"2022-04-04T02:34:41+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate word or sentence.\",\n              \"filename\" : \"translate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📖\"\n              },\n              \"identifier\" : \"8cd0465bb037880e1fcc57beb8ffea49\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Terminal Translate\",\n              \"path\" : \"apps\\/terminal-translate\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Translate\",\n              \"updatedAt\" : \"2022-04-04T02:34:41+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"BusyCal\",\n          \"path\" : \"busycal\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Annie Ma\",\n                  \"url\" : \"www.anniema.co\"\n                }\n              ],\n              \"createdAt\" : \"2024-02-06T01:35:01-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Creates new events or tasks in BusyCal.\",\n              \"filename\" : \"new-busycal-event-or-task.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/busycal.png\"\n              },\n              \"identifier\" : \"e4f836d21d4fcb8bcf522b1393aad74a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"BusyCal\",\n              \"path\" : \"apps\\/busycal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Event\\/Task\",\n              \"updatedAt\" : \"2024-02-06T08:36:45Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Stickies\",\n          \"path\" : \"stickies\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Annie Ma\",\n                  \"url\" : \"http:\\/\\/www.anniema.co\\/\"\n                }\n              ],\n              \"createdAt\" : \"2024-01-26T02:19:25-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"This script creates a new floating note in the Apple Stickies application\",\n              \"filename\" : \"new-floating-sticky.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/stickies.png\"\n              },\n              \"identifier\" : \"dae7953c0397480c8d99a3b0f56176b7\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Stickies\",\n              \"path\" : \"apps\\/stickies\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"New Floating Sticky Note\",\n              \"updatedAt\" : \"2024-01-26T09:21:48Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Bartender\",\n          \"path\" : \"bartender\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2023-06-02T15:26:22+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Perform a quick search of Menu Bar Items, in Bartender 4\",\n              \"filename\" : \"bartender-search.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bartender-icon.png\"\n              },\n              \"identifier\" : \"be9bfa8f7ef781753490380437a674aa\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bartender.app\",\n              \"path\" : \"apps\\/bartender\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search Bartender\",\n              \"updatedAt\" : \"2023-06-02T15:26:22+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Playground\",\n          \"path\" : \"playground\",\n          \"readme\" : \"apps\\/playground\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Quentin Eude\",\n                  \"url\" : \"https:\\/\\/github.com\\/qeude\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:32:07+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create and open a new view based Swift Playground\",\n              \"filename\" : \"open-new-view-playground.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🕊\"\n              },\n              \"identifier\" : \"830a18fee37d756c1a00a65e286113a3\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Swift Playgrounds\",\n              \"path\" : \"apps\\/playground\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create View Based\",\n              \"updatedAt\" : \"2021-06-14T20:32:07+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Quentin Eude\",\n                  \"url\" : \"https:\\/\\/github.com\\/qeude\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:32:07+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create and open a new basic Swift Playground\",\n              \"filename\" : \"open-new-playground.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🕊\"\n              },\n              \"identifier\" : \"23040420c0f901b4bd478a02943591c5\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Swift Playgrounds\",\n              \"path\" : \"apps\\/playground\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Basic\",\n              \"updatedAt\" : \"2021-06-14T20:32:07+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Eudic\",\n          \"path\" : \"eudic\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"jingyi\",\n                  \"url\" : \"https:\\/\\/jingyi.blog\"\n                }\n              ],\n              \"createdAt\" : \"2023-02-25T09:21:48+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"look up in eudic\",\n              \"filename\" : \"look-up-in-eudic.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/eudic.png\"\n              },\n              \"identifier\" : \"0d031b91eae5648603862a92b89d0ef5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Eudic\",\n              \"path\" : \"apps\\/eudic\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Look up Word\",\n              \"updatedAt\" : \"2023-02-25T09:21:48+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"One Thing\",\n          \"path\" : \"one-thing\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"One Thing\",\n                  \"url\" : \"https:\\/\\/sindresorhus.com\\/one-thing\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-16T17:00:05+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set the text shown in One Thing app.\",\n              \"filename\" : \"one-thing-set-text.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/one-thing.png\"\n              },\n              \"identifier\" : \"64b8520de38fe85dbc3fc84d16d26db9\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"One Thing\",\n              \"path\" : \"apps\\/one-thing\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Text\",\n              \"updatedAt\" : \"2023-02-03T19:59:31+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"One Thing\",\n                  \"url\" : \"https:\\/\\/sindresorhus.com\\/one-thing\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-16T17:00:05+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Clear the text shown in One Thing app.\",\n              \"filename\" : \"one-thing-clear-text.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/one-thing.png\"\n              },\n              \"identifier\" : \"d6364a4011082d1d7dbfeb99a5cd55bf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"One Thing\",\n              \"path\" : \"apps\\/one-thing\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clear Text\",\n              \"updatedAt\" : \"2023-02-03T19:59:31+07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Evernote\",\n          \"path\" : \"evernote\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-13T13:17:23-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Creates a new Evernote, pastes in the contents of the clipboard, and positions the cursor in the title area.\",\n              \"filename\" : \"create-note-paste-clipboard.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/evernote.png\"\n              },\n              \"identifier\" : \"d35a432612f0fce10372d3b066dc49e6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Evernote\",\n              \"path\" : \"apps\\/evernote\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Evernote Paste Clipboard\",\n              \"updatedAt\" : \"2021-08-13T13:17:23-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-13T13:17:23-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Creates a new Evernote.\",\n              \"filename\" : \"create-note.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/evernote.png\"\n              },\n              \"identifier\" : \"f546136ca9bad8f3b77a31e1ff0aecd0\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Evernote\",\n              \"path\" : \"apps\\/evernote\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Evernote\",\n              \"updatedAt\" : \"2021-08-13T13:17:23-07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"NotePlan3\",\n          \"path\" : \"noteplan3\",\n          \"readme\" : \"apps\\/noteplan3\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Göran Damberg\",\n                  \"url\" : \"https:\\/\\/github.com\\/gdamberg\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-23T09:20:05+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Append to daily note\",\n              \"filename\" : \"noteplan-append-daily-note.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/noteplan3.png\"\n              },\n              \"identifier\" : \"d802c64f73f9e89996597e76af3d5094\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"NotePlan3\",\n              \"path\" : \"apps\\/noteplan3\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Append To Daily Note\",\n              \"updatedAt\" : \"2021-06-23T09:20:05+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Göran Damberg\",\n                  \"url\" : \"https:\\/\\/github.com\\/gdamberg\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-23T09:20:05+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new note from clipboard\",\n              \"filename\" : \"noteplan-new-note-from-clipboard.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/noteplan3.png\"\n              },\n              \"identifier\" : \"2562e5c7b3258337f783b8210e796d55\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"NotePlan3\",\n              \"path\" : \"apps\\/noteplan3\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"New Note From Clipboard\",\n              \"updatedAt\" : \"2021-06-23T09:20:05+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Amphetamine\",\n          \"path\" : \"amphetamine\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-07T18:10:56-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start Default Amphetamine Session\",\n              \"filename\" : \"amphetamine-on.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/amphetamine.png\"\n              },\n              \"identifier\" : \"6c247430747abf30a7011ae37d87ca7b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Amphetamine\",\n              \"path\" : \"apps\\/amphetamine\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Default Session\",\n              \"updatedAt\" : \"2021-05-28T10:35:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-07T18:10:56-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop Current Amphetamine Session\",\n              \"filename\" : \"amphetamine-off.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/amphetamine.png\"\n              },\n              \"identifier\" : \"7663eee08fb216262ad4e904c0ed4c7a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Amphetamine\",\n              \"path\" : \"apps\\/amphetamine\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"End Session\",\n              \"updatedAt\" : \"2021-05-28T10:34:50+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Find My\",\n          \"path\" : \"find-my\",\n          \"readme\" : \"apps\\/find-my\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2025-06-12T06:53:33-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"fmp.js\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/find-my-icon.png\"\n              },\n              \"identifier\" : \"206851d53c58c074472f7acb20ceeb08\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"FindMy\",\n              \"path\" : \"apps\\/find-my\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Find My Phone (Auto Sound)\",\n              \"updatedAt\" : \"2025-06-12T06:53:33-07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Bear\",\n          \"path\" : \"bear\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the Today section in Bear.\",\n              \"filename\" : \"bear-today.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"a3ba0dc119ef33bb239b30ae6cb4d1e8\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Today\",\n              \"updatedAt\" : \"2021-05-28T10:36:54+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the specified tag in Bear.\",\n              \"filename\" : \"bear-open-tag.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"b0cc37027abe39c7a0cb5053b8a9f4ec\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Tag\",\n              \"updatedAt\" : \"2021-05-28T10:36:54+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new note to Bear.\",\n              \"filename\" : \"bear-add-note.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"1bdff208152a457aab81e00fda092d6c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Note\",\n              \"updatedAt\" : \"2021-05-28T10:35:40+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search notes by keyword and\\/or tag in Bear.\",\n              \"filename\" : \"bear-search.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"e7cdad30d00d056c56e710729f1a6531\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search\",\n              \"updatedAt\" : \"2021-06-14T14:17:13-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the Todo section in Bear.\",\n              \"filename\" : \"bear-todo.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"ae50306d0334257a49487d71a72598c6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Todos\",\n              \"updatedAt\" : \"2021-05-28T10:38:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Tanay Nistala\",\n                  \"url\" : \"https:\\/\\/github.com\\/tanaynistala\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-08T15:05:55+05:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open the specified note in Bear.\",\n              \"filename\" : \"bear-open-note.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : \"images\\/bear-dark.png\",\n                \"light\" : \"images\\/bear-light.png\"\n              },\n              \"identifier\" : \"24d03b4080ea3b49d348721ec0865b40\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bear\",\n              \"path\" : \"apps\\/bear\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Note\",\n              \"updatedAt\" : \"2021-05-28T10:36:54+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Mail\",\n          \"path\" : \"mail\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-22T16:27:53+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copies the foreground Mail deeplink\",\n              \"filename\" : \"copy-foreground-mail-deeplink.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📧\"\n              },\n              \"identifier\" : \"2b57bf3c301e2230d812bba90896fc1f\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mail\",\n              \"path\" : \"apps\\/mail\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Copy Foreground Mail Deeplink\",\n              \"updatedAt\" : \"2021-05-22T16:27:53+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"RealTong\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/RealTong\"\n                }\n              ],\n              \"createdAt\" : \"2024-03-02T12:46:14+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copy the captcha from the emlx file.\",\n              \"filename\" : \"copy-captcha-from-mail.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/mail.png\"\n              },\n              \"identifier\" : \"eb5104b3db21de0c7ea654c49319716a\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mail\",\n              \"path\" : \"apps\\/mail\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"CaptchaFromMail\",\n              \"updatedAt\" : \"2024-03-02T12:46:14+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Claude\",\n          \"path\" : \"claude\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Nimo Beeren\",\n                  \"url\" : \"https:\\/\\/github.com\\/nimobeeren\"\n                }\n              ],\n              \"createdAt\" : \"2024-08-07T21:01:27+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Claude in Chrome browser and submit a prompt\",\n              \"filename\" : \"claude.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"✨\"\n              },\n              \"identifier\" : \"cd9356ee79829cf478bdcd127c673a0c\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Claude\",\n              \"path\" : \"apps\\/claude\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Ask Claude\",\n              \"updatedAt\" : \"2024-08-30T13:09:27Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"TunnelBlick\",\n          \"path\" : \"tunnelblick\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect a VPN configuration.\",\n              \"filename\" : \"tunnelblick-disconnect.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tunnelblick.png\"\n              },\n              \"identifier\" : \"6abb4b2ece585f7043d27e0f70c8ed0c\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Tunnelblick\",\n              \"path\" : \"apps\\/tunnelblick\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Tunnelblick: Disconnect\",\n              \"updatedAt\" : \"2021-03-16T12:21:52+05:30\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect a VPN configuration.\",\n              \"filename\" : \"tunnelblick-connect.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tunnelblick.png\"\n              },\n              \"identifier\" : \"b16beed5521082645dbed303aaf63699\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Tunnelblick\",\n              \"path\" : \"apps\\/tunnelblick\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Tunnelblick: Connect\",\n              \"updatedAt\" : \"2021-03-16T12:21:13+05:30\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect all connected VPN configurations.\",\n              \"filename\" : \"tunnelblick-disconnect-all.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tunnelblick.png\"\n              },\n              \"identifier\" : \"f19aef4b963a8b078a2ece2685c9ea64\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Tunnelblick\",\n              \"path\" : \"apps\\/tunnelblick\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Tunnelblick: Disconnect All\",\n              \"updatedAt\" : \"2021-03-14T17:37:20+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect all unconnected VPN configurations.\",\n              \"filename\" : \"tunnelblick-connect-all.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tunnelblick.png\"\n              },\n              \"identifier\" : \"1d7014bbdf04ed245c83da0d5a682c17\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"TunnelBlick\",\n              \"path\" : \"apps\\/tunnelblick\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Tunnelblick: Connect All\",\n              \"updatedAt\" : \"2021-03-14T17:37:20+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Baremetrics\",\n          \"path\" : \"baremetrics\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-15T11:09:04+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display Average revenue per user (ARPU)\",\n              \"filename\" : \"get-arpu.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/baremetrics.png\"\n              },\n              \"identifier\" : \"61cffadab08d5776aa9c0cdba919f9b4\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Baremetrics\",\n              \"path\" : \"apps\\/baremetrics\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Average Revenue Per User\",\n              \"updatedAt\" : \"2022-09-15T11:09:04+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-15T11:09:04+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display Annual Recurring Revenue (ARR)\",\n              \"filename\" : \"get-arr.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/baremetrics.png\"\n              },\n              \"identifier\" : \"7eb95607eb6cb96ad5f62844ccd08157\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Baremetrics\",\n              \"path\" : \"apps\\/baremetrics\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Annual Recurring Revenue\",\n              \"updatedAt\" : \"2022-09-15T11:09:04+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-15T11:09:04+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display Lifetime Value (LTV)\",\n              \"filename\" : \"get-ltv.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/baremetrics.png\"\n              },\n              \"identifier\" : \"28fcd48e5fdd0d94cd0fc0caa85ec6f7\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Baremetrics\",\n              \"path\" : \"apps\\/baremetrics\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lifetime Value\",\n              \"updatedAt\" : \"2022-09-15T11:09:04+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-15T11:09:04+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display Monthly Recurring Revenue (MRR)\",\n              \"filename\" : \"get-mrr.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/baremetrics.png\"\n              },\n              \"identifier\" : \"c93a6f26b13a627e732b5ca104457e35\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Baremetrics\",\n              \"path\" : \"apps\\/baremetrics\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Monthly Recurring Revenue\",\n              \"updatedAt\" : \"2022-09-15T11:09:04+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Valentin Chrétien\",\n                  \"url\" : \"https:\\/\\/github.com\\/valentinchrt\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-15T11:09:04+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display Revenue Dashboard\",\n              \"filename\" : \"simple-dashboard.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/baremetrics.png\"\n              },\n              \"identifier\" : \"8cff2dce2132b4b23e143ff7dfda31f8\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Baremetrics\",\n              \"path\" : \"apps\\/baremetrics\\/\",\n              \"refreshTime\" : \"1h\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Revenue\",\n              \"updatedAt\" : \"2022-09-15T11:09:04+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Message\",\n          \"path\" : \"Message\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fatpandac\",\n                  \"url\" : \"https:\\/\\/github.com\\/Fatpandac\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-23T18:59:56+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Copy verification code from a message.\",\n              \"filename\" : \"copycode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/Message.png\"\n              },\n              \"identifier\" : \"f07bfd0fc382e1e3a7a1ca7b8b23221d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Messages\",\n              \"path\" : \"apps\\/Message\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Copy Code\",\n              \"updatedAt\" : \"2022-06-23T18:59:56+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Ferdi\",\n          \"path\" : \"ferdi\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-17T16:20:13+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"ferdi-open-service-by-name.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/ferdi.png\"\n              },\n              \"identifier\" : \"10ad2d03caaee101d4862f1a21cc1234\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Ferdi\",\n              \"path\" : \"apps\\/ferdi\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Service by Name\",\n              \"updatedAt\" : \"2021-07-23T17:46:29-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-16T16:05:58+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"ferdi-open-service-by-index.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/ferdi.png\"\n              },\n              \"identifier\" : \"504a15f524e5a1a6da75cc4a72e59c9e\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Ferdi\",\n              \"path\" : \"apps\\/ferdi\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Service by Index\",\n              \"updatedAt\" : \"2021-07-23T17:46:11-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"HazeOver\",\n          \"path\" : \"hazeover\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-24T20:19:30Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set dimming intensity of background windows.\",\n              \"filename\" : \"hazeover-set-intensity.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/hazeover.png\"\n              },\n              \"identifier\" : \"f26557a194748a37e12e64003b1f2c6f\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"HazeOver\",\n              \"path\" : \"apps\\/hazeover\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Intensity\",\n              \"updatedAt\" : \"2021-05-28T10:42:00+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-24T20:19:30Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle dimming of all background windows.\",\n              \"filename\" : \"hazeover-toggle-dimming.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/hazeover.png\"\n              },\n              \"identifier\" : \"5368be37ae49d353930157085116709f\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"HazeOver\",\n              \"path\" : \"apps\\/hazeover\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Dimming\",\n              \"updatedAt\" : \"2021-05-28T10:42:00+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"iconsur\",\n          \"path\" : \"iconsur\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"StevenRCE0\",\n                  \"url\" : \"https:\\/\\/github.com\\/StevenRCE0\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-27T15:06:06+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Change App icons to match Big Sur\",\n              \"filename\" : \"iconsur.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🅱️\"\n              },\n              \"identifier\" : \"10ce792f9f21acf4813a7307956a1999\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"iconsur\",\n              \"path\" : \"apps\\/iconsur\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Change Application Icon\",\n              \"updatedAt\" : \"2022-02-22T00:14:05+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Pulse Secure\",\n          \"path\" : \"pulse-secure\",\n          \"readme\" : \"apps\\/pulse-secure\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:14:26+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Resume the suspended connection.\",\n              \"filename\" : \"pulse-secure-resume.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/pulse-secure.png\"\n              },\n              \"identifier\" : \"137e52f49aba309c60fb9bc9427bda4d\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pulse Secure\",\n              \"path\" : \"apps\\/pulse-secure\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Resume\",\n              \"updatedAt\" : \"2021-06-14T20:14:26+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:14:26+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect to the given \\/ default connection with the given \\/ default username.\",\n              \"filename\" : \"pulse-secure-connect.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/pulse-secure.png\"\n              },\n              \"identifier\" : \"8776f55ec372ac1d0a62bc9267777ace\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pulse Secure\",\n              \"path\" : \"apps\\/pulse-secure\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect \\/ Reconnect\",\n              \"updatedAt\" : \"2021-06-16T14:42:20+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:14:26+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Suspend the active connection.\",\n              \"filename\" : \"pulse-secure-suspend.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/pulse-secure.png\"\n              },\n              \"identifier\" : \"c5e03d8d6265725238c13d8b285c48f6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pulse Secure\",\n              \"path\" : \"apps\\/pulse-secure\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Suspend\",\n              \"updatedAt\" : \"2021-06-14T20:14:26+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T20:14:26+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect \\/ cancel the active connection.\",\n              \"filename\" : \"pulse-secure-disconnect.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/pulse-secure.png\"\n              },\n              \"identifier\" : \"03191a91d92833853d2a70fad5f19424\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pulse Secure\",\n              \"path\" : \"apps\\/pulse-secure\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect \\/ Cancel\",\n              \"updatedAt\" : \"2021-06-14T20:14:26+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Downie\",\n          \"path\" : \"downie\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Clu Soh\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/designedbyclu\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-14T15:34:34+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Download video from Pasteboard link\",\n              \"filename\" : \"download-video.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/downie.png\"\n              },\n              \"identifier\" : \"2003cce30b2c40d492dfd7a17e5afeb3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Downie\",\n              \"path\" : \"apps\\/downie\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Download Video\",\n              \"updatedAt\" : \"2022-08-25T12:14:46+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Focus\",\n          \"path\" : \"focus\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a custom focus session. If you don't enter any values, it starts an untimed focus session.\",\n              \"filename\" : \"focus-start-custom-session.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"80dd2db0a8e0b267adf52209d1e2b66a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Custom Focus Session\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open focus preferences.\",\n              \"filename\" : \"focus-preferences.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"26e49cef06b6a50e9c2a2288a0b3e5de\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Focus Preferences\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop the current focus session.\",\n              \"filename\" : \"focus-stop-session.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"2f0e5d4a017c664641797d3ccad1fbe1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Focus Session (Unfocus)\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Take 5 minutes break.\",\n              \"filename\" : \"focus-start-break-5.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"11136efc43088020c73969f86e0dd6d2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Take 5 Minutes Break\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle between start session (untimed) and stop session.\",\n              \"filename\" : \"focus-toggle-focus.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"87f5cb4aa46375da34318fc091f250b0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Focus Session\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start an untimed focus session.\",\n              \"filename\" : \"focus-start-session.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"870e8c9bf851b140036bb6959e990571\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Focus Session (Focus)\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop break and continues the current focus session.\",\n              \"filename\" : \"focus-stop-break.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"301323d2b2b7165ab0364ea4a600f4d5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Break (Unbreak)\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a custom break. If you don't enter any values, it uses the last break duration.\",\n              \"filename\" : \"focus-start-custom-break.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"a8c3ae965a33e0ac2098e35ea49ffdd0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Custom Break\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ernest Ojeh\",\n                  \"url\" : \"https:\\/\\/github.com\\/namzo\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-28T20:18:00+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a 25 minutes focus session.\",\n              \"filename\" : \"focus-start-session-25.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/focus-logo.png\"\n              },\n              \"identifier\" : \"c98d57dfcdd3aa35ed145b6a221377e5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Focus\",\n              \"path\" : \"apps\\/focus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start 25 minutes Focus Session\",\n              \"updatedAt\" : \"2022-02-09T09:15:31+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Plash\",\n          \"path\" : \"plash\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Reload the current website in Plash.\",\n              \"filename\" : \"plash-reload-website.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"efba722b5a535ab230ffe426bbd3aa00\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Reload Website\",\n              \"updatedAt\" : \"2021-06-04T23:56:19+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch to the next website in the list in Plash.\",\n              \"filename\" : \"plash-next-website.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"4871914878a1c9aca9d14b7114a76df2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next Website\",\n              \"updatedAt\" : \"2021-06-04T23:56:19+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch to the previous website in the list in Plash.\",\n              \"filename\" : \"plash-previous-website.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"ffed236c901c236e41814468c88c82ea\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous Website\",\n              \"updatedAt\" : \"2021-06-04T23:56:19+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switch to a random website from the list of websites in Plash.\",\n              \"filename\" : \"plash-random-website.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"10bddde306d0bfdae3624cb8cdddd0b0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch to Random Website\",\n              \"updatedAt\" : \"2021-06-04T23:56:19+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle browsing mode in Plash.\",\n              \"filename\" : \"plash-toggle-browser-mode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"a0a1cd94513bf76d8c8ec9bec1ce7ec2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Browsing Mode\",\n              \"updatedAt\" : \"2021-05-28T10:24:58+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Plash\",\n                  \"url\" : \"https:\\/\\/github.com\\/sindresorhus\\/Plash\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-28T01:55:40+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a website to Plash.\",\n              \"filename\" : \"plash-add-website.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/plash.png\"\n              },\n              \"identifier\" : \"d65493aee461a49dbf2b6ef976857898\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Plash\",\n              \"path\" : \"apps\\/plash\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Website\",\n              \"updatedAt\" : \"2021-06-04T23:56:19+07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Mullvad\",\n          \"path\" : \"mullvad\",\n          \"readme\" : \"apps\\/mullvad\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect from the Mullvad VPN tunnel.\",\n              \"filename\" : \"disconnect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"a16754f03ea5fa74d3d05116c6f23ed1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect\",\n              \"updatedAt\" : \"2021-03-25T22:10:33Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect the Mullvad VPN tunnel using the specified location.\",\n              \"filename\" : \"location.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"bfd215e3646e02a03ad2b15ad2a97557\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect to Location\",\n              \"updatedAt\" : \"2022-08-25T19:51:18Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search the list of available entities to which a Mullvad VPN tunnel connection can be made.\",\n              \"filename\" : \"search.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"5773c509e585b2181a22e12e75b4cf0f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search Countries, Cities, and Hostnames\",\n              \"updatedAt\" : \"2021-03-25T22:10:33Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display the current status of the Mullvad VPN tunnel connection.\",\n              \"filename\" : \"status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"cd0323ea623775b56c6aaf7f2123bb14\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Mullvad Status\",\n              \"updatedAt\" : \"2022-08-25T19:51:18Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Force the client to reconnect to the Mullvad VPN tunnel.\",\n              \"filename\" : \"reconnect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"3712d89f71b9d5508b039c4a8b0a1a8c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Reconnect\",\n              \"updatedAt\" : \"2022-08-25T19:51:18Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-25T18:08:20-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect the Mullvad VPN tunnel using the most recent configuration settings.\",\n              \"filename\" : \"connect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/mullvad.png\"\n              },\n              \"identifier\" : \"a7c6ddf80482ff3f287840cdf2f6a8f9\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Mullvad\",\n              \"path\" : \"apps\\/mullvad\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect\",\n              \"updatedAt\" : \"2022-08-25T19:51:18Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Timing\",\n          \"path\" : \"timing\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Landen Danyluk\",\n                  \"url\" : \"https:\\/\\/github.com\\/landendanyluk\"\n                }\n              ],\n              \"createdAt\" : \"2022-07-23T23:10:15-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a timer\",\n              \"filename\" : \"timing-start-timer.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/timing-logo.png\"\n              },\n              \"identifier\" : \"e76f98fba595acb6590639f1d8705b5a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Timing\",\n              \"path\" : \"apps\\/timing\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Timer\",\n              \"updatedAt\" : \"2022-07-23T23:10:15-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Landen Danyluk\",\n                  \"url\" : \"https:\\/\\/github.com\\/landendanyluk\"\n                }\n              ],\n              \"createdAt\" : \"2022-07-23T23:10:15-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop the active timer\",\n              \"filename\" : \"timing-stop-timer.js\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/timing-logo.png\"\n              },\n              \"identifier\" : \"b8f7a1b309c9fd169a4bb20d08748dcb\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Timing\",\n              \"path\" : \"apps\\/timing\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Timer\",\n              \"updatedAt\" : \"2022-07-23T23:10:15-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"OpenVPN\",\n          \"path\" : \"openvpn\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-16T13:21:15-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Prepares OpenVPN Connect client to connect or reconnect.\",\n              \"filename\" : \"connect-openvpn.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/openvpn.png\"\n              },\n              \"identifier\" : \"a345726ad1219631c162173e74cc319c\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"OpenVPN\",\n              \"path\" : \"apps\\/openvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect OpenVPN\",\n              \"updatedAt\" : \"2021-08-16T13:21:15-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-16T13:21:15-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Quits the OpenVPN Connect client.\",\n              \"filename\" : \"quit-openvpn.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/openvpn.png\"\n              },\n              \"identifier\" : \"d0b3d1b64e34e581d9224b2efbce2c6e\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"OpenVPN\",\n              \"path\" : \"apps\\/openvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Quit OpenVPN\",\n              \"updatedAt\" : \"2021-08-16T13:21:15-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-16T13:21:15-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnects the OpenVPN Connect client from VPN.\",\n              \"filename\" : \"disconnect-openvpn.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/openvpn.png\"\n              },\n              \"identifier\" : \"d63f02150ae5a9a98eadc250ec299d40\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"OpenVPN\",\n              \"path\" : \"apps\\/openvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect OpenVPN\",\n              \"updatedAt\" : \"2021-08-16T13:21:15-07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Todoist\",\n          \"path\" : \"todoist\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-04T12:12:44+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create Task\",\n              \"filename\" : \"create-task.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/todoist-logo.png\"\n              },\n              \"identifier\" : \"306fdf2b185a4c91bdc04007b23bd008\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Todoist\",\n              \"path\" : \"apps\\/todoist\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Task\",\n              \"updatedAt\" : \"2023-03-18T04:02:12+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Faris Aziz\",\n                  \"url\" : \"https:\\/\\/github.com\\/farisaziz12\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-04T12:12:44+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Gets All Todoist tasks\",\n              \"filename\" : \"get-tasks.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/todoist-logo.png\"\n              },\n              \"identifier\" : \"ef1425a55c8acd3fad650cc85a6ae88a\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Todoist\",\n              \"path\" : \"apps\\/todoist\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Get Tasks\",\n              \"updatedAt\" : \"2021-05-04T10:14:48Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"WebStorm\",\n          \"path\" : \"webstorm\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniel Stovv\",\n                  \"url\" : \"https:\\/\\/github.com\\/stovv\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-27T15:04:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open WebStorm projects\",\n              \"filename\" : \"open-workspace.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/webstorm.png\"\n              },\n              \"identifier\" : \"8db170a15f9f700cf1a5bc69152e3e3e\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WebStorm\",\n              \"path\" : \"apps\\/webstorm\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open\",\n              \"updatedAt\" : \"2022-01-27T12:07:09Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Translate Shell\",\n          \"path\" : \"translate-shell\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"tiancheng92\",\n                  \"url\" : \"https:\\/\\/github.com\\/tiancheng92\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-03T20:56:05+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate and copy brief translation to clipboard.\",\n              \"filename\" : \"translate-to-en.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📖\"\n              },\n              \"identifier\" : \"ad28b67b7a6ad68e8fe478ae135e8795\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Translate Shell\",\n              \"path\" : \"apps\\/translate-shell\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Translate to EN\",\n              \"updatedAt\" : \"2021-05-07T07:58:55+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"tiancheng92\",\n                  \"url\" : \"https:\\/\\/github.com\\/tiancheng92\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-03T20:56:05+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate and copy brief translation to clipboard.\",\n              \"filename\" : \"translate-to-zh.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📖\"\n              },\n              \"identifier\" : \"cb355a2a427be58d5695011f2d8cd64a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Translate Shell\",\n              \"path\" : \"apps\\/translate-shell\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Translate to ZH\",\n              \"updatedAt\" : \"2021-05-07T07:58:55+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marcel Bochtler\",\n                  \"url\" : \"https:\\/\\/github.com\\/MarcelBochtler\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-07T07:58:55+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate text using translate-shell.\",\n              \"filename\" : \"translate-shell-language-pair.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🌍\"\n              },\n              \"identifier\" : \"e9776d8d1e5db81fb7f49a4df06af0f0\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Translate Shell Language Pair\",\n              \"path\" : \"apps\\/translate-shell\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Translate Shell\",\n              \"updatedAt\" : \"2021-07-15T22:22:31+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Notes\",\n          \"path\" : \"notes\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Vardan Sawhney\",\n                  \"url\" : \"https:\\/\\/github.com\\/commai\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-03T09:54:13-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Note via its Title\",\n              \"filename\" : \"open-note.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/notes.png\"\n              },\n              \"identifier\" : \"9295d4230a85f19a25e491154c2cc2ae\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Notes\",\n              \"path\" : \"apps\\/notes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Note\",\n              \"updatedAt\" : \"2021-08-03T09:54:13-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ayoub Gharbi\",\n                  \"url\" : \"github.com\\/ayoub-g\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-19T11:57:46+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"This script searches for a note, given its exact name, or a substring, the search does not consider case\",\n              \"filename\" : \"search-note-by-name.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/notes.png\"\n              },\n              \"identifier\" : \"2742cc92859fb01b45bbed9bd2ba3dc8\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Notes\",\n              \"path\" : \"apps\\/notes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search Note By Name\",\n              \"updatedAt\" : \"2021-08-19T11:57:46+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ayoub Gharbi\",\n                  \"url\" : \"https:\\/\\/github.com\\/ayoub-g\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:46:40+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Script to append to an existing note content from clipboard.\",\n              \"filename\" : \"append-note-from-clipboard.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/notes.png\"\n              },\n              \"identifier\" : \"8e61646606984a27fa52fabeda748f01\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Notes\",\n              \"path\" : \"apps\\/notes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Append Content From Clipboard\",\n              \"updatedAt\" : \"2021-08-20T22:46:40+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ayoub Gharbi\",\n                  \"url\" : \"https:\\/\\/github.com\\/ayoub-g\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-21T23:46:22-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create Note From Clipboard\",\n              \"filename\" : \"create-note-from-clipboard.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/notes.png\"\n              },\n              \"identifier\" : \"4186e11daddefc7d27d89b3943eb4b44\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Notes\",\n              \"path\" : \"apps\\/notes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Note From Clipboard\",\n              \"updatedAt\" : \"2024-03-01T12:51:47+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Vardan Sawhney\",\n                  \"url\" : \"https:\\/\\/github.com\\/commai\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-21T23:46:22-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new Note \",\n              \"filename\" : \"create-note.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/notes.png\"\n              },\n              \"identifier\" : \"e9cecac4bfa067f607c15ef602dae3d9\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Notes\",\n              \"path\" : \"apps\\/notes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Note\",\n              \"updatedAt\" : \"2021-07-23T21:06:02-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Y Pomodoro\",\n          \"path\" : \"y-pomodoro\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:47:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause active pomodoro timer using  [y-pomodoro](https:\\/\\/github.com\\/jesse-c\\/y-pomodoro)\",\n              \"filename\" : \"pause.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"d2836820287e44cb9f83f4dd84f8fdd1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"y-pomodoro\",\n              \"path\" : \"apps\\/y-pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2021-08-20T22:47:15+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:47:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show active pomodoro timer using [y-pomodoro](https:\\/\\/github.com\\/jesse-c\\/y-pomodoro)\",\n              \"filename\" : \"show.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"8c775fb12a394e545e09c5dc3f4f5385\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"y-pomodoro\",\n              \"path\" : \"apps\\/y-pomodoro\\/\",\n              \"refreshTime\" : \"15s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show\",\n              \"updatedAt\" : \"2021-08-20T22:47:15+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:47:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Resume active pomodoro timer using [y-pomodoro](https:\\/\\/github.com\\/jesse-c\\/y-pomodoro)\",\n              \"filename\" : \"resume.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"3f8075486c097397d65b6911816fba51\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"y-pomodoro\",\n              \"path\" : \"apps\\/y-pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Resume\",\n              \"updatedAt\" : \"2021-08-20T22:47:15+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:47:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop active pomodoro timer using [y-pomodoro](https:\\/\\/github.com\\/jesse-c\\/y-pomodoro)\",\n              \"filename\" : \"stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"e265864f8039fb0d44199d08a552c4f5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"y-pomodoro\",\n              \"path\" : \"apps\\/y-pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop\",\n              \"updatedAt\" : \"2021-08-20T22:47:15+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jesse Claven\",\n                  \"url\" : \"https:\\/\\/github.com\\/jesse-c\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-20T22:47:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a pomodoro timer using [y-pomodoro](https:\\/\\/github.com\\/jesse-c\\/y-pomodoro)\",\n              \"filename\" : \"start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"205772935becd5940672978344fe329f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"y-pomodoro\",\n              \"path\" : \"apps\\/y-pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start\",\n              \"updatedAt\" : \"2021-08-20T22:47:15+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"PhpStorm\",\n          \"path\" : \"phpstorm\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2021-08-06T16:17:35+04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"recent-projects.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"icon.icns\"\n              },\n              \"identifier\" : \"636e401e276ed8883dff6e76bf1983b4\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"PhpStorm\",\n              \"path\" : \"apps\\/phpstorm\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Update Recent Projects\",\n              \"updatedAt\" : \"2021-08-06T16:17:35+04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Fantastical\",\n          \"path\" : \"fantastical\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Robert Cooper\",\n                  \"url\" : \"https:\\/\\/github.com\\/robertcoopercode\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-23T16:29:01-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create an event in Fantastical\",\n              \"filename\" : \"create-event.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/fantastical.png\"\n              },\n              \"identifier\" : \"7634569101c20232ebf8ecfce9624c61\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Fantastical\",\n              \"path\" : \"apps\\/fantastical\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Event\",\n              \"updatedAt\" : \"2021-05-28T10:41:12+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Vardan Sawhney\",\n                  \"url\" : \"https:\\/\\/github.com\\/commai\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-03T00:04:35-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Speed up setting reminders for Fantastical by invoking this script.\",\n              \"filename\" : \"create-todo-in-fantastical.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/fantastical.png\"\n              },\n              \"identifier\" : \"ed64cfea0aefdda6f31454176ecc101f\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Fantastical\",\n              \"path\" : \"apps\\/fantastical\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Task\",\n              \"updatedAt\" : \"2021-06-03T00:04:35-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Safari\",\n          \"path\" : \"safari\",\n          \"readme\" : \"apps\\/safari\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close all tabs besides the currently active tab.\",\n              \"filename\" : \"safari-close-other-tabs.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"38cc0dc04da036a099b3e37fd711ef8d\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close Other Tabs\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Dave Lehman\",\n                  \"url\" : \"https:\\/\\/github.com\\/dlehman\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-19T12:49:15-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open current Safari URL in new tab in Firefox\",\n              \"filename\" : \"safari-current-page-url-in-firefox.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"953364ac2c0ce7e6bbb02efeed35bfd6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Safari URL in Firefox\",\n              \"updatedAt\" : \"2021-08-20T09:04:17-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aaron Miller\",\n                  \"url\" : \"https:\\/\\/github.com\\/aaronhmiller\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-06T10:24:49-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"This script clears cache and reloads the page of the frontmost Safari window.\",\n              \"filename\" : \"safari-clear-cache-reload.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"ce0ee1596099e7699e99d6267b097f3d\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clear Cache and Refresh Page\",\n              \"updatedAt\" : \"2021-08-06T10:24:49-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new Reading List item with the given URL. Allows a custom title to be specified.\",\n              \"filename\" : \"safari-create-reading-list-item.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"77a2ff3bf579994aa3624feb9aca64a4\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Item to Reading List\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Bianco\",\n                  \"url\" : \"https:\\/\\/github.com\\/iloveitaly\"\n                }\n              ],\n              \"createdAt\" : \"2024-08-21T08:30:36-06:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Download the currently active tab's URL.\",\n              \"filename\" : \"safari-download-url.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"3fe3287d74734aa1adaf454aa6be4dce\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Download Current URL\",\n              \"updatedAt\" : \"2024-08-30T13:02:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close tabs with the same URL.\",\n              \"filename\" : \"safari-close-duplicated-tabs.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"3910bc8358dde77be0359ef115f703a6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close Duplicated Tabs\",\n              \"updatedAt\" : \"2021-03-09T15:11:52Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close all tabs to the right side of the currently active tab.\",\n              \"filename\" : \"safari-close-tabs-right.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"779e79e3334dca627507dc1737a1cf27\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close Tabs to the Right\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close all tabs to the left side of the currently active tab.\",\n              \"filename\" : \"safari-close-tabs-left.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"98ee4a51212c322cf544c0e756ca3383\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close Tabs to the Left\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Duplicates and opens the currently active tab.\",\n              \"filename\" : \"safari-duplicate-tab.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"6727e9a045a860d1a726af83df1b9df3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Duplicate Tab\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T15:09:02Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close all tabs in the frontmost window\",\n              \"filename\" : \"safari-close-all-tabs.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"1cd7846276f766bc2b17a7a99bed645a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close All Tabs\",\n              \"updatedAt\" : \"2021-03-09T15:09:02Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"smxl\",\n                  \"url\" : \"https:\\/\\/github.com\\/smxl\"\n                }\n              ],\n              \"createdAt\" : \"2023-02-16T13:11:13+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Bing in Safari with Edge User-Agent\",\n              \"filename\" : \"safari-bing-edge-user-agent.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"f88a9b8ee459537aa8da40d071ab6232\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Bing with Edge User-Agent\",\n              \"updatedAt\" : \"2023-02-17T18:29:04+09:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Dave Lehman\",\n                  \"url\" : \"https:\\/\\/github.com\\/dlehman\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-19T12:49:15-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open current Safari URL in new tab in Chrome\",\n              \"filename\" : \"safari-current-page-url-in-chrome.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/safari.png\"\n              },\n              \"identifier\" : \"82f9f4b17a97bf774484f7946245c318\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Safari\",\n              \"path\" : \"apps\\/safari\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Safari URL in Chrome\",\n              \"updatedAt\" : \"2021-08-20T09:04:07-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Dictionary\",\n          \"path\" : \"dictionary\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"yayiji\",\n                  \"url\" : \"https:\\/\\/github.com\\/yayiji\"\n                }\n              ],\n              \"createdAt\" : \"2022-10-19T02:28:10+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Look up selected text in Dictionary\",\n              \"filename\" : \"look-up-in-dictionary.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/dictionary.icns\"\n              },\n              \"identifier\" : \"5952f1e95fc51a30ab3a3d3538dfe273\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Dictionary\",\n              \"path\" : \"apps\\/dictionary\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Look up in Dictionary\",\n              \"updatedAt\" : \"2022-10-19T02:28:10+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Raycast\",\n          \"path\" : \"raycast\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fatpandac\",\n                  \"url\" : \"https:\\/\\/github.com\\/Fatpandac\"\n                }\n              ],\n              \"createdAt\" : \"2022-05-19T01:47:07+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set Confetti to run for a number of times and during intervals\",\n              \"filename\" : \"celebrate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🎉\"\n              },\n              \"identifier\" : \"c9ab115f10c7edb801658fe3f94c2886\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Raycast\",\n              \"path\" : \"apps\\/raycast\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Celebrate\",\n              \"updatedAt\" : \"2022-05-19T10:24:28+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Surfshark\",\n          \"path\" : \"surfshark\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jordi Clement\",\n                  \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T23:14:49+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start Surfshark VPN connection\",\n              \"filename\" : \"surfshark-vpn-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/surfshark.png\"\n              },\n              \"identifier\" : \"b3f462e20e0dfbe32bbe6647d34b39f3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Surfshark\",\n              \"path\" : \"apps\\/surfshark\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"VPN Connect\",\n              \"updatedAt\" : \"2021-03-08T18:01:25+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jordi Clement\",\n                  \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T23:14:49+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop Surfshark VPN connection\",\n              \"filename\" : \"surfshark-vpn-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/surfshark.png\"\n              },\n              \"identifier\" : \"ee1e49d67e3b13e5a97141a3b9c4ecac\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Surfshark\",\n              \"path\" : \"apps\\/surfshark\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"VPN Disconnect\",\n              \"updatedAt\" : \"2021-03-08T18:01:25+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jordi Clement\",\n                  \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-04T23:14:49+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get Surfshark VPN status\",\n              \"filename\" : \"surfshark-vpn-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/surfshark.png\"\n              },\n              \"identifier\" : \"bdb5be9e3fc0587bacc025ba8b39a4cc\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Surfshark\",\n              \"path\" : \"apps\\/surfshark\\/\",\n              \"refreshTime\" : \"10s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Surfshark VPN Status\",\n              \"updatedAt\" : \"2021-03-08T18:01:25+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"DND Me\",\n          \"path\" : \"dnd-me\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Roland Leth\",\n                  \"url\" : \"https:\\/\\/runtimesharks.com\\/projects\\/dnd-me\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-21T11:07:25+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stops DND via DND Me.\",\n              \"filename\" : \"stop-dnd-me.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔔\"\n              },\n              \"identifier\" : \"b382cc160f69b4551ceddaab6d613f1a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DND Me\",\n              \"path\" : \"apps\\/dnd-me\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop DND\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Roland Leth\",\n                  \"url\" : \"https:\\/\\/runtimesharks.com\\/projects\\/dnd-me\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-21T11:07:25+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Starts DND via DND Me. The parameter has to be a menu item or slider equivalent: 15m, 30m, 1h, 2h, ..., 12h, next, next-hour, next-half-hour; it defaults to next. next-hour means the next 60m mark, next-half-hour means the next 30m mark and next means the first of the two. For example, if it's 9:22, next-hour means 10:00, next-half-hour means 9:30 and next means 9:30.\",\n              \"filename\" : \"start-dnd-me.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔕\"\n              },\n              \"identifier\" : \"98631b11572aad898f0ff5303c51aeaf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DND Me\",\n              \"path\" : \"apps\\/dnd-me\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start DND\",\n              \"updatedAt\" : \"2021-05-28T10:40:03+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Tailscale\",\n          \"path\" : \"tailscale\",\n          \"readme\" : \"apps\\/tailscale\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ross Zurowski\",\n                  \"url\" : \"https:\\/\\/github.com\\/rosszurowski\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T15:33:18-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnects from Tailscale\",\n              \"filename\" : \"tailscale-disconnect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/tailscale-iconDark.png\",\n                \"light\" : \".\\/images\\/tailscale-icon.png\"\n              },\n              \"identifier\" : \"e8490d25ff8264ba488daca5cf1bd686\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tailscale\",\n              \"path\" : \"apps\\/tailscale\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect\",\n              \"updatedAt\" : \"2021-06-14T15:33:18-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ross Zurowski\",\n                  \"url\" : \"https:\\/\\/github.com\\/rosszurowski\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T15:33:18-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Gets your private Tailscale IP\",\n              \"filename\" : \"tailscale-ip.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/tailscale-iconDark.png\",\n                \"light\" : \".\\/images\\/tailscale-icon.png\"\n              },\n              \"identifier\" : \"95bc0bc6cbf4aa67028652f54fc1009c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tailscale\",\n              \"path\" : \"apps\\/tailscale\\/\",\n              \"refreshTime\" : \"1d\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Get IP\",\n              \"updatedAt\" : \"2021-06-14T15:33:18-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ross Zurowski\",\n                  \"url\" : \"https:\\/\\/github.com\\/rosszurowski\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T15:33:18-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connects to Tailscale\",\n              \"filename\" : \"tailscale-connect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/tailscale-iconDark.png\",\n                \"light\" : \".\\/images\\/tailscale-icon.png\"\n              },\n              \"identifier\" : \"3264e1d35d86b9573e5d3962b64992f6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tailscale\",\n              \"path\" : \"apps\\/tailscale\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect\",\n              \"updatedAt\" : \"2021-06-14T15:33:18-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Ross Zurowski\",\n                  \"url\" : \"https:\\/\\/github.com\\/rosszurowski\"\n                },\n                {\n                  \"name\" : \"Daniel Schoemer\",\n                  \"url\" : \"https:\\/\\/github.com\\/quatauta\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-14T15:33:18-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Switches Tailscale networks\",\n              \"filename\" : \"tailscale-switch.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : \".\\/images\\/tailscale-iconDark.png\",\n                \"light\" : \".\\/images\\/tailscale-icon.png\"\n              },\n              \"identifier\" : \"d80b655296e9ce8762ff310a4dc45d7a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tailscale\",\n              \"path\" : \"apps\\/tailscale\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Switch Account\",\n              \"updatedAt\" : \"2024-08-19T14:49:32+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Deepl\",\n          \"path\" : \"deepl\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-16T15:22:56+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate text on the DeepL website. Translates to a default language if no \\\"to\\\" argument is given.\",\n              \"filename\" : \"deepl-web-translate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/deepl.png\"\n              },\n              \"identifier\" : \"0c7a95c20bc816c7db4e9b84ed604c0e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Web Searches\",\n              \"path\" : \"apps\\/deepl\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"DeepL Web Translate\",\n              \"updatedAt\" : \"2021-04-07T20:04:04+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jono Hewitt\",\n                  \"url\" : \"https:\\/\\/github.com\\/jonohewitt\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-12T22:44:13+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Translate text in DeepL for Mac. Features options to input from the clipboard as well as automatically copy translation results.\",\n              \"filename\" : \"deepl-app-translate.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/deepl.png\"\n              },\n              \"identifier\" : \"13e79a758f8e2822baea735ea52075c5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Apps\",\n              \"path\" : \"apps\\/deepl\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"DeepL App Translate\",\n              \"updatedAt\" : \"2022-02-07T03:09:14+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"WARP\",\n          \"path\" : \"warp\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T23:01:39+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect from WARP\",\n              \"filename\" : \"warp-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/warp.png\"\n              },\n              \"identifier\" : \"84f6a46d9901c80cc7dd7a7d71e833db\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WARP\",\n              \"path\" : \"apps\\/warp\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect\",\n              \"updatedAt\" : \"2022-11-21T00:02:28+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T23:01:39+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle Connection\",\n              \"filename\" : \"warp-toggle.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/warp.png\"\n              },\n              \"identifier\" : \"7792a62e2ea9c46c3c44aa5c7ea0a3fe\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WARP\",\n              \"path\" : \"apps\\/warp\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle WARP\",\n              \"updatedAt\" : \"2022-11-21T00:02:28+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T23:01:39+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Check WARP connection\",\n              \"filename\" : \"warp-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/warp.png\"\n              },\n              \"identifier\" : \"e24da24122bfc2592adaf22617c9b2ee\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WARP\",\n              \"path\" : \"apps\\/warp\\/\",\n              \"refreshTime\" : \"30s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"WARP Status\",\n              \"updatedAt\" : \"2022-11-21T00:02:28+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Fuksman\",\n                  \"url\" : \"https:\\/\\/github.com\\/fuksman\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T23:01:39+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a connection to WARP\",\n              \"filename\" : \"warp-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/warp.png\"\n              },\n              \"identifier\" : \"5e1bf486a85fcd82a889fc34e2f23399\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WARP\",\n              \"path\" : \"apps\\/warp\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect\",\n              \"updatedAt\" : \"2022-11-21T00:02:28+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Daniils Petrovs\",\n                  \"url\" : \"https:\\/\\/github.com\\/danirukun\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T23:01:39+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Force WARP reauthentication\",\n              \"filename\" : \"warp-reauth.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/warp.png\"\n              },\n              \"identifier\" : \"a47be00594b26ffd668ccf35ac6d9a10\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"WARP\",\n              \"path\" : \"apps\\/warp\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Reauthenticate\",\n              \"updatedAt\" : \"2023-08-10T10:55:06+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Medo\",\n          \"path\" : \"medo\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aayush \",\n                  \"url\" : \"https:\\/\\/github.com\\/Aayush9029\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-27T16:04:55-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new task with priority \",\n              \"filename\" : \"medo-float-small.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/medo.png\"\n              },\n              \"identifier\" : \"53656a8d7f20d1e46864d16a171f415e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Medo\",\n              \"path\" : \"apps\\/medo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Medo Float Small\",\n              \"updatedAt\" : \"2022-03-27T16:04:55-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aayush \",\n                  \"url\" : \"https:\\/\\/github.com\\/Aayush9029\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-27T16:04:55-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new task with priority \",\n              \"filename\" : \"medo-float-large.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/medo.png\"\n              },\n              \"identifier\" : \"1b642fee34bc69c2bfffff0474590cda\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Medo\",\n              \"path\" : \"apps\\/medo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Medo Float Large\",\n              \"updatedAt\" : \"2022-03-27T16:04:55-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aayush \",\n                  \"url\" : \"https:\\/\\/github.com\\/Aayush9029\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-27T16:04:55-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new task\",\n              \"filename\" : \"add-task.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/medo.png\"\n              },\n              \"identifier\" : \"964abdac20ce59cf52a6d150569ed68c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Medo\",\n              \"path\" : \"apps\\/medo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Task\",\n              \"updatedAt\" : \"2022-03-27T16:04:55-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Aayush \",\n                  \"url\" : \"https:\\/\\/github.com\\/Aayush9029\"\n                }\n              ],\n              \"createdAt\" : \"2022-03-27T16:04:55-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new task with priority \",\n              \"filename\" : \"medo-float.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/medo.png\"\n              },\n              \"identifier\" : \"d17151bc9fa155a91dd7a260bf330279\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Medo\",\n              \"path\" : \"apps\\/medo\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Medo Float\",\n              \"updatedAt\" : \"2022-03-27T16:04:55-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Agenda\",\n          \"path\" : \"agenda\",\n          \"readme\" : \"apps\\/agenda\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Ellis\",\n                  \"url\" : \"https:\\/\\/github.com\\/mtellis2\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-26T15:52:43-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens Agenda - Today Overview\",\n              \"filename\" : \"agenda-today.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/agenda.png\"\n              },\n              \"identifier\" : \"7f50aaf0597b597069fb354a58a4573b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Agenda\",\n              \"path\" : \"apps\\/agenda\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Agenda Today Overview\",\n              \"updatedAt\" : \"2021-06-26T15:52:43-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Ellis\",\n                  \"url\" : \"https:\\/\\/github.com\\/mtellis2\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-26T15:52:43-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens Agenda - On the Agenda Overview\",\n              \"filename\" : \"agenda-on-the-agenda.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/agenda.png\"\n              },\n              \"identifier\" : \"8e019b6506bee0ffad51b2a625ed0d0b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Agenda\",\n              \"path\" : \"apps\\/agenda\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"On the Agenda Overview\",\n              \"updatedAt\" : \"2021-06-26T15:52:43-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Ellis\",\n                  \"url\" : \"https:\\/\\/github.com\\/mtellis2\"\n                }\n              ],\n              \"createdAt\" : \"2021-06-26T15:52:43-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Creates New Note and adds it to On the Agenda\",\n              \"filename\" : \"agenda-new-note.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/agenda.png\"\n              },\n              \"identifier\" : \"9b7ee4e0b61fcd48feeb8280ac0adbdf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Agenda\",\n              \"path\" : \"apps\\/agenda\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create New On the Agenda Note\",\n              \"updatedAt\" : \"2021-06-26T15:52:43-04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Sip\",\n          \"path\" : \"sip\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sip\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/sip_app\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T18:54:05-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \" Add a color to your Sip history.\",\n              \"filename\" : \"sip-add-hex-color.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/sip.png\"\n              },\n              \"identifier\" : \"1464e6600c3226f74b04dfa0dd946eac\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sip\",\n              \"path\" : \"apps\\/sip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \" Add Color to History\",\n              \"updatedAt\" : \"2021-05-28T10:43:11+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sip\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/sip_app\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T18:54:05-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Sip Contrast Checker.\",\n              \"filename\" : \"sip-open-check-contrast.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/sip.png\"\n              },\n              \"identifier\" : \"3c16dd65bb4f638b006b4e71787ff835\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sip\",\n              \"path\" : \"apps\\/sip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Contrast Checker\",\n              \"updatedAt\" : \"2021-05-28T10:43:11+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sip\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/sip_app\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T18:54:05-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pick a color value from your screen.\",\n              \"filename\" : \"sip-show-picker.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/sip.png\"\n              },\n              \"identifier\" : \"e0a9a42ede865f3c4b41b8212b7abf47\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sip\",\n              \"path\" : \"apps\\/sip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Color Picker\",\n              \"updatedAt\" : \"2021-05-28T10:43:11+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sip\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/sip_app\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-09T18:54:05-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Sip Contrast Checker.\",\n              \"filename\" : \"sip-check-contrast-hex.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/sip.png\"\n              },\n              \"identifier\" : \"23c64d597f80a9cc2b19cc5e5ed8c27d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sip\",\n              \"path\" : \"apps\\/sip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Check Contrast\",\n              \"updatedAt\" : \"2021-05-28T10:43:11+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Obsidian\",\n          \"path\" : \"obsidian\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Yiyao Wei\",\n                  \"url\" : \"https:\\/\\/github.com\\/HotThoughts\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-18T15:40:05+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new note\",\n              \"filename\" : \"obsidian-create-note.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/obsidian.png\"\n              },\n              \"identifier\" : \"5e5d144d98524911ae3b2198de181c01\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Obsidian\",\n              \"path\" : \"apps\\/obsidian\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Note\",\n              \"updatedAt\" : \"2021-07-19T22:03:48+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Yiyao Wei\",\n                  \"url\" : \"https:\\/\\/github.com\\/HotThoughts\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-18T15:40:05+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search Obsidian Vault\",\n              \"filename\" : \"obsidian-search-vault.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/obsidian.png\"\n              },\n              \"identifier\" : \"220bea9681acc6640802b8cb8b0ee55d\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Obsidian\",\n              \"path\" : \"apps\\/obsidian\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search in Vault\",\n              \"updatedAt\" : \"2021-07-19T22:03:48+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Things\",\n          \"path\" : \"things\",\n          \"readme\" : \"apps\\/things\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Things\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/culturedcode\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-03T19:17:44Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get an overview of your completed tasks for today.\",\n              \"filename\" : \"things-today.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/things.png\"\n              },\n              \"identifier\" : \"f5c008fbbafb56d3dd35483b209357f5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Things\",\n              \"path\" : \"apps\\/things\\/\",\n              \"refreshTime\" : \"1m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Today\",\n              \"updatedAt\" : \"2021-03-03T19:17:44Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Things\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/culturedcode\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-03T19:17:44Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search To-Dos with a query.\",\n              \"filename\" : \"things-search-to-dos.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/things.png\"\n              },\n              \"identifier\" : \"81182c169dbbf72ba9dfbbfea713275b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Things\",\n              \"path\" : \"apps\\/things\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search To-Dos\",\n              \"updatedAt\" : \"2021-03-03T19:17:44Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Things\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/culturedcode\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-03T19:17:44Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new To-Do with title and optional deadline.\",\n              \"filename\" : \"things-create-todo.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/things.png\"\n              },\n              \"identifier\" : \"f5ae3372a366a985c4a630f8f3412f83\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Things\",\n              \"path\" : \"apps\\/things\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create To-Do\",\n              \"updatedAt\" : \"2021-08-09T22:29:37+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Things\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/culturedcode\\/\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-03T19:17:44Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show your current To-Do to stay focused.\",\n              \"filename\" : \"things-current-todo.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/things.png\"\n              },\n              \"identifier\" : \"7a61aa9d34f92172b970cf9ff88113af\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Things\",\n              \"path\" : \"apps\\/things\\/\",\n              \"refreshTime\" : \"1m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Current To-Do\",\n              \"updatedAt\" : \"2021-03-03T19:17:44Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Chatgpt\",\n          \"path\" : \"chatgpt\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"gintonyc\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/gintonyc\"\n                }\n              ],\n              \"createdAt\" : \"2023-06-05T12:05:06+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open chatgpt in safari\",\n              \"filename\" : \"chatgpt-open-safari.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/chatgpt.png\"\n              },\n              \"identifier\" : \"9dd095ddbac7bc040b2af63d1532a3d1\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Chatgpt Util\",\n              \"path\" : \"apps\\/chatgpt\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"chatgpt\",\n              \"updatedAt\" : \"2023-06-05T07:04:09Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Trello\",\n          \"path\" : \"trello\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Michael Francis\",\n                  \"url\" : \"https:\\/\\/github.com\\/mikefrancis\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-12T08:49:15+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new Trello card\",\n              \"filename\" : \"create-trello-card.template.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/logo.png\"\n              },\n              \"identifier\" : \"0ab076acf65d71d43777520db336ca41\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Trello\",\n              \"path\" : \"apps\\/trello\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Card\",\n              \"updatedAt\" : \"2021-08-12T07:51:38Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"MenubarX\",\n          \"path\" : \"menubarx\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Clu Soh\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/designedbyclu\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-14T15:34:34+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open Pasteboard link in MenubarX\",\n              \"filename\" : \"open-in-menubarx.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/menubarx_logo.png\"\n              },\n              \"identifier\" : \"d919503ba27fcc13e43995035a1a51e2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"MenubarX\",\n              \"path\" : \"apps\\/menubarx\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open in MenubarX\",\n              \"updatedAt\" : \"2022-06-14T15:34:34+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Clu Soh\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/designedbyclu\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-14T15:34:34+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open X Tab in your menubar\",\n              \"filename\" : \"open-tab-in-menubar.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/menubarx_logo.png\"\n              },\n              \"identifier\" : \"cc7255205230e541123c8c720f81d511\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"MenubarX\",\n              \"path\" : \"apps\\/menubarx\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open Tabs\",\n              \"updatedAt\" : \"2022-06-14T15:34:34+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Clu Soh\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/designedbyclu\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-14T15:34:34+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Close last viewed tab in MenubarX\",\n              \"filename\" : \"close-last-menubarx-tab.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/menubarx_logo.png\"\n              },\n              \"identifier\" : \"48706938160df7f4d61a274a752dea5b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"MenubarX\",\n              \"path\" : \"apps\\/menubarx\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Close Last Tab\",\n              \"updatedAt\" : \"2022-06-14T15:34:34+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Viscosity\",\n          \"path\" : \"viscosity\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito (credits Achille Lacoin https:\\/\\/github.com\\/pomdtr)\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-23T21:40:02+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect all connected VPN configurations.\",\n              \"filename\" : \"viscosity-disconnect-all.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/viscosity.png\"\n              },\n              \"identifier\" : \"e271e6ed237d2a3fb9c8a401ff15503e\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Viscosity\",\n              \"path\" : \"apps\\/viscosity\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Viscosity: Disconnect All\",\n              \"updatedAt\" : \"2021-03-23T21:40:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito (credits Achille Lacoin https:\\/\\/github.com\\/pomdtr)\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-23T21:40:02+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect a VPN viscosity configuration.\",\n              \"filename\" : \"viscosity-connect.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/viscosity.png\"\n              },\n              \"identifier\" : \"aff632e02a4d4991a02dcb2e998b5598\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Viscosity\",\n              \"path\" : \"apps\\/viscosity\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Viscosity: Connect\",\n              \"updatedAt\" : \"2021-03-23T21:40:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito (credits Achille Lacoin https:\\/\\/github.com\\/pomdtr)\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Disconnect a VPN configuration.\",\n              \"filename\" : \"viscosity-disconnect.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/viscosity.png\"\n              },\n              \"identifier\" : \"3026d9f845bb1212453542c8faac0c99\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Viscosity\",\n              \"path\" : \"apps\\/viscosity\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Viscosity: Disconnect\",\n              \"updatedAt\" : \"2021-03-23T21:40:02+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Luigi Cardito (credits Achille Lacoin https:\\/\\/github.com\\/pomdtr)\",\n                  \"url\" : \"https:\\/\\/github.com\\/lcardito\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-14T17:37:20+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Connect all unconnected VPN configurations.\",\n              \"filename\" : \"viscosity-connect-all.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/viscosity.png\"\n              },\n              \"identifier\" : \"71345f2d9ab8ad5b476cd4adeff8e1e7\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Viscosity\",\n              \"path\" : \"apps\\/viscosity\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Viscosity: Connect All\",\n              \"updatedAt\" : \"2021-03-23T21:40:02+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"ExpressVPN\",\n          \"path\" : \"expressvpn\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Amir Hossein SamadiPour\",\n                  \"url\" : \"https:\\/\\/github.com\\/SamadiPour\"\n                }\n              ],\n              \"createdAt\" : \"2022-07-22T18:26:50+04:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"expressvpn-reconnect.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/expressvpn_logo.svg\"\n              },\n              \"identifier\" : \"3bada318c2097f51fcbec7513b5ecaa6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"ExpressVPN\",\n              \"path\" : \"apps\\/expressvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Reconnect\",\n              \"updatedAt\" : \"2022-07-22T18:26:50+04:30\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Amir Hossein SamadiPour\",\n                  \"url\" : \"https:\\/\\/github.com\\/SamadiPour\"\n                }\n              ],\n              \"createdAt\" : \"2022-07-22T18:26:50+04:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"expressvpn-disconnect.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/expressvpn_logo.svg\"\n              },\n              \"identifier\" : \"f8d7cbf3a379d469dd987f032de1656c\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"ExpressVPN\",\n              \"path\" : \"apps\\/expressvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disconnect\",\n              \"updatedAt\" : \"2022-07-22T18:26:50+04:30\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Amir Hossein SamadiPour\",\n                  \"url\" : \"https:\\/\\/github.com\\/SamadiPour\"\n                }\n              ],\n              \"createdAt\" : \"2022-07-22T18:26:50+04:30\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"expressvpn-connect.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/expressvpn_logo.svg\"\n              },\n              \"identifier\" : \"3c0176e3dc0c58d220cd3f9fdb90e4c5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"ExpressVPN\",\n              \"path\" : \"apps\\/expressvpn\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Connect\",\n              \"updatedAt\" : \"2022-07-22T18:26:50+04:30\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Quip\",\n          \"path\" : \"quip\",\n          \"readme\" : \"apps\\/quip\\/README.org\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"zzamboni\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/zzamboni\"\n                }\n              ],\n              \"createdAt\" : \"2023-07-12T10:50:40+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Configure your Quip API token and other defaults in quip_config.ini\",\n              \"filename\" : \"quip-new.template.py\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"\\/Applications\\/Quip.app\\/Contents\\/Resources\\/AppIcon.icns\"\n              },\n              \"identifier\" : \"d8fa7bc18200bc8e62536c5dd1c5a6f9\",\n              \"isTemplate\" : true,\n              \"language\" : \"python\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Quip utilities\",\n              \"path\" : \"apps\\/quip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"{{commandtitle}}\",\n              \"updatedAt\" : \"2023-07-12T10:50:40+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"diego_zamboni\",\n                  \"url\" : \"https:\\/\\/raycast.com\\/diego_zamboni\"\n                }\n              ],\n              \"createdAt\" : \"2023-07-12T10:50:40+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create script commands for creating Quip documents, based on the configuration in quip_config.ini.\",\n              \"filename\" : \"set-up-quip-commands.py\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"\\/Applications\\/Quip.app\\/Contents\\/Resources\\/AppIcon.icns\"\n              },\n              \"identifier\" : \"fdc5f3fc9cc957f068cd9ec6a7c031b6\",\n              \"isTemplate\" : false,\n              \"language\" : \"python\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Quip utilities\",\n              \"path\" : \"apps\\/quip\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set up Quip commands\",\n              \"updatedAt\" : \"2023-07-12T10:50:40+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Hyper\",\n          \"path\" : \"hyper\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Eliot Hertenstein\",\n                  \"url\" : \"https:\\/\\/github.com\\/eIiot\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-18T02:19:33-08:00\",\n              \"currentDirectoryPath\" : \"~\",\n              \"description\" : \"Run a terminal using Hyper\",\n              \"filename\" : \"hyper-run-shell-command.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/hyper.png\"\n              },\n              \"identifier\" : \"49608e0b2c2375fec1a6f173155333af\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Hyper\",\n              \"path\" : \"apps\\/hyper\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Run Shell Command\",\n              \"updatedAt\" : \"2022-02-18T19:08:51-08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Reminders\",\n          \"path\" : \"reminders\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Andrei Nedelcu\",\n                  \"url\" : \"https:\\/\\/dinosaurgame.net\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-07T04:07:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a new reminder.\",\n              \"filename\" : \"reminders-create-reminder.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/reminders.png\"\n              },\n              \"identifier\" : \"75a45615fac6beb2797006d141e954b6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Create Reminder\",\n              \"path\" : \"apps\\/reminders\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Add Reminder\",\n              \"updatedAt\" : \"2022-02-07T02:10:02Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Devutils\",\n          \"path\" : \"devutils\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert your current clipboard from CSV to JSON\",\n              \"filename\" : \"csv2json.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"96351002cef0c040a5c35e6f2e04a7a0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"CSV to JSON\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Escape (or unescape) the HTML entities your current clipboard string\",\n              \"filename\" : \"htmlencode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"7b2949bdb3461fae767de2e8a2686153\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"HTML Entity Encode\\/Decode\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as XML\",\n              \"filename\" : \"xmlformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"c1fd8764b8bb26e465a7a48dc3d55b89\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"XML Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert the HTML string in clipboard to JSX\",\n              \"filename\" : \"html2jsx.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"5d48ac8248afc31799260e5ee0af87b1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"HTML to JSX\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Escape (or unescape) backslashes in your current clipboard string\",\n              \"filename\" : \"backslash.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"1fe92d44c297f36a443e1741eb727317\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Backslash Escape\\/Unescape\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get some randomly generated lorem ipsum strings\",\n              \"filename\" : \"loremipsum.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"34c135d0d015486dc28c4a1789dd9c5e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lorem Ipsum Generator\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decode and verify the current JWT token in your clipboard\",\n              \"filename\" : \"jwt.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"03b13d316e4eaf0c2cf02eec27ad6d49\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"JWT Debugger\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as ERB\",\n              \"filename\" : \"erbformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"c0862014d90bee6995ecfbf61b5468d2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"ERB Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Format the SQL string currently in your clipboard\",\n              \"filename\" : \"sqlformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"9ec928b585e7c1b2de1f2e13cb3fab26\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"SQL Formatter\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Inspect your current clipboard string (length, words count, unicode, etc.)\",\n              \"filename\" : \"stringinspect.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"3da94b4e417bf5ff6e44b67869a7d612\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"String Inspector\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decode the Base64 string in clipboard (if it’s decodable)\",\n              \"filename\" : \"base64encode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"65ca896b0c3fb60ad6f189616c8c7524\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Base64 String Encode\\/Decode\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert your current clipboard from JSON to CSV\",\n              \"filename\" : \"json2csv.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"77e0bc4cd51d4d5cd1560c0c2b420214\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"JSON to CSV\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as CSS\",\n              \"filename\" : \"cssformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"55e6391c0919e4ce410977d7791d75f3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"CSS Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert your current clipboard from JSON to YAML\",\n              \"filename\" : \"json2yaml.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"7fda6adb9ccc8f154619301140faa03c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"JSON to YAML\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Calculate the hash of your current clipboard string\",\n              \"filename\" : \"hashing.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"660dc6a522fbb4c1d25fdd5c4bc43503\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Hash Generator\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Parse the cron job expression in clipboard (if it’s a valid cron expression)\",\n              \"filename\" : \"cronparser.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"e92d8c824922446f81d842b8a75abeea\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Cron Job Parser\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decode the current URL string in your clipboard (if any)\",\n              \"filename\" : \"urlencode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"4770cbb56d80eed7a9092dcb84442724\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"URL Encode\\/Decode\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decode the UUID in your clipboard (if any), or generate UUIDs\",\n              \"filename\" : \"uuidtool.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"64fd318687c1f6e5e92033e62fe3b8a2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"UUID\\/ULID Generate\\/Decode\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Decode the Base64 string in clipboard to an image (if it’s decodable)\",\n              \"filename\" : \"base64image.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"6f08b5175968433d58c9b9565fa8e3b5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Base64 Image Encode\\/Decode\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as LESS\",\n              \"filename\" : \"lessformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"3a70a1e6d6df5384d2ca515a3c31ffb2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"LESS Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert your current clipboard from YAML to JSON\",\n              \"filename\" : \"yaml2json.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"302fe47b8006d28fe4e9693471193e00\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"YAML to JSON\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Format the JSON string currently in your clipboard (if it’s a valid JSON)\",\n              \"filename\" : \"jsonformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"2ff9ca437fae33af3b7e744a05842fe2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"JSON Format\\/Validate\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show a HTML preview of your current clipboard string\",\n              \"filename\" : \"htmlpreview.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"ea972077aa252a09b9755043ddb3ee56\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"HTML Preview\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert a string in clipboard into various naming conventions\",\n              \"filename\" : \"stringcaseconverter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"da658bbfc3056122cfa25655191ba46e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"String Case Converter\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Test your regular expression with a string and inspect matches, groups, etc.\",\n              \"filename\" : \"regextester.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"6fdaca184e9aaf35ed9935ca7765c887\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"RegExp Tester\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Preview the markdown string currently in your clipboard\",\n              \"filename\" : \"markdownpreview.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"4e9b6a8f59213b7740cf8ea0681d7489\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Markdown Preview\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as SCSS\",\n              \"filename\" : \"scssformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"9e6ab71f9cf6a8621606b3934345e1ef\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"SCSS Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Compare two texts and find diff (per characters, words, lines, etc.)\",\n              \"filename\" : \"textdiff.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"59f6ce6bc50e81065dbe667b82c1771f\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Text Diff Checker\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as HTML\",\n              \"filename\" : \"htmlformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"6c594f59f7c3fa76ddbb219689014e61\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"HTML Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Convert numbers between bases (oct, hex, binary, etc.)\",\n              \"filename\" : \"numberbase.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"b49f9f56ffad1e4e2127df82116d0f3d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Number Base Converter\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Parse the URL string currently in your clipboard\",\n              \"filename\" : \"querystringparser.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"995abb11b07f6e5776a94c91448cc54b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"URL Parser\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Generate a QR code from your current clipboard string\",\n              \"filename\" : \"qrcode.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"9e5235df4808af09a9c965f83873718d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"QR Code Reader\\/Generator\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Beautify or minify your current clipboard as JavaScript\",\n              \"filename\" : \"jsformatter.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"9d6c09efd9fa58b456df731a9758eb3e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"JS Beautify\\/Minify\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"DevUtils.app\",\n                  \"url\" : \"https:\\/\\/devutils.app\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-23T16:30:27+07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Parse and display UNIX the timestamp string currently in your clipboard\",\n              \"filename\" : \"unixtime.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/devutils.png\"\n              },\n              \"identifier\" : \"b54dbb6855fc539be668f972f6ad4de0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"DevUtils.app\",\n              \"path\" : \"apps\\/devutils\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unix Time Converter\",\n              \"updatedAt\" : \"2022-01-23T16:30:27+07:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Espanso\",\n          \"path\" : \"espanso\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"https:\\/\\/github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T20:44:52-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"enable-espanso.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"e2ba4a2b364b245d6ce4402f7f2dc936\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Enable Espanso\",\n              \"updatedAt\" : \"2021-05-14T16:44:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Max Stoiber\",\n                  \"url\" : \"https:\\/\\/github.com\\/mxstbr\"\n                }\n              ],\n              \"createdAt\" : \"2021-04-30T10:29:47+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Add a text expansion to expanso\",\n              \"filename\" : \"espanso-create-expansion.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"8913cd83010b84c681d85d018013a800\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create Text Expansion\",\n              \"updatedAt\" : \"2021-05-11T20:46:55-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"https:\\/\\/github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T20:44:52-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"start-espanso.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"2465c28979527987108461aaa939717a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Espanso\",\n              \"updatedAt\" : \"2021-05-14T16:44:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"https:\\/\\/github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T20:44:52-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"disable-espanso.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"9a5666c27b2dd8eeb9b7f6e664019e13\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Disable Espanso\",\n              \"updatedAt\" : \"2021-05-14T16:44:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"https:\\/\\/github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T20:44:52-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"restart-espanso.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"483881356febc3e29f60c16e6675ffeb\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Restart Espanso\",\n              \"updatedAt\" : \"2021-05-14T16:44:53Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"es183923\",\n                  \"url\" : \"https:\\/\\/github.com\\/es183923\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-11T20:44:52-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"stop-espanso.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/espanso.png\"\n              },\n              \"identifier\" : \"50101f86c29a34ecdfc3fa2ea5d5109e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Espanso\",\n              \"path\" : \"apps\\/espanso\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Espanso\",\n              \"updatedAt\" : \"2021-05-14T16:44:53Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"SideNotes\",\n          \"path\" : \"sidenotes\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marcel Bochtler\",\n                  \"url\" : \"https:\\/\\/github.com\\/MarcelBochtler\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-07T06:29:59-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new note within the selected or the first SideNotes folder.\",\n              \"filename\" : \"sidenotes-create-note.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/sidenotes.png\"\n              },\n              \"identifier\" : \"053dffcafea188ea1d0f4789fefb085b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"SideNotes\",\n              \"path\" : \"apps\\/sidenotes\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"SideNotes create\",\n              \"updatedAt\" : \"2021-03-07T06:29:59-08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Sublime\",\n          \"path\" : \"sublime\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Rock Hu\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/0xRock\"\n                }\n              ],\n              \"createdAt\" : \"2022-05-27T10:22:01-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Open currently focused directory in Sublime\",\n              \"filename\" : \"open-with-sublime.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"https:\\/\\/cdn.worldvectorlogo.com\\/logos\\/sublime-text.svg\"\n              },\n              \"identifier\" : \"dbc6916febf1c2218e0cef9c4e3d5e96\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sublime\",\n              \"path\" : \"apps\\/sublime\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Open with Sublime\",\n              \"updatedAt\" : \"2022-05-27T18:41:22+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Session\",\n          \"path\" : \"session\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T10:46:13-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Starts a focus session in Session app with the previous intent and duration\",\n              \"filename\" : \"session-start-previous.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/session.png\"\n              },\n              \"identifier\" : \"6f4911496269d10725259483c0b9125b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Session\",\n              \"path\" : \"apps\\/session\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Previous Session\",\n              \"updatedAt\" : \"2021-03-29T10:46:13-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T10:46:13-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Finishes a focus session in Session app\",\n              \"filename\" : \"session-finish.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/session.png\"\n              },\n              \"identifier\" : \"1a0f03f376b59043abf161176414d158\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Session\",\n              \"path\" : \"apps\\/session\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Finish Session\",\n              \"updatedAt\" : \"2021-03-29T10:46:13-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T10:46:13-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Starts a focus session in Session app\",\n              \"filename\" : \"session-pause.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/session.png\"\n              },\n              \"identifier\" : \"2edff21d2006d1ae7559d4cf6173b845\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Session\",\n              \"path\" : \"apps\\/session\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause Session\",\n              \"updatedAt\" : \"2021-03-29T10:46:13-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T10:46:13-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Starts a focus session in Session app\",\n              \"filename\" : \"session-start-new.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/session.png\"\n              },\n              \"identifier\" : \"92ffe9f3858ffdbae4bcfa0a185feb7a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Session\",\n              \"path\" : \"apps\\/session\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Session\",\n              \"updatedAt\" : \"2021-03-29T10:46:13-07:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"James Lyons\",\n                  \"url\" : \"https:\\/\\/github.com\\/jamesjlyons\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T10:46:13-07:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Starts a focus session in Session app\",\n              \"filename\" : \"session-abandon.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/session.png\"\n              },\n              \"identifier\" : \"8faf6b45a243e039e253dddab88afad9\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Session\",\n              \"path\" : \"apps\\/session\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Abandon Session\",\n              \"updatedAt\" : \"2021-03-29T10:46:13-07:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Culture\",\n      \"path\" : \"culture\",\n      \"scriptCommands\" : [\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Muneeb Ajaz\",\n              \"url\" : \"https:\\/\\/github.com\\/mianmuneebajaz\"\n            }\n          ],\n          \"createdAt\" : \"2025-11-28T22:05:40+05:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Get the current and next prayer times for a specific city and country.\",\n          \"filename\" : \"prayer-summary.template.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕌\"\n          },\n          \"identifier\" : \"19dc8f6e68b90c17c70dd7ee3e05d5e6\",\n          \"isTemplate\" : true,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Culture\",\n          \"path\" : \"culture\\/\",\n          \"refreshTime\" : \"2m\",\n          \"schemaVersion\" : 1,\n          \"title\" : \"Prayer Summary\",\n          \"updatedAt\" : \"2025-11-28T17:06:38Z\"\n        },\n        {\n          \"authors\" : [\n            {\n              \"name\" : \"Emircan Erkul\",\n              \"url\" : \"https:\\/\\/emircanerkul.com\"\n            }\n          ],\n          \"createdAt\" : \"2022-11-17T12:22:40+03:00\",\n          \"currentDirectoryPath\" : null,\n          \"description\" : \"Prayer Times grabbed from the aladhan.com.\",\n          \"filename\" : \"prayer-times.sh\",\n          \"hasArguments\" : false,\n          \"icon\" : {\n            \"dark\" : null,\n            \"light\" : \"🕌\"\n          },\n          \"identifier\" : \"ebda5e51cd4760fb9dbce650e41a9142\",\n          \"isTemplate\" : false,\n          \"language\" : \"bash\",\n          \"mode\" : \"inline\",\n          \"needsConfirmation\" : null,\n          \"packageName\" : \"Culture\",\n          \"path\" : \"culture\\/\",\n          \"refreshTime\" : null,\n          \"schemaVersion\" : 1,\n          \"title\" : \"Prayer Times\",\n          \"updatedAt\" : \"2024-07-20T15:38:18+03:00\"\n        }\n      ]\n    },\n    {\n      \"name\" : \"Productivity\",\n      \"path\" : \"productivity\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Imgur\",\n          \"path\" : \"imgur\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fahim Faisal\",\n                  \"url\" : \"https:\\/\\/github.com\\/i3p9\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-19T04:36:52+06:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Upload your last screenshot to Imgur and copy the image link to clipboard\",\n              \"filename\" : \"imgur-upload-latest-screenshot.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"☁️\"\n              },\n              \"identifier\" : \"fb44bae955f942707a724e0c14063627\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Upload to Imgur\",\n              \"path\" : \"productivity\\/imgur\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Upload Latest Screenshot to Imgur\",\n              \"updatedAt\" : \"2022-11-13T01:47:18+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fahim Faisal\",\n                  \"url\" : \"https:\\/\\/github.com\\/i3p9\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-26T01:16:19+06:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Upload Image from your Clipboard and copy the image link to clipboard\",\n              \"filename\" : \"imgur-upload-clipboard-image.template.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📋\"\n              },\n              \"identifier\" : \"4041c74c3a091d708e0e58c159d5024e\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Uploads Copied Image or Image from Clipboard\",\n              \"path\" : \"productivity\\/imgur\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Clipboard to Imgur\",\n              \"updatedAt\" : \"2023-07-12T15:49:52+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Fahim Faisal\",\n                  \"url\" : \"https:\\/\\/github.com\\/i3p9\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-19T04:36:52+06:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Opens default screenshot interface and immediately uploads and copies link to clipboard\",\n              \"filename\" : \"screenshot-and-imgur.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📷\"\n              },\n              \"identifier\" : \"06f3fa5d901f894dba435781da31037d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Opens Screenshot Interface and Uploads\",\n              \"path\" : \"productivity\\/imgur\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Screenshot and Imgur\",\n              \"updatedAt\" : \"2022-11-13T01:47:18+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"tesseract\",\n          \"path\" : \"tesseract\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Diego Lopes\",\n                  \"url\" : \"https:\\/\\/github.com\\/Dihgg\"\n                }\n              ],\n              \"createdAt\" : \"2021-09-28T10:37:53-03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Tesseract OCR\",\n              \"filename\" : \"tesseract-ocr.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔍\"\n              },\n              \"identifier\" : \"25b6650479ec5f66c13955ef072ebf65\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"tesseract\",\n              \"path\" : \"productivity\\/tesseract\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"OCR Screenshot\",\n              \"updatedAt\" : \"2021-11-05T00:12:23+03:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Bitwarden\",\n          \"path\" : \"bitwarden\",\n          \"readme\" : \"productivity\\/bitwarden\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search all items in a Bitwarden vault, and copy the password of the first search result to the clipboard.\",\n              \"filename\" : \"copy-first-matching-password.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"72075d66d7c96563327670d572148a5c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Copy First Matching Password\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T13:44:44-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Delete a Bitwarden Send.\",\n              \"filename\" : \"delete-send.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"c379a38ce1c09e8d957bd3be837d9ebd\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : true,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Delete a Send\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Lock a Bitwarden session.\",\n              \"filename\" : \"lock.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"2a9be47e57277d4fa9cb8a226abd9b4e\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lock Session\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"View the content of a text-only Bitwarden Send.\",\n              \"filename\" : \"receive-text-send.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"f850482284a0f897ac026bb0ed8514d2\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Receive a Text Send\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Create a new text-only Bitwarden Send.\",\n              \"filename\" : \"create-text-send.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"ef085c701b79f8559894d964b6244742\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Create a Text Send\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search all items in a Bitwarden vault.\",\n              \"filename\" : \"search-vault-items.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"1e0fc8f792351eeff8d1f403cef716f5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search Vault Items\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Display the authentication and lock status of the user's Bitwarden session.\",\n              \"filename\" : \"status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"d86ee71986d686b7dfdeac1101e869ef\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : \"5m\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Bitwarden Status\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-29T13:44:44-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Edit an existing Bitwarden Send.\",\n              \"filename\" : \"edit-send.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"11b9241c955e4217f11a3e797189a3ab\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Edit a Send\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"List all Bitwarden text Sends created in the currently unlocked account.\",\n              \"filename\" : \"list-sends.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"10d61b623f51ab4e5a12cb1df29a16c0\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"fullOutput\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"List All Text Sends\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Unlock an authenticated Bitwarden session.\",\n              \"filename\" : \"unlock.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"0d6dbf49507170aa4af614cbb4b16613\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unlock Session\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Log out of Bitwarden.\",\n              \"filename\" : \"log-out.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"b0e4b9ddb57fdd18854bc8436273b550\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Log Out\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/int3rrupt\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search all items in a Bitwarden vault, and copy the TOTP of the first search result to the clipboard.\",\n              \"filename\" : \"copy-first-matching-totp.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"5ddedd2cc4ce0ce27ea9da0db895b05d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Copy First Matching TOTP\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Marcel Bochtler\",\n                  \"url\" : \"https:\\/\\/github.com\\/MarcelBochtler\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-03T21:02:13+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Log in to Bitwarden using an API key.\",\n              \"filename\" : \"log-in-apikey.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"837bd1e9a8fe1ed4fa905be4f9cbc492\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Log In\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Phil Salant\",\n                  \"url\" : \"https:\\/\\/github.com\\/PSalant726\"\n                }\n              ],\n              \"createdAt\" : \"2021-02-03T02:57:58-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Log in to Bitwarden.\",\n              \"filename\" : \"log-in.template.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/bitwarden.png\"\n              },\n              \"identifier\" : \"8bbdf715852f934a47421e7f13d67602\",\n              \"isTemplate\" : true,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Bitwarden\",\n              \"path\" : \"productivity\\/bitwarden\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Log In\",\n              \"updatedAt\" : \"2022-11-17T10:35:57+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"stopwatch\",\n          \"path\" : \"stopwatch\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-20T10:03:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop active stopwatch, copy total time\",\n              \"filename\" : \"stopwatch-stop.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏱\"\n              },\n              \"identifier\" : \"110dc9e3b77c64b836c60d3d594188fc\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"stopwatch\",\n              \"path\" : \"productivity\\/stopwatch\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Stopwatch\",\n              \"updatedAt\" : \"2021-07-22T02:04:44+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-20T10:03:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Status of active stopwatch\",\n              \"filename\" : \"stopwatch-progress.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏱\"\n              },\n              \"identifier\" : \"f6096eb20938dba1a3849e659fa2b2f1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"stopwatch\",\n              \"path\" : \"productivity\\/stopwatch\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Show Stopwatch Progress\",\n              \"updatedAt\" : \"2021-07-22T02:04:44+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Achille Lacoin\",\n                  \"url\" : \"https:\\/\\/github.com\\/pomdtr\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-20T10:03:49+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a stopwatch\",\n              \"filename\" : \"stopwatch-start.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏱\"\n              },\n              \"identifier\" : \"1568cbaa51ba27ed4145f76259db8858\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"stopwatch\",\n              \"path\" : \"productivity\\/stopwatch\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Stopwatch\",\n              \"updatedAt\" : \"2021-07-22T02:04:44+02:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Pomodoro\",\n          \"path\" : \"pomodoro\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T21:12:36+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop active Pomodoro timer\",\n              \"filename\" : \"pomodoro-stop-timer.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"57bc11aa3ebc78b95739a25d57f8fbbf\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pomodoro\",\n              \"path\" : \"productivity\\/pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop Timer\",\n              \"updatedAt\" : \"2021-07-19T21:29:39+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T21:12:36+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Start a Pomodoro timer\",\n              \"filename\" : \"pomodoro-start-timer.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"a1854deed46e0b0c83de7237488abd55\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pomodoro\",\n              \"path\" : \"productivity\\/pomodoro\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Start Timer\",\n              \"updatedAt\" : \"2021-07-19T21:29:39+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-07-19T21:12:36+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Status of a Pomodoro timer\",\n              \"filename\" : \"pomodoro-status.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🍅\"\n              },\n              \"identifier\" : \"8d7cb365a32acef7c7539511b0b4c130\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Pomodoro\",\n              \"path\" : \"productivity\\/pomodoro\\/\",\n              \"refreshTime\" : \"30s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Status\",\n              \"updatedAt\" : \"2021-07-19T21:12:36+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"QPDF\",\n          \"path\" : \"qpdf\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Nicklas Jakobsen\",\n                  \"url\" : \"https:\\/\\/github.com\\/nicklasjm\"\n                }\n              ],\n              \"createdAt\" : \"2025-11-28T18:07:29+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Compress selected PDF files. Note: This script requires 'qpdf' to be installed via Homebrew.\",\n              \"filename\" : \"compress-pdf-qpdf.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🗜️\"\n              },\n              \"identifier\" : \"ba848d41adad37a9407e0c61e56b545c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"QPDF\",\n              \"path\" : \"productivity\\/qpdf\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Compress PDF\",\n              \"updatedAt\" : \"2025-11-28T18:07:29+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"macOCR\",\n          \"path\" : \"macocr\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jakub Lanski\",\n                  \"url\" : \"https:\\/\\/github.com\\/jaklan\"\n                }\n              ],\n              \"createdAt\" : \"2021-11-10T11:40:57+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"macocr-run-ocr.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📸\"\n              },\n              \"identifier\" : \"90d13e130e8494fa8012db4823c580dd\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"macOCR\",\n              \"path\" : \"productivity\\/macocr\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Run OCR\",\n              \"updatedAt\" : \"2021-11-11T04:18:19+01:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Writing\",\n          \"path\" : \"writing\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Benny Wong\",\n                  \"url\" : \"https:\\/\\/bwong.net\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-29T12:34:13-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Counts the number of words of the text in the clipboard\",\n              \"filename\" : \"word-count.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🤖\"\n              },\n              \"identifier\" : \"4757d0ea5b9d6eedf37b64f283531315\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Writing\",\n              \"path\" : \"productivity\\/writing\\/\",\n              \"refreshTime\" : \"15s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Word Count\",\n              \"updatedAt\" : \"2022-10-31T10:14:18+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Alessandra Pereyra\",\n                  \"url\" : \"https:\\/\\/github.com\\/alessandrapereyra\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-04T19:45:53-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Directly use macOS Dictionary\",\n              \"filename\" : \"dictionary-lookup.swift\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"📖\"\n              },\n              \"identifier\" : \"be57af80902c33cee913774b6e58d678\",\n              \"isTemplate\" : false,\n              \"language\" : \"swift\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Writing\",\n              \"path\" : \"productivity\\/writing\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Dictionary Lookup\",\n              \"updatedAt\" : \"2022-10-31T10:14:18+01:00\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\" : \"Media\",\n      \"path\" : \"media\",\n      \"scriptCommands\" : [\n\n      ],\n      \"subGroups\" : [\n        {\n          \"name\" : \"Speaker Setup\",\n          \"path\" : \"speaker-setup\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Kailash Yellareddy\",\n                  \"url\" : \"https:\\/\\/github.com\\/kyellareddy\"\n                }\n              ],\n              \"createdAt\" : \"2024-01-09T01:17:34-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"speaker-setup.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔊\"\n              },\n              \"identifier\" : \"7920ccb4e58a80afd149f6ce81e8f185\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Speaker Setup\",\n              \"path\" : \"media\\/speaker-setup\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Speaker Setup\",\n              \"updatedAt\" : \"2024-04-07T23:23:52+04:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Apple Music\",\n          \"path\" : \"apple-music\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop Music.\",\n              \"filename\" : \"apple-music-stop.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"5f611223b0b8e4aac6f6a58b10eb18ec\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop\",\n              \"updatedAt\" : \"2020-11-28T12:26:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Juan I. Serra\",\n                  \"url\" : \"https:\\/\\/github.com\\/jiserra\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-10T11:21:09-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"apple-music-volume-up.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"c8f4c5a2218803961dcd04ac173cabe6\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Apple Music Volume Up\",\n              \"updatedAt\" : \"2022-01-10T11:21:09-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jordi Clement\",\n                  \"url\" : \"https:\\/\\/github.com\\/jordicl\"\n                }\n              ],\n              \"createdAt\" : \"2021-03-05T16:50:23+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Go to Artist page in the Apple Music App\",\n              \"filename\" : \"apple-music-go-to-artist-page.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"6304c471969765a50361ee95d2b1a013\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Go to Artist in Apple Music\",\n              \"updatedAt\" : \"2021-03-08T14:53:49+01:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle shuffle setting in Music.\",\n              \"filename\" : \"apple-music-shuffle.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"3c91d60443b3ddd0d18e9734d8fe6572\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Shuffle\",\n              \"updatedAt\" : \"2020-11-28T12:26:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggle repeat setting in Music.\",\n              \"filename\" : \"apple-music-repeat.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"c62c215553360ac8aa21353903f753a1\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Repeat\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Previous track in Music.\",\n              \"filename\" : \"apple-music-previous.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"b815ba6d731f3c2d103d91ea8e6b1763\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous Track\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause Music.\",\n              \"filename\" : \"apple-music-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"d76db4a3ed282224bf7e5af8a82c62ce\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2020-11-28T12:26:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Juan I. Serra\",\n                  \"url\" : \"https:\\/\\/github.com\\/jiserra\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-10T11:21:09-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"apple-music-volume-down.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"e976c6ae51adec3ce4530235790c6761\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Apple Music Volume Down\",\n              \"updatedAt\" : \"2022-01-10T11:21:09-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-10T16:16:07-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set volume in Music.\",\n              \"filename\" : \"apple-music-set-volume.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"0b9f2dc6c068d19f045b0d4a1a05870d\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Volume\",\n              \"updatedAt\" : \"2020-12-11T00:15:58Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play Music.\",\n              \"filename\" : \"apple-music-play.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"d5222ded53a633aa88805aa3f462f208\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play\",\n              \"updatedAt\" : \"2020-11-28T12:26:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"StevenRCE0\",\n                  \"url\" : \"https:\\/\\/github.com\\/StevenRCE0\"\n                }\n              ],\n              \"createdAt\" : \"2021-08-18T09:16:28+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Search using the native UI\",\n              \"filename\" : \"apple-music-search.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"8596be52df39001815a5ed2803155afc\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Apple Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Search\",\n              \"updatedAt\" : \"2021-12-20T20:53:03+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Next track in Music.\",\n              \"filename\" : \"apple-music-next.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"8611be488c5cc0e37d0c2e565ce23f68\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next Track\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T12:52:41Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show currently playing track in Music.\",\n              \"filename\" : \"apple-music-current-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"41db4193526a667ad73d8742fc72d7de\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : \"10s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Current Track\",\n              \"updatedAt\" : \"2021-01-21T12:38:38-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Bryan Schuetz\",\n                  \"url\" : \"https:\\/\\/github.com\\/bryanschuetz\"\n                }\n              ],\n              \"createdAt\" : \"2021-09-24T08:42:54-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Let the algorithm know how you feel about the currently playing track.\",\n              \"filename\" : \"apple-music-hate-current-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"f7d43db5dbd64ecab0104afe7dd4c5e1\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Apple Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Hate Current Track\",\n              \"updatedAt\" : \"2021-09-24T08:42:54-04:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Bryan Schuetz\",\n                  \"url\" : \"https:\\/\\/github.com\\/bryanschuetz\"\n                }\n              ],\n              \"createdAt\" : \"2021-09-24T08:42:54-04:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Let the algorithm know how you feel about the currently playing track.\",\n              \"filename\" : \"apple-music-love-current-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-music-logo.png\"\n              },\n              \"identifier\" : \"1f71dc54a2c61ca4ebede7924eaf73e8\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Apple Music\",\n              \"path\" : \"media\\/apple-music\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Love Current Track\",\n              \"updatedAt\" : \"2024-02-27T09:52:24-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Cmus\",\n          \"path\" : \"cmus\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles the shuffle option if cmus is running\",\n              \"filename\" : \"toggle-shuffle.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔀\"\n              },\n              \"identifier\" : \"bcd4e5cb33e09e0841cf483ecafaf53a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Shuffle\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Goes back a track if cmus is running\",\n              \"filename\" : \"previous-track.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏪\"\n              },\n              \"identifier\" : \"42ce25d5b673898cc98599ca064d2ff6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous Track\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles the play\\/pause state if cmus is running\",\n              \"filename\" : \"play-pause.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏯\"\n              },\n              \"identifier\" : \"c3a1b04149db8dfc9b1a23beed4ff6ea\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Play\\/Pause\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles the repeat option if cmus is running\",\n              \"filename\" : \"toggle-repeat.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"🔁\"\n              },\n              \"identifier\" : \"9c6d2889c9c1a87d976069e01e42611a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Repeat\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Goes forward a track if cmus is running\",\n              \"filename\" : \"next-track.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"⏩\"\n              },\n              \"identifier\" : \"28623c177a9fae398cef860f1d42cfca\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next Track\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"mmerle\",\n                  \"url\" : \"https:\\/\\/github.com\\/mmerle\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-25T03:49:04-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Shows info on the current track if cmus is running\",\n              \"filename\" : \"track-info.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"ℹ️\"\n              },\n              \"identifier\" : \"a59730f5b518bf0015017075092fcd55\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Cmus\",\n              \"path\" : \"media\\/cmus\\/\",\n              \"refreshTime\" : \"10s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Current Track\",\n              \"updatedAt\" : \"2020-11-25T03:49:04-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Endel\",\n          \"path\" : \"endel\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set focus mode at Endel \",\n              \"filename\" : \"endel-sleep.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"882873a4414a4785a11184e942127bae\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Sleep\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set relax mode at Endel \",\n              \"filename\" : \"endel-relax.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"4b091a5a2e460f0e65e66ff8ce57ff4d\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Relax\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Workout scenario at Endel \",\n              \"filename\" : \"endel-scenarios-workout.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"e12f2795c9fd7861d63892302fcce623\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Workout\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Deep Work scenario at Endel \",\n              \"filename\" : \"endel-scenarios-deepwork.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"e137539f2ad45ca56293ed3f849f82a3\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Deep Work\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set focus mode at Endel \",\n              \"filename\" : \"endel-focus.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"0d39ac92f6ee5586b718d24e095b9477\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Focus\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Yoga scenario at Endel \",\n              \"filename\" : \"endel-scenarios-yoga.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"7f208b21990d3049368276de95cef101\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Yoga\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set study mode at Endel \",\n              \"filename\" : \"endel-study.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"ce29578447010dd36480bd25ff785cef\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Study\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Read scenario at Endel \",\n              \"filename\" : \"endel-scenarios-read.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"1b2102711e0cbd6f4b249756ddb2bdf4\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Read\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Power Nap scenario at Endel \",\n              \"filename\" : \"endel-scenarios-powernap.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"1c78bc5186a9516d6ce228be1b9b188a\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Power Nap\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set AI lullaby mode at Endel \",\n              \"filename\" : \"endel-lullaby.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"74bec6706807ff93e3c8b524ab208bd6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lullaby\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Homework scenario at Endel \",\n              \"filename\" : \"endel-scenarios-homework.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"279f29dacf815dc3e32427a904d21443\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Homework\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Meditate scenario at Endel \",\n              \"filename\" : \"endel-scenarios-meditate.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"fd592987dee95de1ab1e746d66a296d1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Meditate\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set deep focus mode at Endel \",\n              \"filename\" : \"endel-deep-focus.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"879912a57f3ee1fc9c177f5687710e68\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Deep Focus\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Self Care scenario at Endel \",\n              \"filename\" : \"endel-scenarios-selfcare.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"7395fcee323302f9ebf5131b6bf01bd1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Self Care\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set Alarm in Endel \",\n              \"filename\" : \"endel-alarm.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"3308542a1a6cfcabd9576c90af4d7ef1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Alarm\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set wiggly wisdom mode at Endel \",\n              \"filename\" : \"endel-wisdom.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"63f5ba97d67a53656d14772b71d1d81c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Wiggly Wisdom\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Run Unwind scenario at Endel \",\n              \"filename\" : \"endel-scenarios-unwind.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"214e40e5bed0a266493139305e88d92b\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Unwind\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set recovery mode at Endel \",\n              \"filename\" : \"endel-recovery.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"9acba1d018ec7f24f3616937cfc303e5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Recovery\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Sergey Korobyin\",\n                  \"url\" : \"https:\\/\\/github.com\\/huangsemao\"\n                }\n              ],\n              \"createdAt\" : \"2021-10-06T15:53:54+03:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set Timer in Endel \",\n              \"filename\" : \"endel-timer.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/endel.png\"\n              },\n              \"identifier\" : \"7b92a6f72056f8a2e67e96151c57a6c6\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : false,\n              \"packageName\" : \"Endel\",\n              \"path\" : \"media\\/endel\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Timer\",\n              \"updatedAt\" : \"2021-10-06T15:53:54+03:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Spotify\",\n          \"path\" : \"spotify\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T12:56:51+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Skips to the next track in Spotify.\",\n              \"filename\" : \"spotify-next-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"8c44f76642edf5e2d589761ea2760802\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next Track\",\n              \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T12:56:51+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Toggles play or pause of current track in Spotify.\",\n              \"filename\" : \"spotify-play-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"d12611a4f464cf6a5566a7163f1de3a0\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Play\\/Pause\",\n              \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Nichlas Wærnes Andersen\",\n                  \"url\" : \"https:\\/\\/twitter.com\\/nichlaswa\"\n                }\n              ],\n              \"createdAt\" : \"2021-05-27T12:22:24+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play ${commandName} on Spotify\",\n              \"filename\" : \"create-spotify-command.js\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \".\\/images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"4a0c3ae9f9dc6dd5d6e060f802ea486c\",\n              \"isTemplate\" : false,\n              \"language\" : \"node\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"${commandName}\",\n              \"updatedAt\" : \"2021-09-29T08:15:53+02:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jack LaFond\",\n                  \"url\" : \"https:\\/\\/github.com\\/jacc\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-19T12:24:17-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Get link to current Spotify playing song\",\n              \"filename\" : \"spotify-now-playing-url.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"26d699efd0fe0362dc9fd911a844e217\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Copy Current Playing Song URL\",\n              \"updatedAt\" : \"2020-11-27T11:56:35+03:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2021-01-26T20:54:37Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play playlist or track in Spotify.\",\n              \"filename\" : \"spotify-play-playlist.template.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"8e28e54269f27849b00b363c8a0271be\",\n              \"isTemplate\" : true,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play Track or Playlist\",\n              \"updatedAt\" : \"2021-01-26T20:55:11Z\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T12:56:51+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Plays current track in Spotify.\",\n              \"filename\" : \"spotify-play.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"ce1534fc1817423b44a814c15f9c5da3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play\",\n              \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Thomas Paul Mann\",\n                  \"url\" : \"https:\\/\\/github.com\\/thomaspaulmann\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-30T12:52:41Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Show currently playing track in Spotify.\",\n              \"filename\" : \"spotify-current-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"2eb202dd044979361f9d435198280920\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"inline\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : \"30s\",\n              \"schemaVersion\" : 1,\n              \"title\" : \"Current Track\",\n              \"updatedAt\" : \"2020-11-30T12:52:41Z\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T12:56:51+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Skips to the previous track in Spotify.\",\n              \"filename\" : \"spotify-previous-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"ecba3dd8e10f26c95ab053667087a7e4\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous Track\",\n              \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n            },\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2020-09-30T12:56:01+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause current track in Spotify.\",\n              \"filename\" : \"spotify-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/spotify-logo.png\"\n              },\n              \"identifier\" : \"771e99988a2f4107d87c5bea5f5b6ba8\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Spotify\",\n              \"path\" : \"media\\/spotify\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2020-12-08T15:56:35Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"foobar2000\",\n          \"path\" : \"foobar2000\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jing Li\",\n                  \"url\" : \"https:\\/\\/github.com\\/lixeon\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-03T15:00:35+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Shortcuts to next foobar2000 for Mac v2.3.0\",\n              \"filename\" : \"foobar2000-next.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/foobar2000.png\"\n              },\n              \"identifier\" : \"37d028897c09ceb93626ab043cb05849\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"foobar2000\",\n              \"path\" : \"media\\/foobar2000\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next foobar2000\",\n              \"updatedAt\" : \"2022-06-03T15:00:35+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jing Li\",\n                  \"url\" : \"https:\\/\\/github.com\\/lixeon\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-03T15:00:35+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Shortcuts to pause foobar2000 for Mac v2.3.0\",\n              \"filename\" : \"foobar2000-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/foobar2000.png\"\n              },\n              \"identifier\" : \"9628f178c067958b737c469c1cda07bf\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"foobar2000\",\n              \"path\" : \"media\\/foobar2000\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause foobar2000\",\n              \"updatedAt\" : \"2022-06-03T15:00:35+08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Jing Li\",\n                  \"url\" : \"https:\\/\\/github.com\\/lixeon\"\n                }\n              ],\n              \"createdAt\" : \"2022-06-03T15:00:35+08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Shortcuts to Previous foobar2000 for Mac v2.3.0\",\n              \"filename\" : \"foobar2000-pervious.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/foobar2000.png\"\n              },\n              \"identifier\" : \"849beafb523bee8e7e82e39dfd8113d3\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"foobar2000\",\n              \"path\" : \"media\\/foobar2000\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous foobar2000\",\n              \"updatedAt\" : \"2022-06-03T15:00:35+08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Lowfi\",\n          \"path\" : \"lowfi\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : null,\n              \"createdAt\" : \"2024-11-24T04:45:52+01:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : null,\n              \"filename\" : \"lowfi.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : null,\n              \"identifier\" : \"afcc05d7a53abe6543c98f59f23bb7e5\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"compact\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Music\",\n              \"path\" : \"media\\/lowfi\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Lowfi\",\n              \"updatedAt\" : \"2024-12-11T20:08:12Z\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Apple Tv\",\n          \"path\" : \"apple-tv\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-10T16:16:07-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Set volume in TV.\",\n              \"filename\" : \"apple-tv-set-volume.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-tv-logo.png\"\n              },\n              \"identifier\" : \"b8b242b26206ce310623087bf68b63b4\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"TV\",\n              \"path\" : \"media\\/apple-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Volume\",\n              \"updatedAt\" : \"2020-12-11T00:16:06Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-12-10T16:16:07-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play specified movie from library in TV.\",\n              \"filename\" : \"apple-tv-play-movie.applescript\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-tv-logo.png\"\n              },\n              \"identifier\" : \"618183dcffc4c4c0474c2e4fb02098b5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"TV\",\n              \"path\" : \"media\\/apple-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play Movie\",\n              \"updatedAt\" : \"2020-12-11T23:18:29-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play TV.\",\n              \"filename\" : \"apple-tv-play.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-tv-logo.png\"\n              },\n              \"identifier\" : \"2de283dab829856b6f5d63a9841aef4b\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"TV\",\n              \"path\" : \"media\\/apple-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T10:09:28-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause TV.\",\n              \"filename\" : \"apple-tv-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-tv-logo.png\"\n              },\n              \"identifier\" : \"e98f6e9d7e98856405e28d1d28005846\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"TV\",\n              \"path\" : \"media\\/apple-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Caleb Stauffer\",\n                  \"url\" : \"https:\\/\\/github.com\\/crstauf\"\n                }\n              ],\n              \"createdAt\" : \"2020-11-07T14:59:48-05:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Stop TV.\",\n              \"filename\" : \"apple-tv-stop.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/apple-tv-logo.png\"\n              },\n              \"identifier\" : \"a57140b9ba8d6f6227d413c0d0caeca5\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"TV\",\n              \"path\" : \"media\\/apple-tv\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Stop\",\n              \"updatedAt\" : \"2020-11-28T13:47:03-05:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Sonos\",\n          \"path\" : \"sonos\",\n          \"readme\" : \"media\\/sonos\\/README.md\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"David Blackman\",\n                  \"url\" : \"https:\\/\\/github.com\\/whizziwig\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-02T10:24:52-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Sets volume of Sonos.\",\n              \"filename\" : \"sonos-volume-set.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/sonos-logo.png\"\n              },\n              \"identifier\" : \"085acb7129481eed8d148f6ca7b32404\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sonos\",\n              \"path\" : \"media\\/sonos\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Set Volume\",\n              \"updatedAt\" : \"2022-01-02T10:24:52-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"David Blackman\",\n                  \"url\" : \"https:\\/\\/github.com\\/whizziwig\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-02T10:24:52-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Raises volume of Sonos.\",\n              \"filename\" : \"sonos-volume-down.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/sonos-logo.png\"\n              },\n              \"identifier\" : \"a300f2524b7bd3e43710d309ff82eed1\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sonos\",\n              \"path\" : \"media\\/sonos\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Volume Down\",\n              \"updatedAt\" : \"2022-01-02T10:24:52-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"David Blackman\",\n                  \"url\" : \"https:\\/\\/github.com\\/whizziwig\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-02T10:24:52-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Raises volume of Sonos.\",\n              \"filename\" : \"sonos-volume-up.sh\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/sonos-logo.png\"\n              },\n              \"identifier\" : \"f0a7189878e31e38c10433ca9b69239c\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sonos\",\n              \"path\" : \"media\\/sonos\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Volume Up\",\n              \"updatedAt\" : \"2022-01-02T10:24:52-08:00\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"David Blackman\",\n                  \"url\" : \"https:\\/\\/github.com\\/whizziwig\"\n                }\n              ],\n              \"createdAt\" : \"2022-01-02T10:24:52-08:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play from Sonos favorites.\",\n              \"filename\" : \"sonos-play-favorite.sh\",\n              \"hasArguments\" : true,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/sonos-logo.png\"\n              },\n              \"identifier\" : \"da8d3ee4cc8a4c646953f6dc401b7383\",\n              \"isTemplate\" : false,\n              \"language\" : \"bash\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Sonos\",\n              \"path\" : \"media\\/sonos\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play Favorite\",\n              \"updatedAt\" : \"2022-01-02T10:24:52-08:00\"\n            }\n          ]\n        },\n        {\n          \"name\" : \"Tidal\",\n          \"path\" : \"tidal\",\n          \"scriptCommands\" : [\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Charles Harries\",\n                  \"url\" : \"https:\\/\\/github.com\\/charlesharries\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-01T13:37:24Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play the current track in Tidal.\",\n              \"filename\" : \"tidal-play.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tidal-logo.png\"\n              },\n              \"identifier\" : \"2ea9c044515312cbf87dac8fb5e0c92a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tidal Play\",\n              \"path\" : \"media\\/tidal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Play\",\n              \"updatedAt\" : \"2022-02-01T13:37:24Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Charles Harries\",\n                  \"url\" : \"https:\\/\\/github.com\\/charlesharries\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-01T13:37:24Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Skip to the next track in Tidal.\",\n              \"filename\" : \"tidal-next-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tidal-logo.png\"\n              },\n              \"identifier\" : \"aac66a366cec215c8594f02cf425bcb0\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tidal Next Track\",\n              \"path\" : \"media\\/tidal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Next Track\",\n              \"updatedAt\" : \"2022-02-01T14:38:40Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Charles Harries\",\n                  \"url\" : \"https:\\/\\/github.com\\/charlesharries\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-01T13:37:24Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Pause the current track in Tidal.\",\n              \"filename\" : \"tidal-pause.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tidal-logo.png\"\n              },\n              \"identifier\" : \"58a1d13baec2c61c0a7ee815126b4fd9\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tidal Pause\",\n              \"path\" : \"media\\/tidal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Pause\",\n              \"updatedAt\" : \"2022-02-01T13:37:24Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Charles Harries\",\n                  \"url\" : \"https:\\/\\/github.com\\/charlesharries\"\n                }\n              ],\n              \"createdAt\" : \"2022-02-01T13:37:24Z\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Skip back to the previous track in Tidal.\",\n              \"filename\" : \"tidal-previous-track.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tidal-logo.png\"\n              },\n              \"identifier\" : \"2a30f2daec4a4df68c4f0dae82c0e6ba\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tidal Previous Track\",\n              \"path\" : \"media\\/tidal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Previous Track\",\n              \"updatedAt\" : \"2022-02-01T14:38:40Z\"\n            },\n            {\n              \"authors\" : [\n                {\n                  \"name\" : \"Cebrail AKTAS\",\n                  \"url\" : \"https:\\/\\/github.com\\/AktasC\"\n                }\n              ],\n              \"createdAt\" : \"2022-09-12T17:06:01+02:00\",\n              \"currentDirectoryPath\" : null,\n              \"description\" : \"Play\\/Pause Tidal\",\n              \"filename\" : \"tidal.applescript\",\n              \"hasArguments\" : false,\n              \"icon\" : {\n                \"dark\" : null,\n                \"light\" : \"images\\/tidal-logo.png\"\n              },\n              \"identifier\" : \"ee85b0d540c79e75859c0753aadee02a\",\n              \"isTemplate\" : false,\n              \"language\" : \"applescript\",\n              \"mode\" : \"silent\",\n              \"needsConfirmation\" : null,\n              \"packageName\" : \"Tidal\",\n              \"path\" : \"media\\/tidal\\/\",\n              \"refreshTime\" : null,\n              \"schemaVersion\" : 1,\n              \"title\" : \"Toggle Play\\/Pause\",\n              \"updatedAt\" : \"2022-09-13T08:16:43Z\"\n            }\n          ]\n        }\n      ]\n    }\n  ],\n  \"languages\" : [\n    {\n      \"displayName\" : \"Ruby\",\n      \"icon\" : \"icon-ruby.png\",\n      \"name\" : \"ruby\"\n    },\n    {\n      \"displayName\" : \"Bash\",\n      \"icon\" : \"icon-bash.png\",\n      \"name\" : \"bash\"\n    },\n    {\n      \"displayName\" : \"AppleScript\",\n      \"icon\" : \"icon-applescript.png\",\n      \"name\" : \"applescript\"\n    },\n    {\n      \"displayName\" : \"Node\",\n      \"icon\" : \"icon-nodejs.png\",\n      \"name\" : \"node\"\n    },\n    {\n      \"displayName\" : \"Swift\",\n      \"icon\" : \"icon-swift.png\",\n      \"name\" : \"swift\"\n    },\n    {\n      \"displayName\" : \"Python\",\n      \"icon\" : \"icon-python.png\",\n      \"name\" : \"python\"\n    }\n  ],\n  \"metadata\" : [\n\n  ],\n  \"totalScriptCommands\" : 849,\n  \"updatedAt\" : \"2025-11-28T17:08:40Z\"\n}"
  },
  {
    "path": "commands/home/elgato/elgato-key-light-decrease-brightness.template.rb",
    "content": "#!/usr/bin/env ruby\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Decrease Brightness\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/elgato.png\n# @raycast.packageName Elgato Key Light\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Decrease brightness of Elgato Key Light by 5%.\n\n\n# Configuration\n\nHOST=\"\"\nPORT=\"\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nuri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\nreq = Net::HTTP::Get.new(uri)\n\nres = Net::HTTP.start(uri.hostname, uri.port) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  result = JSON.parse(res.body)\n\n  first_light = result[\"lights\"].first()\n  if first_light.nil?\n    puts \"Failed parsing first light\"\n    exit(1)\n  end\n  \n  brightness = first_light[\"brightness\"]\n  brightness -= 5\n  brightness = brightness.clamp(0, 100)\n\n  uri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\n  req = Net::HTTP::Put.new(uri)\n  req.body = {\n    \"numberOfLights\": 1,\n    \"lights\": [\n      {\n        \"brightness\": brightness\n      }\n    ]\n  }.to_json\n\n  res = Net::HTTP.start(uri.hostname, uri.port) { |http|\n    http.request(req)\n  }\n\n  if res.code == \"200\"\n    puts \"Decreased brightness to #{brightness}%\"\n  else \n    puts \"Failed decreasing brightness\"\n    exit(1)\n  end\nelse \n  puts \"Failed loading lights\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/home/elgato/elgato-key-light-increase-brightness.template.rb",
    "content": "#!/usr/bin/env ruby\n\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Increase Brightness\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/elgato.png\n# @raycast.packageName Elgato Key Light\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Increase brightness of Elgato Key Light by 5%.\n\n\n# Configuration\n\nHOST=\"\"\nPORT=\"\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nuri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\nreq = Net::HTTP::Get.new(uri)\n\nres = Net::HTTP.start(uri.hostname, uri.port) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  result = JSON.parse(res.body)\n\n  first_light = result[\"lights\"].first()\n  if first_light.nil?\n    puts \"Failed parsing first light\"\n    exit(1)\n  end\n  \n  brightness = first_light[\"brightness\"]\n  brightness += 5\n  brightness = brightness.clamp(0, 100)\n\n  uri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\n  req = Net::HTTP::Put.new(uri)\n  req.body = {\n    \"numberOfLights\": 1,\n    \"lights\": [\n      {\n        \"brightness\": brightness\n      }\n    ]\n  }.to_json\n\n  res = Net::HTTP.start(uri.hostname, uri.port) { |http|\n    http.request(req)\n  }\n\n  if res.code == \"200\"\n    puts \"Increased brightness to #{brightness}%\"\n  else \n    puts \"Failed increasing brightness\"\n    exit(1)\n  end\nelse \n  puts \"Failed loading lights\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/home/elgato/elgato-key-light-turn-off.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Off\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/elgato.png\n# @raycast.packageName Elgato Key Light\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Turn off Elgato Key Light.\n\n# Configuration\n\nHOST=\"\"\nPORT=\"\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif HOST.empty? || PORT.empty?\n  puts \"No host or port provided\"\n  exit(1)\nend\n\nuri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\nreq = Net::HTTP::Put.new(uri)\nreq.body = {\n  \"numberOfLights\": 1,\n  \"lights\": [\n    {\n      \"on\": 0\n    }\n  ]\n}.to_json\n\nres = Net::HTTP.start(uri.hostname, uri.port) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  puts \"Turned off light\"\nelse \n  puts \"Failed turning off light\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/home/elgato/elgato-key-light-turn-on.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Parameters\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn On\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/elgato.png\n# @raycast.packageName Elgato Key Light\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Turn on Elgato Key Light.\n\n# Configuration\n\nHOST=\"\"\nPORT=\"\"\n\n\n# Main program\n\nrequire \"json\"\nrequire \"net/http\"\nrequire \"uri\"\n\nif HOST.empty? || PORT.empty?\n  puts \"No host or port provided\"\n  exit(1)\nend\n\nuri = URI(\"http://#{HOST}:#{PORT}/elgato/lights\")\nreq = Net::HTTP::Put.new(uri)\nreq.body = {\n  \"numberOfLights\": 1,\n  \"lights\": [\n    {\n      \"on\": 1\n    }\n  ]\n}.to_json\n\nres = Net::HTTP.start(uri.hostname, uri.port) { |http|\n  http.request(req)\n}\n\nif res.code == \"200\"\n  puts \"Turned on light\"\nelse \n  puts \"Failed turning on light\"\n  exit(1)\nend\n"
  },
  {
    "path": "commands/home/philips-hue/hue-bulb.template.mjs",
    "content": "#!/usr/bin/env zx\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Set Light Bulb\n// @raycast.mode silent\n// @raycast.packageName Philips Hue\n\n// Optional parameters:\n// @raycast.icon 💡\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"preset\", \"optional\": true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"value (hsb or brightness)\", \"optional\": true }\n// @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"bulb\", \"optional\": true }\n\n// Documentation:\n// @raycast.author Jono Hewitt\n// @raycast.authorURL https://github.com/jonohewitt\n// @raycast.description Set a specified or default individual color bulb to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a bulb on or off.\n\n// This script requires:\n\n// • A global install of zx. To install, run 'npm i -g zx' or 'yarn global add zx'.\n//   More info: https://github.com/google/zx\n// • Your Hue Bridge local IP address, e.g 192.168.1.2\n// • An authorized username, e.g 1028d66426293e821ecfd9ef1a0731df\n// • A default light bulb ID, e.g 5\n\n// Follow the steps here for the bridge IP and how to create a username:\n// https://developers.meethue.com/develop/get-started-2/\n\n// Then go to https://<bridge ip address>/api/<username>/lights to see the number ID associated with each bulb you've set up.\n// Assign one of these numbers to the defaultBulb variable below, then add each other bulb in the first section of the script.\n\n// The script uses comma separated HSB, a.k.a HSV, (Hue: 0-360, Saturation: 0-100, Brightness: 0-100) for inputting color values.\n// If only one number is provided, it is assumed to be brightness (0-100)\n// If neither a preset nor value are provided, the current 'on' state for the bulb is toggled\n\n// Remember to remove .template from the filename after customizing.\n\nconst hueBridgeIP = '<enter bridge ip here>' // e.g 192.168.1.2\nconst userID = '<enter username here>' // e.g 1028d66426293e821ecfd9ef1a0731df\nconst defaultBulb = '<enter default bulb id here>' // e.g 5\n\n// Necessary to prevent fetch logging to the console automatically\n$.verbose = false\n\nconst [presetInput, valueInput, bulbInput] = process.argv.slice(3)\nlet on, hue, sat, bri, bulbID, data\n\n// Fetch existing data for all bulbs\nconst prevBulbData = await fetch(\n  `http://${hueBridgeIP}/api/${userID}/lights/`,\n  { method: 'get' }\n).then(res => res.json())\n\nif (bulbInput) {\n  // If the bulbInput string matches a name assigned to one of the bulbs on the Hue bridge,\n  // the script will automatically use its ID instead of testing against the names in the switch statement\n  const matchedBulb = Object.entries(prevBulbData).find(\n    bulb => bulb[1].name.toLowerCase() === bulbInput.toLowerCase()\n  )\n  if (matchedBulb) bulbID = matchedBulb[0]\n  else {\n    // Assign bulb IDs to input strings here, some examples are included already\n    // The defaultBulb id assigned in the top config will be used if a bulb argument isn't provided\n    // The switch converts all inputs to lowercase, so you should only use lowercase for the case statements.\n    // That way, the Raycast input will be case insensitive.\n    switch (bulbInput.toLowerCase()) {\n      // Multiple inputs can be assigned to the same bulb by stacking case statements\n      case 'main':\n      case 'ceiling':\n        bulbID = 5\n        break\n      case 'lamp':\n      case 'desk':\n        bulbID = 4\n        break\n      // Add more presets with more case statements here\n      default:\n        console.error(`${bulbInput} isn't configured yet!`)\n        process.exit(1)\n    }\n  }\n} else bulbID = defaultBulb\n\nif (!prevBulbData[bulbID]) {\n  console.error(`Bulb ID: ${bulbID} wasn't found on your Hue bridge!`)\n  process.exit(1)\n}\n\n// Assign your presets here, some examples are included already\nif (presetInput) {\n  switch (presetInput.toLowerCase()) {\n    case 'on':\n      on = true\n      break\n    case 'off':\n      on = false\n      break\n    case 'sunset':\n      on = true\n      hue = 15\n      sat = 100\n      bri = 20\n      break\n    case 'bright':\n      on = true\n      hue = 45\n      sat = 25\n      bri = 100\n      break\n    // Add more presets with more case statements here\n    default:\n      console.error('Preset not found!')\n      process.exit(1)\n  }\n  // If there isn't any presetInput or valueInput, this condition toggles the bulb on or off\n  // Remove if you would rather receive a 'No data provided' error without any changes made\n} else if (!valueInput) on = !prevBulbData[bulbID].state.on\n\n// If a color input is provided, this section tests and assigns the values from it\n// This section doesn't require any further configuration\nif (valueInput) {\n  // Check for letters or hashtags in the input implying a HEX value\n  const hexRegex = /[a-zA-Z]|#/\n  if (hexRegex.test(valueInput)) {\n    console.error(\"HEX values aren't supported!\")\n    process.exit(1)\n  }\n  // Validate the input format\n  const formatRegex =\n    /^\\d+\\.?\\d*\\W?$|^\\d+\\.?\\d*\\W?,\\s?\\d+\\.?\\d*\\W?,\\s?\\d+\\.?\\d*\\W?$/\n  if (!formatRegex.test(valueInput)) {\n    console.error(\"HSB or brightness input isn't formatted correctly!\")\n    process.exit(1)\n  }\n\n  // Split the comma separated HSB string into an array,\n  // remove any non-numeric characters other than decimal points, e.g degree or percentage symbols\n  const hsbArray = valueInput\n    .split(',')\n    .map(value => value.replace(/(?=\\D)[^\\.]/g, ''))\n\n  // Test for out of bounds color values\n  function checkValue(value, limit) {\n    if (value > limit) {\n      console.error('Bad value input!')\n      process.exit(1)\n    } else return value\n  }\n\n  // If the array only has one entry, assign it to brightness\n  if (hsbArray.length === 1) {\n    bri = checkValue(hsbArray[0], 100)\n    on = true\n    // Otherwise assign each entry as HSB values\n  } else {\n    hue = checkValue(hsbArray[0], 360)\n    sat = checkValue(hsbArray[1], 100)\n    bri = checkValue(hsbArray[2], 100)\n    on = true\n  }\n}\n\n// Convert the color model\nif (hue) hue = Math.floor((hue * 65535) / 360)\nif (sat) sat = Math.floor((sat * 254) / 100)\nif (bri) bri = Math.floor((bri * 254) / 100)\n\n// If there is color information, include it all in the data\nif (hue !== undefined) data = { on: on, hue: hue, sat: sat, bri: bri }\n// If there is only brightness info, update it without overwriting the existing color data\nelse if (bri !== undefined) data = { on: on, bri: bri }\n// Otherwise only change the \"on\" state without overwriting the existing color data\nelse if (on !== undefined) data = { on: on }\nelse {\n  console.error('No data provided!')\n  process.exit(1)\n}\n\nawait fetch(`http://${hueBridgeIP}/api/${userID}/lights/${bulbID}/state`, {\n  method: 'put',\n  body: JSON.stringify(data),\n  headers: { 'Content-Type': 'application/json' },\n})\n  .then(res => res.json())\n  .then(data => {\n    if (data.every(message => message.success)) {\n      console.log(`${prevBulbData[bulbID].name} bulb updated!`)\n    }\n  })\n"
  },
  {
    "path": "commands/home/philips-hue/hue-lights-inline.template.mjs",
    "content": "#!/usr/bin/env zx\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Lights\n// @raycast.mode inline\n// @raycast.packageName Philips Hue\n\n// Optional parameters:\n// @raycast.icon 💡\n// @raycast.refreshTime 2m\n\n// Documentation:\n// @raycast.author Jono Hewitt\n// @raycast.authorURL https://github.com/jonohewitt\n// @raycast.description Show inline summary of any Hue compatible lights. Choose to show on/off, brightness percentage, color temperature or hue, saturation, brightness values. Recommended to have already assigned names to lights in the Hue app.\n\n// This script requires:\n\n// • A global install of zx. To install, run 'npm i -g zx' or 'yarn global add zx'.\n//   More info: https://github.com/google/zx\n// • Your Hue Bridge local IP address, e.g 192.168.1.2\n// • An authorized username, e.g 1028d66426293e821ecfd9ef1a0731df\n// • Names to be assigned to the bulbs. You can do this in the Hue app.\n\n// Follow the steps here for the bridge IP and how to create a username:\n// https://developers.meethue.com/develop/get-started-2/\n\n// Remember to remove .template from the filename after customizing.\n\n// Config:\nconst hueBridgeIP = '<enter bridge ip here>' // e.g 192.168.1.2\nconst userID = '<enter username here>' // e.g 1028d66426293e821ecfd9ef1a0731df\n\n// 0 for On/Off\n// 1 for brightness percentage,\n// 2 for Hue, Saturation, Brightness if supported by full color bulbs,\n// or color temperature in K and brightness percentage in temperature only lights, e.g 'White Ambiance'\nconst outputType = 1\n\n// Optional:\n// Specify which lights you want to include, in order, by their name (case sensitive).\n// These names must have already been assigned to the lights via the Hue app.\n// Use an empty array for all lights.\nconst chosenLights = [] // E.g ['Main', 'Desk']\n\n// Optional:\n// If you want to use a different bulb name to the name in your Hue settings, you can assign that here.\n// The object key is the Hue name and the value is your arbitrary custom name.\nconst customNames = {} // E.g { Main: 'Ceiling', Desk: 'Lamp' }\n\n// Code:\n\n// Necessary to prevent fetch logging to the console automatically\n$.verbose = false\n\n// Collect data on all lights connected to the bridge\nconst lightsData = await fetch(`http://${hueBridgeIP}/api/${userID}/lights`, {\n  method: 'get',\n}).then(res => res.json())\n\nObject.keys(customNames)\n  .concat(chosenLights)\n  .forEach(lightName => {\n    if (!Object.entries(lightsData).find(bulb => bulb[1].name === lightName)) {\n      console.error(\n        `\"${lightName}\" isn't a bulb name yet! Check chosenLights & customNames`\n      )\n      process.exit(1)\n    }\n  })\n\nconst reducer = (output, bulb) => {\n  output += `${customNames[bulb.name] || bulb.name}: `\n  if (bulb.state.reachable && bulb.state.on) {\n    // Conditions are stacked with logical OR operators so that no bulb is asked for values it doesn't support\n    if (outputType === 0 || bulb.type === 'On/off light') {\n      output += 'On, '\n    } else if (outputType === 1 || bulb.type === 'Dimmable light') {\n      // Convert brightness from (0-254) to (0-100%)\n      output += `${Math.round((bulb.state.bri / 254) * 100)}%, `\n    } else if (outputType === 2) {\n      if (bulb.type === 'Color temperature light') {\n        // Convert color temperature from mired units to kelvin units\n        output += `${Math.round(1000000 / bulb.state.ct)} K, ${Math.round(\n          (bulb.state.bri / 254) * 100\n        )}%, `\n      } else if (\n        bulb.type === 'Color light' ||\n        bulb.type === 'Extended color light'\n      ) {\n        // Convert hue from (0-65535) to (0-360°)\n        output += `${Math.round((bulb.state.hue / 65535) * 360)}°, ${Math.round(\n          (bulb.state.sat / 254) * 100\n        )}%, ${Math.round((bulb.state.bri / 254) * 100)}% — `\n      }\n    }\n  } else if (bulb.state.reachable) output += 'Off, '\n  // Usually this means the light has been turned off manually at a switch\n  else output += 'Unreachable, '\n\n  return output\n}\n\nconst inlineOutput = Object.entries(lightsData)\n  .map(entry => entry[1])\n  .filter(light => !chosenLights.length || chosenLights.includes(light.name))\n  .sort((a, b) => {\n    if (chosenLights.length) {\n      return chosenLights.indexOf(a.name) - chosenLights.indexOf(b.name)\n    }\n  })\n  .reduce(reducer, '')\n  .slice(0, -2)\n\nconsole.log(inlineOutput || 'No lights found, check your configuration!')\n"
  },
  {
    "path": "commands/home/philips-hue/hue-room.template.mjs",
    "content": "#!/usr/bin/env zx\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Set Room Lights\n// @raycast.mode silent\n// @raycast.packageName Philips Hue\n\n// Optional parameters:\n// @raycast.icon 💡\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"preset\", \"optional\": true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"value (hsb or brightness)\", \"optional\": true }\n// @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"room\", \"optional\": true }\n\n// Documentation:\n// @raycast.author Jono Hewitt\n// @raycast.authorURL https://github.com/jonohewitt\n// @raycast.description Set a specified or default room of color bulbs to a preset, hsb or brightness value. Leave preset and value arguments empty to toggle a room on or off.\n\n// This script requires:\n\n// • A global install of zx. To install, run 'npm i -g zx' or 'yarn global add zx'.\n//   More info: https://github.com/google/zx\n// • Your Hue Bridge local IP address, e.g 192.168.1.2\n// • An authorized username, e.g 1028d66426293e821ecfd9ef1a0731df\n// • A group/room ID, e.g 2\n\n// Follow the steps here for the bridge IP and how to create a username:\n// https://developers.meethue.com/develop/get-started-2/\n\n// Then go to https://<bridge ip address>/api/<username>/groups to see the number ID associated with each room you've set up.\n// Assign one of these numbers to the defaultRoom variable below, then add each other room in the first section of the script.\n\n// The script uses comma separated HSB, a.k.a HSV, (Hue: 0-360, Saturation: 0-100, Brightness: 0-100) for inputting color values.\n// If only one number is provided, it is assumed to be brightness (0-100)\n// If neither a preset nor value are provided, the current 'on' state for the room is toggled\n\n// Remember to remove .template from the filename after customizing.\n\nconst hueBridgeIP = '<enter bridge ip here>' // e.g 192.168.1.2\nconst userID = '<enter username here>' // e.g 1028d66426293e821ecfd9ef1a0731df\nconst defaultRoom = '<enter default room id here>' // e.g 2\n\n// Necessary to prevent fetch logging to the console automatically\n$.verbose = false\n\nconst [presetInput, valueInput, roomInput] = process.argv.slice(3)\nlet on, hue, sat, bri, roomID, data\n\n// Fetch existing data for all rooms\nconst prevRoomData = await fetch(\n  `http://${hueBridgeIP}/api/${userID}/groups/`,\n  { method: 'get' }\n).then(res => res.json())\n\nif (roomInput) {\n  // If the roomInput string matches a name assigned to one of the rooms on the Hue bridge,\n  // the script will automatically use its ID instead of testing against the names in the switch statement\n  const matchedRoom = Object.entries(prevRoomData).find(\n    room => room[1].name.toLowerCase() === roomInput.toLowerCase()\n  )\n  if (matchedRoom) roomID = matchedRoom[0]\n  else {\n    // Assign room IDs to input strings here, some examples are included already\n    // The defaultRoom id assigned in the top config will be used if a room argument isn't provided\n    // The switch converts all inputs to lowercase, so you should only use lowercase for the case statements.\n    // That way, the Raycast input will be case insensitive.\n    switch (roomInput.toLowerCase()) {\n      // Multiple inputs can be assigned to the same room by stacking case statements\n      case 'dining room':\n      case 'dining':\n      case 'din':\n        roomID = 2 // Change these numbers to match your API results\n        break\n      case 'study':\n      case 'office':\n        roomID = 3\n        break\n      // Add more presets with more case statements here\n      default:\n        console.error(`${roomInput} isn't configured yet!`)\n        process.exit(1)\n    }\n  }\n} else roomID = defaultRoom\n\nif (!prevRoomData[roomID]) {\n  console.error(`Room ID: ${roomID} wasn't found on your Hue bridge!`)\n  process.exit(1)\n}\n\n// Assign your presets here, some examples are included already\nif (presetInput) {\n  switch (presetInput.toLowerCase()) {\n    case 'on':\n      on = true\n      break\n    case 'off':\n      on = false\n      break\n    case 'sunset':\n      on = true\n      hue = 15\n      sat = 100\n      bri = 20\n      break\n    case 'bright':\n      on = true\n      hue = 45\n      sat = 25\n      bri = 100\n      break\n    // Add more presets with more case statements here\n    default:\n      console.error('Preset not found!')\n      process.exit(1)\n  }\n  // If there isn't any presetInput or valueInput, this condition toggles the room on or off\n  // Remove if you would rather receive a 'No data provided' error without any changes made\n} else if (!valueInput) on = !prevRoomData[roomID].state.any_on\n\n// If a color input is provided, this section tests and assigns the values from it\n// This section doesn't require any further configuration\nif (valueInput) {\n  // Check for letters or hashtags in the input implying a HEX value\n  const hexRegex = /[a-zA-Z]|#/\n  if (hexRegex.test(valueInput)) {\n    console.error(\"HEX values aren't supported!\")\n    process.exit(1)\n  }\n  // Validate the input format\n  const formatRegex =\n    /^\\d+\\.?\\d*\\W?$|^\\d+\\.?\\d*\\W?,\\s?\\d+\\.?\\d*\\W?,\\s?\\d+\\.?\\d*\\W?$/\n  if (!formatRegex.test(valueInput)) {\n    console.error(\"HSB or brightness input isn't formatted correctly!\")\n    process.exit(1)\n  }\n\n  // Split the comma separated HSB string into an array,\n  // remove any non-numeric characters other than decimal points, e.g degree or percentage symbols\n  const hsbArray = valueInput\n    .split(',')\n    .map(value => value.replace(/(?=\\D)[^\\.]/g, ''))\n\n  // Test for out of bounds color values\n  function checkValue(value, limit) {\n    if (value > limit) {\n      console.error('Bad value input!')\n      process.exit(1)\n    } else return value\n  }\n\n  // If the array only has one entry, assign it to brightness\n  if (hsbArray.length === 1) {\n    bri = checkValue(hsbArray[0], 100)\n    on = true\n    // Otherwise assign each entry as HSB values\n  } else {\n    hue = checkValue(hsbArray[0], 360)\n    sat = checkValue(hsbArray[1], 100)\n    bri = checkValue(hsbArray[2], 100)\n    on = true\n  }\n}\n\n// Convert the color model\nif (hue) hue = Math.floor((hue * 65535) / 360)\nif (sat) sat = Math.floor((sat * 254) / 100)\nif (bri) bri = Math.floor((bri * 254) / 100)\n\n// If there is color information, include it all in the data\nif (hue !== undefined) data = { on: on, hue: hue, sat: sat, bri: bri }\n// If there is only brightness info, update it without overwriting the existing color data\nelse if (bri !== undefined) data = { on: on, bri: bri }\n// Otherwise only change the \"on\" state without overwriting the existing color data\nelse if (on !== undefined) data = { on: on }\nelse {\n  console.error('No data provided!')\n  process.exit(1)\n}\n\nawait fetch(`http://${hueBridgeIP}/api/${userID}/groups/${roomID}/action`, {\n  method: 'put',\n  body: JSON.stringify(data),\n  headers: { 'Content-Type': 'application/json' },\n})\n  .then(res => res.json())\n  .then(data => {\n    if (data.every(message => message.success)) {\n      console.log(`${prevRoomData[roomID].name} lights updated!`)\n    }\n  })\n"
  },
  {
    "path": "commands/home/philips-hue/hue-rooms-inline.template.mjs",
    "content": "#!/usr/bin/env zx\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Rooms\n// @raycast.mode inline\n// @raycast.packageName Philips Hue\n\n// Optional parameters:\n// @raycast.icon 💡\n// @raycast.refreshTime 2m\n\n// Documentation:\n// @raycast.author Jono Hewitt\n// @raycast.authorURL https://github.com/jonohewitt\n// @raycast.description Show inline summary about your rooms of Hue compatible lights. Choose to show the number of lights on out of the room total, or use more general terms such as \"All on\". Requires rooms to have already been set up in the Hue app.\n\n// This script requires:\n\n// • A global install of zx. To install, run 'npm i -g zx' or 'yarn global add zx'.\n//   More info: https://github.com/google/zx\n// • Your Hue Bridge local IP address, e.g 192.168.1.2\n// • An authorized username, e.g 1028d66426293e821ecfd9ef1a0731df\n// • Names to be assigned to the rooms. You can do this in the Hue app.\n\n// Follow the steps here for the bridge IP and how to create a username:\n// https://developers.meethue.com/develop/get-started-2/\n\n// Remember to remove .template from the filename after customizing.\n\n// Config:\n\nconst hueBridgeIP = '<enter bridge ip here>' // e.g 192.168.1.2\nconst userID = '<enter username here>' // e.g 1028d66426293e821ecfd9ef1a0731df\nconst specificOutput = true // true for e.g \"2/2 lights on\", false for \"All on\" / \"Some on\" / \"All off\"\n\n// Optional:\n// Specify which rooms you want to include, in order, by their name (case sensitive).\n// These names must have already been assigned to the rooms via the Hue app.\n// Use an empty array for all rooms.\nconst chosenRooms = [] // E.g ['Bedroom', 'Study']\n\n// Optional:\n// If you want to use a different room name to the name in your Hue settings, you can assign that here.\n// The object key is the Hue name and the value is your arbitrary custom name.\nconst customNames = {} // E.g { Bedroom: 'My room', Study: 'Office' }\n\n// Code:\n\n// Necessary to prevent fetch logging to the console automatically\n$.verbose = false\n\n// The Hue API doesn't provide 'reachable' data for groups, so this is collected from each light instead\nconst lightsData = await fetch(`http://${hueBridgeIP}/api/${userID}/lights`, {\n  method: 'get',\n}).then(res => res.json())\n\nconst roomsData = await fetch(`http://${hueBridgeIP}/api/${userID}/groups`, {\n  method: 'get',\n}).then(res => res.json())\n\nObject.keys(customNames)\n  .concat(chosenRooms)\n  .forEach(roomName => {\n    if (!Object.entries(roomsData).find(room => room[1].name === roomName)) {\n      console.error(\n        `\"${roomName}\" isn't a room name yet! Check chosenRooms & customNames`\n      )\n      process.exit(1)\n    }\n  })\n\nconst reducer = (output, room) => {\n  const totalLights = room.lights.length\n  const onLights = room.lights.filter(\n    id => lightsData[id].state.on && lightsData[id].state.reachable\n  ).length\n\n  if (totalLights > 0) {\n    output += `${customNames[room.name] || room.name}: `\n    if (specificOutput) output += `${onLights}/${totalLights} lights on, `\n    else {\n      if (onLights === totalLights) output += 'All on, '\n      else if (onLights > 0) output += 'Some on, '\n      else output += 'All off, '\n    }\n  }\n  return output\n}\n\nconst inlineOutput = Object.entries(roomsData)\n  .map(entry => entry[1])\n  .filter(room => !chosenRooms.length || chosenRooms.includes(room.name))\n  .sort((a, b) => {\n    if (chosenRooms.length) {\n      return chosenRooms.indexOf(a.name) - chosenRooms.indexOf(b.name)\n    }\n  })\n  .reduce(reducer, '')\n  .slice(0, -2)\nconsole.log(inlineOutput || 'No rooms found, check your configuration!')\n"
  },
  {
    "path": "commands/math/calculate-CAGR.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Calculate CAGR Percentage\n# @raycast.mode compact\n# @raycast.packageName Math\n\n# Optional parameters:\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"From\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"To\" }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Years\" }\n\n# Documentation:\n# @raycast.author Samuel Barton\n# @raycast.authorURL https://github.com/samueldbarton\n# @raycast.description Calculate the CAGR between \"from\" and \"to\" values over given \"years,\" then copy the result.\n\nCAGR=$(echo \"scale=4; e( l($2 / $1) / $3 ) - 1\" | bc -l)\nCAGR=$(echo \"scale=2; $CAGR * 100\" | bc -l)\nCAGR=$(printf \"%.2f\" \"$CAGR\")\necho \"$CAGR\" | pbcopy\necho \"The CAGR from $1 to $2 over $3 years is $CAGR%. CAGR copied to clipboard.\""
  },
  {
    "path": "commands/math/calculate-combinations.js",
    "content": "#!/usr/bin/env node\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title nCr: Calculate Combinations\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 𝐂\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"n\" }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"r\" }\n// Documentation:\n// @raycast.description nCr: Calculate combinations\n// @raycast.author cSharp\n// @raycast.authorURL https://github.com/noidwasavailable\n\nconst child_process = require('child_process');\n\n// Function to copy data to clipboard\nconst pbcopy = (data) => {\n  return new Promise(function (resolve, reject) {\n    const child = child_process.spawn('pbcopy');\n\n    child.on('error', function (err) {\n      reject(err);\n    });\n\n    child.on('close', function (err) {\n      resolve(data);\n    });\n\n    child.stdin.write(data);\n    child.stdin.end();\n  });\n};\n\n// get args\nconst n = Number(process.argv.slice(2)[0]);\nconst r = Number(process.argv.slice(2)[1]);\n\n// performance optimizations\nconst memoize = (fn) => {\n  const cache = {};\n  return (...args) => {\n    const n = args[0];\n    if (n in cache) {\n      return cache[n];\n    }\n    const result = fn(n);\n    cache[n] = result;\n    return result;\n  };\n};\n\n// factorial function\nconst factorial = memoize((n) => {\n  if (n === 0 || n === 1) {\n    return 1;\n  } else {\n    return n * factorial(n - 1);\n  }\n});\n\n// calculate nCr\nconst nCr = factorial(n) / (factorial(r) * factorial(n - r));\nconsole.log(`${n} choose ${r} = ${nCr}`);\npbcopy(`${nCr}`);\n\nreturn nCr;\n"
  },
  {
    "path": "commands/math/calculate-growth.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Calculate Growth %\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📈\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"From\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"To\" }\n\n# Documentation:\n# @raycast.author Petr Nikolaev\n# @raycast.authorURL https://github.com/pitnikola\n# @raycast.description Calculate percentage increase between \"from\" and \"to\" values.\n\nGROWTH=$(echo \"($2 / $1 - 1) * 100\" | bc -l)\nGROWTH=$(printf \"%.1f\" $GROWTH)\necho \"$GROWTH\" | pbcopy\necho \"Growth from $1 to $2 is $GROWTH%. Copied to clipboard.\"\n"
  },
  {
    "path": "commands/math/latex-calculator.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title LaTeX Calculator\n# @raycast.mode silent\n# @raycast.packageName Math\n#\n# Optional parameters:\n# @raycast.icon 🧮\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"\\\\frac{4}{2}}\", \"optional\": true}\n#\n# Documentation:\n# @raycast.description Evaluate LaTeX expressions and get the product copied to your clipboard\n# @raycast.author Matt Gleich\n# @raycast.authorURL https://mattglei.ch\n\nimport pyperclip\nfrom sympy.parsing.latex import parse_latex\nimport sys\n\nresult = float(parse_latex(sys.argv[1]).evalf())\n\nif result.is_integer():\n    result = round(result)\n\npyperclip.copy(result)\nprint(f\"Copied {result} to clipboard\")\n\n"
  },
  {
    "path": "commands/math/random-number.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Generate Random Number\n# @raycast.mode silent\n# @raycast.packageName Math\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"From\"}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"To\"}\n#\n# Optional parameters:\n# @raycast.icon 🔢\n#\n# Documentation:\n# @raycast.description Generate a number between a given range (inclusive) and then copy the value\n# @raycast.author Matt Gleich\n# @raycast.authorURL https://mattglei.ch\n\nVALUE=$(jot -r 1 $1 $2)\necho $VALUE | pbcopy\n\necho \"Copied value of\" $VALUE\n"
  },
  {
    "path": "commands/math/wolfram-alpha.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Wolfram Alpha\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon images/wolfram-alpha.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\" }\n# @raycast.packageName Math\n\n# Documentation:\n# @raycast.description Use Wolfram Alpha to answer your query\n# @raycast.author es183923\n# @raycast.authorURL https://github.com/es183923\n\n# Configuration\n\n# Get a Wolfram Alpha API app (https://products.wolframalpha.com/api/) and put in the id below\nWA_APP_ID=\"\"\n\n# units (`metric` or `imperial`)\nunits=\"metric\"\n\nencodedtext=$(echo $1 | curl -Gso /dev/null -w %{url_effective} --data-urlencode @- \"\" | cut -c 3- || true)\nresult=$(curl -s \"http://api.wolframalpha.com/v1/result?appid=${WA_APP_ID}&i=${encodedtext}&units=${units}\")\necho $result\n\n"
  },
  {
    "path": "commands/media/apple-music/apple-music-current-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.schemaVersion 1\n# @raycast.title Current Track\n# @raycast.mode inline\n# @raycast.refreshTime 10s\n\n# @raycast.packageName Music\n# @raycast.icon images/apple-music-logo.png\n\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n# @raycast.description Show currently playing track in Music.\n\n\nif application \"Music\" is not running then\n\tlog \"Not playing\"\n\treturn\nend if\n\nproperty currentTrackName : \"Unknown Track\"\nproperty currentTrackArtist : \"Unknown Artist\"\nproperty playerState : \"stopped\"\n\ntell application \"Music\"\n\ttry\n\t\tset currentTrackName to name of the current track\n\t\tset currentTrackArtist to artist of the current track\n\t\tset playerState to player state as string\n\tend try\nend tell\n\nif playerState is \"playing\" then\n\tlog currentTrackName & \" - \" & currentTrackArtist\nelse if playerState is \"paused\" then\n\tlog currentTrackName & \" - \" & currentTrackArtist & \" (Paused)\"\nelse\n\tlog \"Not playing\"\nend if"
  },
  {
    "path": "commands/media/apple-music/apple-music-go-to-artist-page.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `jq` cli installed: https://stedolan.github.io/jq/\n# Install via homebrew: `brew install jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Go to Artist in Apple Music\n# @raycast.mode silent\n# @raycast.packageName Music\n\n# Optional parameters:\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n# @raycast.description Go to Artist page in the Apple Music App\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"artist\", \"percentEncoded\": true}\n# @raycast.icon images/apple-music-logo.png\n\nif ! command -v jq &> /dev/null; then\n\techo \"jq is required. Install using homebrew: brew install jq\";\n\texit 1;\nfi\n\nurl=$(curl -s https://itunes.apple.com/search\\?term=$1\\&entity=musicArtist | jq '.results[0].artistLinkUrl' | sed 's/https/itms/g' | sed 's/\"//g')\nosascript -e 'on run {myurl}' -e 'open location myurl' -e 'end run' $url"
  },
  {
    "path": "commands/media/apple-music/apple-music-hate-current-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Hate Current Track\n# @raycast.author Bryan Schuetz\n# @raycast.authorURL https://github.com/bryanschuetz\n# @raycast.description Let the algorithm know how you feel about the currently playing track.\n# @raycast.icon images/apple-music-logo.png\n# @raycast.placeholder Hate it \n# @raycast.mode silent\n# @raycast.packageName Apple Music\n# @raycast.schemaVersion 1\n  tell application \"Music\"\n    set disliked of current track to true\n    log \"Litterally, the worst.\"\n  end tell"
  },
  {
    "path": "commands/media/apple-music/apple-music-love-current-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Love Current Track\n# @raycast.author Bryan Schuetz\n# @raycast.authorURL https://github.com/bryanschuetz\n# @raycast.description Let the algorithm know how you feel about the currently playing track.\n# @raycast.icon images/apple-music-logo.png\n# @raycast.placeholder Love It <3\n# @raycast.mode silent\n# @raycast.packageName Apple Music\n# @raycast.schemaVersion 1\n\n  tell application \"Music\"\n    if player state is playing then\n        set favorited of current track to true\n        log \"<3 Yeah, the song is now favorited\"\n    else\n        return \"No track is currently playing.\"\n    end if\n  end tell\n"
  },
  {
    "path": "commands/media/apple-music/apple-music-next.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Next Track\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Next track in Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\tnext track\nend tell\n\ndo shell script \"echo Next track\""
  },
  {
    "path": "commands/media/apple-music/apple-music-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Pause\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Pause Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\tif player state is playing then \n\t\tpause\n\t\tdo shell script \"echo Paused music\"\n\tend if\nend tell"
  },
  {
    "path": "commands/media/apple-music/apple-music-play.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Play\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Play Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\tif player state is paused then \n\t\tplay\n\t\tdo shell script \"echo Playing music\"\n\tend if\nend tell"
  },
  {
    "path": "commands/media/apple-music/apple-music-previous.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Previous Track\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Previous track in Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\tprevious track\nend tell\n\ndo shell script \"echo Previous track\""
  },
  {
    "path": "commands/media/apple-music/apple-music-repeat.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Toggle Repeat\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Toggle repeat setting in Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\n\tif song repeat = off then\n\n\t\tset song repeat to all\n\t\tdo shell script \"echo Repeating playlist\"\n\t\n\telse if song repeat = all then\n\t\t\n\t\tset song repeat to one\n\t\tdo shell script \"echo Repeating track\"\n\t\t\n\telse if song repeat = one\n\t\t\n\t\tset song repeat to off\n\t\tdo shell script \"echo Repeating off\"\n\t\n\tend if\n\t\nend tell"
  },
  {
    "path": "commands/media/apple-music/apple-music-search.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/apple-music-logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Artist or Music\" }\n# @raycast.packageName Apple Music\n\n# Documentation:\n# @raycast.description Search using the native UI\n# @raycast.author StevenRCE0\n# @raycast.authorURL https://github.com/StevenRCE0\n\non run argv\n\tset savedClipboard to the clipboard\n\tset the clipboard to ({item 1 of argv} as text)\n\ttry\n\t\tdo shell script \"open /System/Applications/Music.app\"\n\t\ttell application \"Music\" to activate\n\t\tset using to \"Music\"\n\ton error\n\t\ttry\n\t\tdo shell script \"open /Applications/iTunes.app\"\n\t\t\ttell application \"iTunes\" to activate\n\t\t\tset using to \"iTunes\"\n\t\tend try\n\tend try\n\t\n\t# Argh, the window title varies... Add your language if it's not here...\n\tset musicWindow to {\"Music\", \"ミュージック\", \"音乐\", \"音樂\"}\n\tset notShowing to true\n\tset toLaunch to true\n\n\trepeat while toLaunch\n\t\tif using is \"Music\" and application \"Music\" is running then set toLaunch to false\n\t\tif using is \"iTunes\" and application \"iTunes\" is running then set toLaunch to false\n\t\tdelay 0.5\n\tend repeat\n\t\n\t# Thanks StactOverflow user mklement0 for the code below detecting window name ;-)\n\t# Tell the *process* to count its windows and return its front window's name.\n\ttell application \"System Events\"\n\t\t# Get the frontmost app's *process* object.\n\t\tset frontAppProcess to first application process whose frontmost is true\n\tend tell\n\ttell frontAppProcess\n\t\tif (count of windows) > 0 then\n\t\t\tset window_name to name of front window\n\t\t\tif window_name is in musicWindow then\n\t\t\t\tset notShowing to false\n\t\t\tend if\n\t\tend if\n\tend tell\n\tif notShowing is true then\n\t\ttell application \"System Events\" to keystroke \"0\" using command down\n\tend if\n\t\n\tdelay 0.1\n\ttell application \"System Events\"\n\t\tkeystroke \"f\" using command down\n\t\tkeystroke \"a\" using command down\n\t\tkeystroke \"v\" using command down\n\t\tkey code 36\n\tend tell\n\tdelay 5\n\tset the clipboard to savedClipboard\n\tlog \"Done\"\nend run"
  },
  {
    "path": "commands/media/apple-music/apple-music-set-volume.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Set Volume\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Set volume in Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Level\" }\n\non run argv\n\ttell application \"Music\"\n\t\tset the sound volume to (item 1 of argv)\n\tend tell\nend run\n"
  },
  {
    "path": "commands/media/apple-music/apple-music-shuffle.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Toggle Shuffle\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Toggle shuffle setting in Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\n\tif shuffle enabled = false then\n\t\t\n\t\tset shuffle enabled to true\n\t\tdo shell script \"echo Shuffle playlist on\"\n\t\n\telse if shuffle enabled = true then\n\t\n\t\tset shuffle enabled to false\n\t\tdo shell script \"echo Shuffle playlist off\"\n\t\n\tend if\n\t\nend tell"
  },
  {
    "path": "commands/media/apple-music/apple-music-stop.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Stop\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Stop Music.\n\n# @raycast.icon images/apple-music-logo.png\n# @raycast.mode silent\n# @raycast.packageName Music\n# @raycast.schemaVersion 1\n\ntell application \"Music\"\n\tstop\nend tell\n\ndo shell script \"echo Stopped music\""
  },
  {
    "path": "commands/media/apple-music/apple-music-volume-down.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Apple Music Volume Down\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/apple-music-logo.png\n\n# Documentation:\n# @raycast.author Juan I. Serra\n# @raycast.authorURL https://github.com/jiserra\n# @raycast.packageName Music\n\ntry\n\ttell application \"Music\"\n\t\tset sound volume to sound volume - 5\n\t\tdo shell script \"echo '⬇'\"\n\tend tell\nend try"
  },
  {
    "path": "commands/media/apple-music/apple-music-volume-up.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Apple Music Volume Up\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/apple-music-logo.png\n\n# Documentation:\n# @raycast.author Juan I. Serra\n# @raycast.authorURL https://github.com/jiserra\n# @raycast.packageName Music\n\ntry\n\ttell application \"Music\"\n\t\tset sound volume to sound volume + 5\n\t\tdo shell script \"echo '⬆'\"\n\tend tell\nend try"
  },
  {
    "path": "commands/media/apple-tv/apple-tv-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Pause\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Pause TV.\n\n# @raycast.icon images/apple-tv-logo.png\n# @raycast.mode silent\n# @raycast.packageName TV\n# @raycast.schemaVersion 1\n\ntell application \"TV\"\n\tif player state is playing then \n\t\tpause\n\t\tdo shell script \"echo Paused TV\"\n\tend if\nend tell"
  },
  {
    "path": "commands/media/apple-tv/apple-tv-play-movie.applescript",
    "content": "#!/usr/bin/osascript\n\n## Contributions welcome to also play TV shows.\n\n# @raycast.title Play Movie\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Play specified movie from library in TV.\n\n# @raycast.icon images/apple-tv-logo.png\n# @raycast.mode silent\n# @raycast.packageName TV\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Movie\" }\n\non run argv\n\ttell application \"TV\"\n\t\ttry\n\t\t\tactivate\n\t\t\tplay track (item 1 of argv)\n\t\ton error\n\t\t\tlog \"Unable to play \\\"\" & (item 1 of argv) & \"\\\"\"\n\t\tend try\t\n\tend tell\nend run"
  },
  {
    "path": "commands/media/apple-tv/apple-tv-play.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Play\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Play TV.\n\n# @raycast.icon images/apple-tv-logo.png\n# @raycast.mode silent\n# @raycast.packageName TV\n# @raycast.schemaVersion 1\n\ntell application \"TV\"\n\tif player state is paused then \n\t\tplay\n\t\tdo shell script \"echo Playing TV\"\n\tend if\nend tell"
  },
  {
    "path": "commands/media/apple-tv/apple-tv-set-volume.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Set Volume\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Set volume in TV.\n\n# @raycast.icon images/apple-tv-logo.png\n# @raycast.mode silent\n# @raycast.packageName TV\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Level\" }\n\non run argv\n\ttell application \"TV\"\n\t\tset the sound volume to (item 1 of argv)\n\tend tell\nend run\n"
  },
  {
    "path": "commands/media/apple-tv/apple-tv-stop.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Stop\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Stop TV.\n\n# @raycast.icon images/apple-tv-logo.png\n# @raycast.mode silent\n# @raycast.packageName TV\n# @raycast.schemaVersion 1\n\ntell application \"TV\"\n\tstop\nend tell\n\ndo shell script \"echo Stopped TV\""
  },
  {
    "path": "commands/media/cmus/next-track.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Next Track\n# @raycast.mode silent\n#\n# @raycast.icon ⏩\n# @raycast.packageName Cmus\n#\n# @raycast.description Goes forward a track if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n\n\ncmus-remote --next\n"
  },
  {
    "path": "commands/media/cmus/play-pause.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Play/Pause\n# @raycast.mode silent\n#\n# @raycast.icon ⏯\n# @raycast.packageName Cmus\n#\n# @raycast.description Toggles the play/pause state if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n\ncmus-remote --pause\n"
  },
  {
    "path": "commands/media/cmus/previous-track.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Previous Track\n# @raycast.mode silent\n#\n# @raycast.icon ⏪\n# @raycast.packageName Cmus\n#\n# @raycast.description Goes back a track if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n\ncmus-remote --prev\n"
  },
  {
    "path": "commands/media/cmus/toggle-repeat.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Repeat\n# @raycast.mode silent\n#\n# @raycast.icon 🔁\n# @raycast.packageName Cmus\n#\n# @raycast.description Toggles the repeat option if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n\n\ncmus-remote --repeat\n"
  },
  {
    "path": "commands/media/cmus/toggle-shuffle.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Shuffle\n# @raycast.mode silent\n#\n# @raycast.icon 🔀\n# @raycast.packageName Cmus\n#\n# @raycast.description Toggles the shuffle option if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n\n\ncmus-remote --shuffle\n"
  },
  {
    "path": "commands/media/cmus/track-info.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Current Track\n# @raycast.mode inline\n# @raycast.refreshTime 10s\n#\n# @raycast.icon ℹ️\n# @raycast.packageName Cmus\n#\n# @raycast.description Shows info on the current track if cmus is running\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n#\n# Modified script from https://github.com/Anachron/i3blocks/blob/master/blocks/cmus\n\n\ncmus-remote >& /dev/null\nif [[ $? -eq 0 ]]; then\n  info_cmus=$(cmus-remote -Q)\n  info_status=$(echo \"${info_cmus}\" | sed -n -e 's/^.*status//p' | head -n 1)\n  track_title=$(echo \"${info_cmus}\" | sed -n -e 's/^.*title//p' | head -n 1)\n  track_artist=$(echo \"${info_cmus}\" | sed -n -e 's/^.*artist//p' | head -n 1)\n  track_album=$(echo \"${info_cmus}\" | sed -n -e 's/^.*album//p' | head -n 1)\n    if [[ $info_status == *\"playing\"* ]]; then\n        out_text=\"${track_title} —${track_artist}\"\n    else\n        out_text=\"[PAUSED] ${track_title} —${track_artist}\"\n    fi\nelse\n  out_text=\"Cmus is not running\"\nfi\n\necho ${out_text}\n"
  },
  {
    "path": "commands/media/endel/endel-alarm.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Alarm\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set Alarm in Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nopen \"endel://?type=alarm\"\n"
  },
  {
    "path": "commands/media/endel/endel-deep-focus.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Deep Focus\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set deep focus mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=plastikman\""
  },
  {
    "path": "commands/media/endel/endel-focus.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Focus\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set focus mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=focus\""
  },
  {
    "path": "commands/media/endel/endel-lullaby.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Lullaby\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set AI lullaby mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=grimes\""
  },
  {
    "path": "commands/media/endel/endel-recovery.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Recovery\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set recovery mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=recovery\""
  },
  {
    "path": "commands/media/endel/endel-relax.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Relax\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set relax mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=relax\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-deepwork.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Deep Work\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Deep Work scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=working&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-homework.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Homework\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Homework scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=studies&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-meditate.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Meditate\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Meditate scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=meditation&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-powernap.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Power Nap\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Power Nap scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=powerNap&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-read.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Read\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Read scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=reading&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-selfcare.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Self Care\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Self Care scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=selfCare&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-unwind.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unwind\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Unwind scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=unwind&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-workout.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Workout\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Workout scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=sports&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-scenarios-yoga.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Yoga\n# @raycast.mode silent\n# @raycast.packageName Endel\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Minutes\", \"percentEncoded\": false}\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Run Yoga scenario at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nMINUTES=$1\nMINUTES=$((MINUTES * 60))\nopen \"endel://?type=scenario&value=yoga&duration=$MINUTES\""
  },
  {
    "path": "commands/media/endel/endel-sleep.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Sleep\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set focus mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=sleep\""
  },
  {
    "path": "commands/media/endel/endel-study.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Study\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set study mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=study\""
  },
  {
    "path": "commands/media/endel/endel-timer.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Timer\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set Timer in Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\nopen \"endel://?type=timer\""
  },
  {
    "path": "commands/media/endel/endel-wisdom.sh",
    "content": "#!/bin/bash\n\n# Limitation: Endel URL scheme is not final and could be changed in the future\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Wiggly Wisdom\n# @raycast.mode silent\n# @raycast.packageName Endel\n#\n# Optional parameters:\n# @raycast.icon images/endel.png\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Set wiggly wisdom mode at Endel \n# @raycast.author Sergey Korobyin\n# @raycast.authorURL https://github.com/huangsemao\n\n\nopen \"endel://?type=playing_mode&value=alanwatts\""
  },
  {
    "path": "commands/media/foobar2000/foobar2000-next.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Next foobar2000\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/foobar2000.png\n# @raycast.packageName foobar2000\n\n# Documentation:\n# @raycast.description Shortcuts to next foobar2000 for Mac v2.3.0\n# @raycast.author Jing Li\n# @raycast.authorURL https://github.com/lixeon\n\ntell application \"System Events\"\n    tell process \"foobar2000\" \n\t    click menu item \"Next\" of menu \"Playback\" of menu bar item \"Playback\" of menu bar 1\n    end tell\nend tell\n\n"
  },
  {
    "path": "commands/media/foobar2000/foobar2000-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause foobar2000\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/foobar2000.png\n# @raycast.packageName foobar2000\n\n# Documentation:\n# @raycast.description Shortcuts to pause foobar2000 for Mac v2.3.0\n# @raycast.author Jing Li\n# @raycast.authorURL https://github.com/lixeon\n\ntell application \"System Events\"\n    tell process \"foobar2000\" \n\t    click menu item \"Pause\" of menu \"Playback\" of menu bar item \"Playback\" of menu bar 1\n    end tell\nend tell\n\n"
  },
  {
    "path": "commands/media/foobar2000/foobar2000-pervious.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Previous foobar2000\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/foobar2000.png\n# @raycast.packageName foobar2000\n\n# Documentation:\n# @raycast.description Shortcuts to Previous foobar2000 for Mac v2.3.0\n# @raycast.author Jing Li\n# @raycast.authorURL https://github.com/lixeon\n\ntell application \"System Events\"\n    tell process \"foobar2000\" \n\t    click menu item \"Previous\" of menu \"Playback\" of menu bar item \"Playback\" of menu bar 1\n    end tell\nend tell\n\n"
  },
  {
    "path": "commands/media/lowfi/lowfi.sh",
    "content": "#!/bin/bash\n\n# Note: lowfi and WezTerm required\n#\n# Install lowfi at https://github.com/talwat/lowfi\n# or by cargo: cargo install lowfi\n#\n# Install WezTerm at https://wezfurlong.org/wezterm/install/macos.html\n# or by homebrew: brew install --cask wezterm\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Lowfi\n# @raycast.mode compact\n# @raycast.packageName Music\n\n# Optional parameters:\n# @raycast.icon\n\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n\n# Check if lowfi is already running\nif pgrep -f \"lowfi$\" > /dev/null; then\n    echo \"Found existing lowfi process\"\n\n    # Use AppleScript to find and focus the lowfi window\n    osascript -e '\n        -- First activate WezTerm application\n        tell application \"WezTerm\" to activate\n        \n        -- Then focus the specific window\n        tell application \"System Events\"\n            tell process \"wezterm-gui\"\n                -- Get all windows\n                set allWindows to every window\n                repeat with w in allWindows\n                    if title of w contains \"lowfi\" then\n                        -- Try multiple methods to bring window to front\n                        set frontmost to true\n                        set value of attribute \"AXMain\" of w to true\n                        perform action \"AXRaise\" of w\n                        set position of w to {0, 40}\n                        -- Click the window to ensure focus\n                        click w\n                        return \"Found and focused lowfi window\"\n                    end if\n                end repeat\n            end tell\n        end tell\n        return \"Could not find lowfi window\"\n    '\nelse\n    echo \"Starting new lowfi instance\"\n    /Applications/WezTerm.app/Contents/MacOS/wezterm start -- lowfi &\nfi\n"
  },
  {
    "path": "commands/media/sonos/README.md",
    "content": "These controls require the soco-cli tool to be installed from https://github.com/avantrec/soco-cli\n\nThis is usually all you need (possibly using `pip3`)\n\n```\npip install soco-cli\n```\n"
  },
  {
    "path": "commands/media/sonos/sonos-play-favorite.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `soco` cli installed: https://github.com/avantrec/soco-cli\n# Install via pip: `pip install soco-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Play Favorite\n# @raycast.mode silent\n# @raycast.packageName Sonos\n\n# Optional parameters:\n# @raycast.icon images/sonos-logo.png\n\n# Documentation:\n# @raycast.description Play from Sonos favorites.\n# @raycast.author David Blackman\n# @raycast.authorURL https://github.com/whizziwig\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Favorite Search\" }\n\nif ! command -v soco &> /dev/null; then\n      echo \"soco command is required (https://github.com/avantrec/soco-cli).\";\n      exit 1;\nfi\n\nsoco _all_ play_fav \"$1\""
  },
  {
    "path": "commands/media/sonos/sonos-volume-down.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `soco` cli installed: https://github.com/avantrec/soco-cli\n# Install via pip: `pip install soco-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Volume Down\n# @raycast.mode silent\n# @raycast.packageName Sonos\n\n# Optional parameters:\n# @raycast.icon images/sonos-logo.png\n\n# Documentation:\n# @raycast.description Raises volume of Sonos.\n# @raycast.author David Blackman\n# @raycast.authorURL https://github.com/whizziwig\n\nif ! command -v soco &> /dev/null; then\n      echo \"soco command is required (https://github.com/avantrec/soco-cli).\";\n      exit 1;\nfi\n\nsoco _all_ relative_volume -5"
  },
  {
    "path": "commands/media/sonos/sonos-volume-set.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `soco` cli installed: https://github.com/avantrec/soco-cli\n# Install via pip: `pip install soco-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Volume\n# @raycast.mode silent\n# @raycast.packageName Sonos\n\n# Optional parameters:\n# @raycast.icon images/sonos-logo.png\n\n# Documentation:\n# @raycast.description Sets volume of Sonos.\n# @raycast.author David Blackman\n# @raycast.authorURL https://github.com/whizziwig\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Level\" }\n\nif ! command -v soco &> /dev/null; then\n      echo \"soco command is required (https://github.com/avantrec/soco-cli).\";\n      exit 1;\nfi\n\nsoco _all_ volume $1"
  },
  {
    "path": "commands/media/sonos/sonos-volume-up.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `soco` cli installed: https://github.com/avantrec/soco-cli\n# Install via pip: `pip install soco-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Volume Up\n# @raycast.mode silent\n# @raycast.packageName Sonos\n\n# Optional parameters:\n# @raycast.icon images/sonos-logo.png\n\n# Documentation:\n# @raycast.description Raises volume of Sonos.\n# @raycast.author David Blackman\n# @raycast.authorURL https://github.com/whizziwig\n\nif ! command -v soco &> /dev/null; then\n      echo \"soco command is required (https://github.com/avantrec/soco-cli).\";\n      exit 1;\nfi\n\nsoco _all_ relative_volume +5 "
  },
  {
    "path": "commands/media/speaker-setup/speaker-setup.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Speaker Setup\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🔊\n\n# Documentation:\n# @raycast.author Kailash Yellareddy\n# @raycast.authorURL https://github.com/kyellareddy\n\n# SETUP:\n# 1. Download the files Left.mp3 and Right.mp3\n# 2. Replace \"Left.mp3\" in line 21 with the file path for the file Left.mp3\n# 3. Replace \"Right.mp3\" in line 24 with the file path for the file Right.mp3\n\n# Play the first audio file\nafplay Left.mp3\n\n# Play the second audio file\nafplay Right.mp3\n"
  },
  {
    "path": "commands/media/spotify/create-spotify-command.js",
    "content": "#!/usr/bin/env node\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Create Spotify Command\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon ./images/spotify-create.png\n// @raycast.packageName Spotify\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Discover Weekly\" }\n\n// Documentation:\n// @raycast.description Create Spotify Shortcut Command from the Spotify URL that's in your clipboard\n// @raycast.author Nichlas Wærnes Andersen\n// @raycast.authorURL https://twitter.com/nichlaswa\n\nimport fs from \"fs\";\nimport { execSync } from \"child_process\";\n\n// Get Clipboard contents\nconst URL = execSync(\"pbpaste\").toString();\n\n// Filter out the information from URL\nconst code = URL?.split(\"/\")[4].split(\"?\")[0];\nconst type = URL?.split(\"/\")[3];\n\nconsole.log(`code: ${code}, type: ${type}`);\n\nconst [commandName] = process.argv.slice(2);\n\n// Create a new Spotify script\nconst scriptContent = `#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title ${commandName}\n# @raycast.mode silent\n# @raycast.packageName Spotify\n#\n# Optional parameters:\n# @raycast.icon ./images/spotify-logo.png\n#\n# Documentation:\n# @raycast.description Play ${commandName} on Spotify\n# @raycast.author Nichlas W. Andersen\n# @raycast.authorURL https://twitter.com/nichlaswa\n\nproperty uri: \"spotify:${type}:${code}\"\n\ntell application \"Spotify\" to play track uri`;\n\n// Slugify\nconst slugify = (string) => {\n  const a =\n    \"àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;\";\n  const b =\n    \"aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------\";\n  const p = new RegExp(a.split(\"\").join(\"|\"), \"g\");\n\n  return string\n    .toString()\n    .toLowerCase()\n    .replace(/\\s+/g, \"-\") // Replace spaces with -\n    .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters\n    .replace(/&/g, \"-and-\") // Replace & with 'and'\n    .replace(/[^\\w\\-]+/g, \"\") // Remove all non-word characters\n    .replace(/\\-\\-+/g, \"-\") // Replace multiple - with single -\n    .replace(/^-+/, \"\") // Trim - from start of text\n    .replace(/-+$/, \"\"); // Trim - from end of text\n};\n\n// Write script to disk\nif (!/track|album|playlist/.test(type)) {\n  console.log(\"Could not find Spotify URL in clipboard\");\n} else {\n  fs.writeFileSync(\n    `./spotify-play-${slugify(commandName)}.applescript`,\n    scriptContent\n  );\n  console.log(`${commandName} is ready`);\n}\n"
  },
  {
    "path": "commands/media/spotify/spotify-current-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Current Track\n# @raycast.mode inline\n# @raycast.refreshTime 30s\n\n# Optional parameters:\n# @raycast.packageName Spotify\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Show currently playing track in Spotify.\n\nif application \"Spotify\" is not running then\n\tlog \"Not playing\"\n\treturn\nend if\n\nproperty currentTrackName : \"Unknown Track\"\nproperty currentTrackArtist : \"Unknown Artist\"\nproperty playerState : \"stopped\"\n\ntell application \"Spotify\"\n\ttry\n\t\tset currentTrackName to name of the current track\n\t\tset currentTrackArtist to artist of the current track\n\t\tset playerState to player state as string\n\tend try\nend tell\n\nif playerState is \"playing\" then\n\tlog currentTrackName & \" by \" & currentTrackArtist\nelse if playerState is \"paused\" then\n\tlog currentTrackName & \" by \" & currentTrackArtist & \" (Paused)\"\nelse\n\tlog \"Not playing\"\nend if\n"
  },
  {
    "path": "commands/media/spotify/spotify-next-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Next Track\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.description Skips to the next track in Spotify.\n\ntell application \"Spotify\" to next track"
  },
  {
    "path": "commands/media/spotify/spotify-now-playing-url.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Current Playing Song URL\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.author Jack LaFond\n# @raycast.authorURL https://github.com/jacc\n# @raycast.description Get link to current Spotify playing song\n\ntell application \"Spotify\"\n\tset spotifyURL to spotify url of the current track\nend tell\n\nset AppleScript's text item delimiters to \":\"\nset idPart to third text item of spotifyURL\n\nset the clipboard to (\"https://open.spotify.com/track/\" & idPart)\nlog \"Copied to clipboard\""
  },
  {
    "path": "commands/media/spotify/spotify-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.description Pause current track in Spotify.\n\ntell application \"Spotify\" to pause"
  },
  {
    "path": "commands/media/spotify/spotify-play-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Play/Pause\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.description Toggles play or pause of current track in Spotify.\n\ntell application \"Spotify\" to playpause"
  },
  {
    "path": "commands/media/spotify/spotify-play-playlist.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Play Track or Playlist\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName Spotify\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n# @raycast.description Play playlist or track in Spotify.\n\n# Customization:\n# 1. Copy URI of track or playlist from Spotify, e.g. your discover weekly\n# 2. Adjust title and description of command\nproperty uri: \"\"\n\ntell application \"Spotify\" to play track uri"
  },
  {
    "path": "commands/media/spotify/spotify-play.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Play\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.description Plays current track in Spotify.\n\ntell application \"Spotify\" to play"
  },
  {
    "path": "commands/media/spotify/spotify-previous-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Previous Track\n# @raycast.mode silent\n# @raycast.packageName Spotify\n\n# Optional parameters:\n# @raycast.icon images/spotify-logo.png\n\n# Documentation:\n# @raycast.description Skips to the previous track in Spotify.\n\ntell application \"Spotify\" to previous track"
  },
  {
    "path": "commands/media/tidal/tidal-next-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Next Track\n# @raycast.mode silent\n# @raycast.packagename Tidal\n\n# Optional parameters\n# @raycast.icon images/tidal-logo.png\n\n# Documentation:\n# @raycast.author Charles Harries\n# @raycast.authorURL https://github.com/charlesharries\n# @raycast.description Skip to the next track in Tidal.\n\ntell application \"System Events\"\n  tell process \"TIDAL\"\n    click menu item \"Next\" of menu \"Playback\" of menu bar 1\n  end tell\nend tell\nreturn"
  },
  {
    "path": "commands/media/tidal/tidal-pause.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause\n# @raycast.mode silent\n# @raycast.packagename Tidal\n\n# Optional parameters\n# @raycast.icon images/tidal-logo.png\n\n# Documentation:\n# @raycast.author Charles Harries\n# @raycast.authorURL https://github.com/charlesharries\n# @raycast.description Pause the current track in Tidal.\n\ntell application \"System Events\"\n  tell process \"TIDAL\"\n    if name of menu item 0 of menu \"Playback\" of menu bar 1 is \"Pause\" then\n      click menu item \"Pause\" of menu \"Playback\" of menu bar 1\n    end if\n  end tell\nend tell\nreturn"
  },
  {
    "path": "commands/media/tidal/tidal-play.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Play\n# @raycast.mode silent\n# @raycast.packagename Tidal\n\n# Optional parameters\n# @raycast.icon images/tidal-logo.png\n\n# Documentation:\n# @raycast.author Charles Harries\n# @raycast.authorURL https://github.com/charlesharries\n# @raycast.description Play the current track in Tidal.\n\ntell application \"System Events\"\n  tell process \"TIDAL\"\n    if name of menu item 0 of menu \"Playback\" of menu bar 1 is \"Play\" then\n      click menu item \"Play\" of menu \"Playback\" of menu bar 1\n    end if\n  end tell\nend tell\nreturn"
  },
  {
    "path": "commands/media/tidal/tidal-previous-track.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Previous Track\n# @raycast.mode silent\n# @raycast.packagename Tidal\n\n# Optional parameters\n# @raycast.icon images/tidal-logo.png\n\n# Documentation:\n# @raycast.author Charles Harries\n# @raycast.authorURL https://github.com/charlesharries\n# @raycast.description Skip back to the previous track in Tidal.\n\ntell application \"System Events\"\n  tell process \"TIDAL\"\n    click menu item \"Previous\" of menu \"Playback\" of menu bar 1\n  end tell\nend tell\nreturn"
  },
  {
    "path": "commands/media/tidal/tidal.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Play/Pause\n# @raycast.mode silent\n# @raycast.packagename Tidal\n\n# Optional parameters\n# @raycast.icon images/tidal-logo.png\n\n# Documentation:\n# @raycast.author Cebrail AKTAS\n# @raycast.authorURL https://github.com/AktasC\n# @raycast.description Play/Pause Tidal\n\ntell application \"System Events\"\n  tell process \"TIDAL\"\n    click first menu item of menu \"Playback\" of menu bar 1\n    if name of first menu item of menu \"Playback\" of menu bar 1 is \"Play\" then\n      log \"▶️\"\n    else\n      log \"⏸\"\n    end if\n  end tell\nend tell\n"
  },
  {
    "path": "commands/navigation/hide-application.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.schemaVersion 1\n# @raycast.author Chris Bailey\n# @raycast.authorURL https://raycast.com/that70schris\n# @raycast.description Easily hide your foremost application\n# @raycast.packageName Navigation\n# @raycast.title Hide Current Application\n# @raycast.mode silent\n# @raycast.icon 🫥\n\ntell application \"System Events\"\n\ttell (first process whose frontmost is true)\n\t\tset _name to displayed name\n\tend tell\n\n  set visible of application process _name to false\nend tell\n"
  },
  {
    "path": "commands/navigation/justfocus.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title JustFocus\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/justfocus.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"po,sb,lb,stop\" }\n\n# Documentation:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n\non run argv\n    set q to item 1 of argv\n    if ((q as string) is equal to \"po\") then\n        tell application \"JustFocus\"\n            launch\n            start pomodoro\n        end tell\n    else if ((q as string) is equal to \"sb\") then\n        tell application \"JustFocus\"\n            launch\n            short break\n        end tell\n    else if ((q as string) is equal to \"lb\") then\n        tell application \"JustFocus\"\n            launch\n            long break\n        end tell\n    else if ((q as string) is equal to \"stop\") then\n        tell application \"JustFocus\"\n            stop\n        end tell\n    end if\nend run\n"
  },
  {
    "path": "commands/navigation/open-applications.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Applications\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon 📂\n\n# Documentation:\n# @raycast.description Opens the Applications folder in the Finder.\n\nopen /Applications\n"
  },
  {
    "path": "commands/navigation/open-clipboard-in-pixelmator-pro.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: This script requires Pixelmator Pro to be installed: https://www.pixelmator.com/pro/\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Image From Clipboard\n# @raycast.mode silent\n# @raycast.packageName Pixelmator Pro\n\n# Optional parameters:\n# @raycast.icon ./images/pixelmator-pro-2.0.png\n# @raycast.author Bryce Carr\n# @raycast.authorURL https://github.com/bdcarr\n\n# Documentation:\n# @raycast.description Creates a new document in Pixelmator Pro from the image stored in your clipboard.\n\nactivate application \"Pixelmator Pro\"\ntell application \"Pixelmator Pro\" to make document from clipboard\nreturn\n"
  },
  {
    "path": "commands/navigation/open-desktop-url-from-clipboard.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Open Clipboard URL on Desktop\n// @raycast.mode silent\n// @raycast.packageName Navigation\n\n// Optional parameters:\n// @raycast.icon 🖥\n\n// Documentation:\n// @raycast.description Opens the URL from the clipboard in the desktop app.\n\nimport Cocoa\n\nguard let string = NSPasteboard.general.string(forType: .string) else {\n  throw CocoaError(.serviceInvalidPasteboardData)\n}\n\nguard let url = URL(string: string) else {\n  throw URLError(.unsupportedURL)\n}\n\nfunc mapURLWithPrefix(_ prefix: String, scheme: String) -> (URL) -> URL? {\n  return { url in\n    guard let httpsRange = url.absoluteString.range(of: prefix) else { return nil }\n    let suffix = url.absoluteString[httpsRange.upperBound...]\n    return URL(string: scheme + suffix)\n  }\n}\n\nlet mapURLs = [\n  mapURLWithPrefix(\"https://www.notion.so/\", scheme: \"notion://\"),\n  mapURLWithPrefix(\"https://linear.app/\", scheme: \"linear://\"),\n  mapURLWithPrefix(\"https://www.figma.com/\", scheme: \"figma://\"),\n]\n\nguard\n  let mappedURL = mapURLs.lazy.compactMap({ $0(url) }).first,\n  let appURL = NSWorkspace.shared.urlForApplication(toOpen: mappedURL),\n  NSWorkspace.shared.open(mappedURL)\nelse {\n  NSWorkspace.shared.open(url)\n  exit(0)\n}\n\nprint(\"URL is open in \\(appURL.deletingPathExtension().lastPathComponent)\")\n"
  },
  {
    "path": "commands/navigation/open-desktop.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Desktop\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-desktop.png\n\n# Documentation:\n# @raycast.description Opens the Desktop folder in the Finder.\n\nopen ~/Desktop\n"
  },
  {
    "path": "commands/navigation/open-documents.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Documents\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-documents.png\n\n# Documentation:\n# @raycast.description Opens the Documents folder in the Finder.\n\nopen ~/Documents\n"
  },
  {
    "path": "commands/navigation/open-downloads.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Downloads\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-downloads.png\n\n# Documentation:\n# @raycast.description Opens the Downloads folder in the Finder.\n\nopen ~/Downloads\n"
  },
  {
    "path": "commands/navigation/open-finder-from-iterm.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Current iTerm Directory in Finder\n# @raycast.mode silent\n# @raycast.packageName Navigation\n#\n# Optional parameters:\n# @raycast.icon images/iterm-logo.png\n#\n# Documentation:\n# @raycast.description Open current iTerm directory in Finder\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\ntell application \"iTerm\"\n    tell the current session of current window\n        write text \"open -a Finder ./\"\n    end tell   \nend tell\n"
  },
  {
    "path": "commands/navigation/open-finder-from-terminal.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Current Terminal Directory in Finder\n# @raycast.mode silent\n# @raycast.packageName Navigation\n#\n# Optional parameters:\n# @raycast.icon 📟\n#\n# Documentation:\n# @raycast.description Open current Terminal directory in Finder\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\ntell application \"Terminal\"\n    if not (exists window 1) then reopen\n        activate\n    if busy of window 1 then\n        tell application \"System Events\" to keystroke \"t\" using command down\n    end if\n    do script \"open -a Finder ./\" in window 1\nend tell\n"
  },
  {
    "path": "commands/navigation/open-finder.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Finder\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔍\n# @raycast.argument1 { \"type\": \"text\", \"optional\": true, \"placeholder\": \"Folder\" }\n# @raycast.packageName Navigation\n\n# Documentation:\n# @raycast.description Open Finder at Home folder or argument location\n# @raycast.author Afraz\n# @raycast.authorURL https://github.com/afrazkhan\n\nLOCATION=$1\n\nif ! [[ \"$LOCATION\" =~ ^/ ]]; then\n  LOCATION=\"$HOME/$LOCATION\"\nfi\n\nopen \"$LOCATION\"\n"
  },
  {
    "path": "commands/navigation/open-home.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Home\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-home.png\n\n# Documentation:\n# @raycast.description Opens the Home folder in the Finder.\n\nopen ~\n"
  },
  {
    "path": "commands/navigation/open-iterm-from-finder.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Current Finder Directory in iTerm\n# @raycast.mode silent\n# @raycast.packageName Navigation\n#\n# Optional parameters:\n# @raycast.icon images/iterm-logo.png\n#\n# Documentation:\n# @raycast.description Open current Finder directory in iTerm\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\ntell application \"Finder\"\n    set pathList to (quoted form of POSIX path of (folder of the front window as alias))\n    set command to \"clear; cd \" & pathList\nend tell\n\ntell application \"iTerm\"\n    activate\n    set hasNoWindows to ((count of windows) is 0)\n    if hasNoWindows then\n        create window with default profile\n    end if\n    select first window\n\n    tell the first window\n        if hasNoWindows is false then\n            create tab with default profile\n        end if\n        tell current session to write text command\n    end tell\nend tell\n"
  },
  {
    "path": "commands/navigation/open-last-downloaded.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Last Downloaded\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-downloads.png\n\n# Documentation:\n# @raycast.description Opens the last file that was downloaded\n\nopen ~/\"Downloads/$(ls -tr ~/Downloads/ | tail -n 1)\""
  },
  {
    "path": "commands/navigation/open-library.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Library\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/folder-library.png\n\n# Documentation:\n# @raycast.description Opens the Library folder in the Finder.\n\nopen ~/Library\n"
  },
  {
    "path": "commands/navigation/open-terminal-from-finder.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Current Finder Directory in Terminal\n# @raycast.mode silent\n# @raycast.packageName Navigation\n#\n# Optional parameters:\n# @raycast.icon 📟\n#\n# Documentation:\n# @raycast.description Open current Finder directory in Terminal\n# @raycast.author Kirill Gorbachyonok\n# @raycast.authorURL https://github.com/japanese-goblinn\n\ntell application \"Finder\"\n    -- Check if there's a selection; works if there's a window open or not.\n    if selection is not {} then\n        set i to item 1 of (get selection)\n\n        -- If it's an alias, set the item to the original item.\n        if class of i is alias file then\n            set i to original item of i\n        end if\n\n        -- If it's a folder, use its path.\n        if class of i is folder then\n            set p to i\n        else\n            -- If it's an item, use its container's path.\n            set p to container of i\n        end if\n    else if (window 1 exists) and (folder of window 1 exists) then\n        -- If a window exist, use its folder property as the path.\n        set p to folder of window 1\n    else\n        -- Fallback to the Desktop, as nothing is open or selected.\n        set p to path to desktop folder\n    end if\n\n    set command to \"cd \" & quoted form of POSIX path of (p as alias) & \";clear;\"\nend tell\n\ntell application \"Terminal\"\n    if not (exists window 1) then reopen\n\n    activate\n\n    if busy of window 1 then\n        tell application \"System Events\" to keystroke \"t\" using command down\n    end if\n\n    do script command in window 1\nend tell\n\nreturn \"\"\n"
  },
  {
    "path": "commands/navigation/open-url-from-clipboard.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open URL From Clipboard\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.description Opens the URL in the clipboard.\n\nregex='(https?|ftp|file)://[-A-Za-z0-9\\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\\+&@#/%=~_|]'\npasteboardString=$(pbpaste)\n\nif [[ $pasteboardString =~ $regex ]]\nthen \n    open $pasteboardString\nelse\n    echo \"String in clipboard is a not valid URL\"\nfi\n\n"
  },
  {
    "path": "commands/navigation/quit-application.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Quit Application\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/quit.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Force quit?\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Quit the application. Edit the command to change the default values (Application: \"\", Force quit?: \"No\").\n\non run argv\n\t\n\t### Configuration ###\n\t\n\tset defaultApp to \"\"\n\tset defaultForceQuit to false\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\tset app_ to getApplication(item 1 of argv, defaultApp)\n\t\tset forceQuit to getForceQuit(item 2 of argv, defaultForceQuit)\n\t\t\n\t\tquitApplication(app_, forceQuit)\n\t\t\n\ton error errorMessage\n\t\treturn errorMessage\n\t\t\n\tend try\n\nend run\n\n### Functions ###\n\non getApplication(query, defaultApp)\n\tset app_ to query\n\tif app_ = \"\" then\n\t\tset app_ to defaultApp\n\t\tif app_ = \"\" then error \"Default application is not set, edit the command file\"\n\telse if not applicationExists(query) then\n\t\tset app_ to findMatchingApplication(query)\n\t\tif app_ = \"\" then error \"No application matching \\\"\" & query & \"\\\" is running\"\n\tend if\n\treturn app_\nend getApplication\n\non applicationExists(app_)\n\ttell application \"System Events\"\n\t\treturn (first process whose name = app_) exists\n\tend tell\nend applicationExists\n\non findMatchingApplication(query)\n\ttell application \"System Events\"\n\t\ttry\n\t\t\treturn name of first process whose name contains query\n\t\ton error\n\t\t\treturn \"\"\n\t\tend try\n\tend tell\nend findMatchingApplication\n\non getForceQuit(arg, defaultForceQuit)\n\tset forceQuit to arg\n\tif forceQuit = \"\" then\n\t\tset forceQuit to defaultForceQuit\n\telse if forceQuit is in {\"no\", \"n\"} then\n\t\tset forceQuit to false\n\telse if forceQuit is in {\"yes\", \"y\"} then\n\t\tset forceQuit to true\n\telse\n\t\terror \"Wrong value of the \\\"Force quit?\\\" argument: use \\\"y(es)\\\" or \\\"n(o)\\\"\"\n\tend if\n\treturn forceQuit\nend getForceQuit\n\non quitApplication(app_, forceQuit)\n\ttell application app_\n\t\tif not forceQuit then\n\t\t\tquit\n\t\telse\n\t\t\tdo shell script \"pkill -i \" & app_\n\t\tend if\n\tend tell\nend quitApplication\n"
  },
  {
    "path": "commands/navigation/restart-application.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart Application\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/restart.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Force restart?\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Restart the application. Edit the command to change the default values (Application: \"\", Force restart?: \"No\").\n\non run argv\n\t\n\t### Configuration ###\n\t\n\tset defaultApp to \"\"\n\tset defaultForceRestart to false\n\t\n\t### End of configuration ###\n\t\n\ttry\n\t\tset app_ to getApplication(item 1 of argv, defaultApp)\n\t\tset forceRestart to getForceRestart(item 2 of argv, defaultForceRestart)\n\t\t\n\t\trestartApplication(app_, forceRestart)\n\t\t\n\ton error errorMessage\n\t\treturn errorMessage\n\t\t\n\tend try\n\nend run\n\n### Functions ###\n\non getApplication(query, defaultApp)\n\tset app_ to query\n\tif app_ = \"\" then\n\t\tset app_ to defaultApp\n\t\tif app_ = \"\" then error \"Default application is not set, edit the command file\"\n\telse if not applicationExists(query) then\n\t\tset app_ to findMatchingApplication(query)\n\t\tif app_ = \"\" then error \"No application matching \\\"\" & query & \"\\\" is running\"\n\tend if\n\treturn app_\nend getApplication\n\non applicationExists(app_)\n\ttell application \"System Events\"\n\t\treturn (first process whose name = app_) exists\n\tend tell\nend applicationExists\n\non findMatchingApplication(query)\n\ttell application \"System Events\"\n\t\ttry\n\t\t\treturn name of first process whose name contains query\n\t\ton error\n\t\t\treturn \"\"\n\t\tend try\n\tend tell\nend findMatchingApplication\n\non getForceRestart(arg, defaultForceRestart)\n\tset forceRestart to arg\n\tif forceRestart = \"\" then\n\t\tset forceRestart to defaultForceRestart\n\telse if forceRestart is in {\"no\", \"n\"} then\n\t\tset forceRestart to false\n\telse if forceRestart is in {\"yes\", \"y\"} then\n\t\tset forceRestart to true\n\telse\n\t\terror \"Wrong value of the \\\"Force restart?\\\" argument: use \\\"y(es)\\\" or \\\"n(o)\\\"\"\n\tend if\n\treturn forceRestart\nend getForceRestart\n\non restartApplication(app_, forceRestart)\n\ttell application app_\n\t\tif not forceRestart then\n\t\t\tquit\n\t\telse\n\t\t\tdo shell script \"pkill -i \" & app_\n\t\tend if\n\t\t\n\t\trepeat\n\t\t\tif not it is running then\n\t\t\t\texit repeat\n\t\t\telse\n\t\t\t\tdelay 0.1\n\t\t\tend if\n\t\tend repeat\n\t\t\n\t\tactivate\n\tend tell\nend restartApplication\n"
  },
  {
    "path": "commands/navigation/search-in-dash.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Dash\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/dash.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Doc(egs:javascript)\", \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Keyword\", \"percentEncoded\": true}\n\nopen \"dash-plugin://keys=$1&query=$2\""
  },
  {
    "path": "commands/navigation/search-in-devdocs.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Devdocs\n# @raycast.mode silent\n# @raycast.packageName Navigation\n\n# Optional parameters:\n# @raycast.icon images/devdocs.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"doc\", \"percentEncoded\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"term\", \"percentEncoded\": true}\n\nopen \"devdocs-macos://search?doc=$1&term=$2\""
  },
  {
    "path": "commands/productivity/bitwarden/README.md",
    "content": "# Bitwarden Package\n\nA package of script commands to interact with [Bitwarden Vaults](https://bitwarden.com/) and [Bitwarden Sends](https://bitwarden.com/products/send/), wrapping the [Bitwarden CLI](https://bitwarden.com/help/article/cli/).\n\n- [Dependencies](#dependencies)\n- [Authentication Command Usage](#authentication-command-usage)\n  * [Log In](#log-in)\n  * [Log In with API Key](#log-in-with-api-key)\n  * [Log Out](#log-out)\n  * [Lock Session](#lock-session)\n  * [Unlock Session](#unlock-session)\n  * [Bitwarden Status](#bitwarden-status)\n- [Bitwarden Vault Command Usage](#bitwarden-vault-command-usage)\n  * [Search Vault Items](#search-vault-items)\n  * [Copy First Matching Password](#copy-first-matching-password)\n  * [Copy First Matching TOTP](#copy-first-matching-totp)\n- [Bitwarden Send Command Usage](#bitwarden-send-command-usage)\n  * [Create a Text Send](#create-a-text-send)\n  * [Receive a Text Send](#receive-a-text-send)\n  * [List All Text Sends](#list-all-text-sends)\n  * [Edit a Send](#edit-a-send)\n  * [Delete a Send](#delete-a-send)\n- [Appx: About Authentication](#appx--about-authentication)\n  * [Session Tokens](#session-tokens)\n    + [Session Token Manipulation](#session-token-manipulation)\n  * [Troubleshooting](#troubleshooting)\n\n## Dependencies\n\nAll authentication and vault-related commands in this package require the [Bitwarden CLI](https://bitwarden.com/help/article/cli/) v1.14.0 or later. Bitwarden Send-related commands require v1.15.1 or later. The _Bitwarden Status_, _Search Vault Items_, _Copy First Matching Password_, _Copy First Matching TOTP_, and Bitwarden Send-related commands (except _Delete a Send_) also require the [`jq` utility](https://stedolan.github.io/jq/).\n\nInstall the latest version of both dependencies via homebrew:\n\n```sh\n$ brew install bitwarden-cli jq\n```\n\nAdditional installation options are available in the tools' respective documentation.\n\n## Authentication Command Usage\n\n### Log In\n\n<img src=\"./images/log-in.png\">\n\nThis command executes in `silent` mode, and both authenticates and unlocks a Bitwarden account session.\n\n**If you use multifactor authentication to log in to your Bitwarden account, be sure to set the value of the `MFA_METHOD` variable.** The [values available to use](https://bitwarden.com/help/article/cli/#enums) are:\n\n| MFA Method        | Value |\n|-------------------|:-----:|\n| Authenticator App | 0     |\n| Email             | 1     |\n| Yubikey           | 3     |\n\nIf you _do not_ use multifactor authentication to log in to your Bitwarden account, leave this variable set to `\"\"`, and optionally remove the MFA Code argument (or leave it blank when logging in). Enabling multifactor authentication is encouraged.\n\n### Log In with API Key\n\n<img src=\"./images/log-in-apikey.png\">\n\nThis command executes in `silent` mode, and both authenticates and unlocks a Bitwarden account session using an alternative authentication method required when Bitwarden thinks the authentication comes from bot traffic. See the [Bitwarden CLI documentation](https://bitwarden.com/help/article/cli-auth-challenges/) for more information. Be sure to set the values of the `BW_CLIENTID` and `BW_CLIENTSECRET` variables. These credentials can be found in the account settings of [the web vault](https://vault.bitwarden.com/#/settings/account) (in the \"API Key\" section).\n\n### Log Out\n\n<img src=\"./images/log-out.png\">\n\nThis command executes in `silent` mode, and deauthenticates the authenticated Bitwarden session.\n\n### Lock Session\n\n<img src=\"./images/lock.png\">\n\nThis command executes in `silent` mode, and locks the authenticated Bitwarden session without deauthenticating.\n\n### Unlock Session\n\n<img src=\"./images/unlock.png\">\n\nThis command executes in `silent` mode, and unlocks the authenticated Bitwarden session.\n\n### Bitwarden Status\n\n<img src=\"./images/status.png\">\n\nThis dashboard command will show the current authentication and/or lock state of the Bitwarden session. It automatically updates every five minutes. The possible states are \"Unauthenticated\", \"Locked\", and \"Unlocked\".\n\n## Bitwarden Vault Command Usage\n\n### Search Vault Items\n\n<img src=\"./images/search-vault-items.png\">\n\nThis command executes in `fullOutput` mode, searches **items** in the unlocked Bitwarden vault, and prints all search results in the following format:\n\n```json\n{\n  \"name\": \"Service Name\",\n  \"username\": \"username\",\n  // optional password\n  \"password\": \"password\",\n  \"uris\": [\n    \"https://www.example.com\",\n    \"https://www.another-example.com\"\n  ],\n  \"lastUpdated\": \"2020-11-29T20:39:56.509Z\",\n  \"notes\": \"Notes appear here\",\n  \"fields\": [\n    {\n      \"name\": \"Custom Field Name 1\",\n      \"value\": \"Custom Field Value 1\",\n      \"type\": 0\n    },\n    // Optional hidden field\n    {\n      \"name\": \"Custom Field Name 2\",\n      \"value\": \"Custom Field Value 2\",\n      \"type\": 1\n    }\n  ]\n}\n```\n> The `\"type\"` property of `fields` objects are not included in the actual output. They are displayed here to illustrate that the first field is not a hidden field, but the second field is.\n\nPasswords and hidden fields are omitted by default. Pass `y` as the value of the `Include Passwords?` argument to include them. You can modify the above format using the `output_format` variable.\n\n### Copy First Matching Password\n\n<img src=\"./images/copy-first-matching-password.png\">\n\nThis command executes in `silent` mode, searches the unlocked Bitwarden vault, and copies the password associated with the first search result to the clipboard.\n\n### Copy First Matching TOTP\n\n<img src=\"./images/copy-first-matching-totp.png\">\n\nThis command executes in `silent` mode, searches the unlocked Bitwarden vault, and copies the TOTP associated with the first search result to the clipboard.\n\n## Bitwarden Send Command Usage\n\n### Create a Text Send\n\n<img src=\"./images/create-text-send.png\">\n\nThis command executes in `silent` mode, creates a new hidden text Send with the provided details, and copies the Send's URL to the clipboard. The Send's deletion date is automatically set to the default value of 7 days from the creation date.\n\n### Receive a Text Send\n\n<img src=\"./images/receive-text-send.png\">\n\nThis command executes in `fullOutput` mode and displays the title and text content of the specified text Send. If the Send is password protected, provide the password as the value of the \"Password\" argument. If the Send's text is hidden by default, pass \"y\" as the value of the \"Show Hidden Text?\" argument to display it.\n\n> **Note:** Because of the behavior of the [`bw send receive`](https://bitwarden.com/help/article/send-cli/#receive) command, there is no way for this script command to exit with an error when attempting to receive a password-protected Send without providing a password.\n\n### List All Text Sends\n\n<img src=\"./images/list-sends.png\">\n\nThis command executes in `fullOutput` mode and displays all text sends created in the currently unlocked Bitwarden account. Pass \"y\" as the value of the \"Show Hidden Text?\" argument to display the text content of any hidden Sends.\n\n### Edit a Send\n\n<img src=\"./images/edit-send.png\">\n\nThis command executes in `fullOutput` mode and displays the updated Send after making the desired modifications. To determine the correct ID of the Send to update, use the _List All Text Sends_ command. The possible \"Attribute\"s that can be updated are:\n\n| Value in _List All Text Sends_ Output | Value to Pass as \"Attribute\" to Update | Notes                                                                                                                                                                                                                                                 |\n|---------------------------------------|----------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `name`                                | name                                   |                                                                                                                                                                                                                                                       |\n| `id`                                  |                                        | Although the [`bw send edit` command](https://bitwarden.com/help/article/send-cli/#edit) documentation states that it's possible to edit a Send's ID, a bug in v1.15.1 prevents this from being possible.                                             |\n| `text`                                | text                                   |                                                                                                                                                                                                                                                       |\n| `deletionDate`                        | deletionDate                           | Use ISO-8601 date format.                                                                                                                                                                                                                             |\n| `expirationDate`                      | expirationDate                         | Use ISO-8601 date format.                                                                                                                                                                                                                             |\n| `maxAccessCount`                      | maxAccessCount                         |                                                                                                                                                                                                                                                       |\n| `accessCount`                         | accessCount                            |                                                                                                                                                                                                                                                       |\n| `passwordSet`                         |                                        | It is not currently possible to remove a password from a Send using the `bw` CLI.                                                                                                                                                                     |\n| `notes`                               | notes                                  |                                                                                                                                                                                                                                                       |\n| `url`                                 | url                                    |                                                                                                                                                                                                                                                       |\n|                                       | password                               | A Send's password is never displayed in the JSON response from the CLI. You can still update a Send's password using this script command. Note that attempting to update a password to `\"\"` (to effectively remove the password) will throw an error. |\n|                                       | disabled                               | (Boolean) Controls whether the Send can be received by others.                                                                                                                                                                                        |\n|                                       | hidden                                 | (Boolean) Controls whether the Send's text is hidden by default.                                                                                                                                                                                      |\n\n> Values not present in the _Value to Pass as \"Attribute\" to Update_ column cannot be modified.\n\n### Delete a Send\n\n<img src=\"./images/delete-send.png\">\n\nThis command executes in `silent` mode and deletes the Send with the passed ID value. To retrieve the ID value of a Send to delete, use the _List All Text Sends_ command.\n\n## Appx: About Authentication\n\nBitwarden sessions are separately authenticated and locked. All unlocked sessions are authenticated, but not all authenticated sessions are unlocked. The included _Log In_ command will both authenticate **and** unlock the authenticated session, but you do not need to log out in order to secure your session. Simply using the _Lock_ command will do so, and you can then use _Unlock_ later before using commands again.\n\n> For more information on session management, see the [Bitwarden CLI documentation](https://bitwarden.com/help/article/cli/#session-management).\n\n### Session Tokens\n\nThe Bitwarden CLI uses a session token system to maintain the lock/unlock state of an authenticated session, and this package utilizes the macOS keychain to store and maintain these session tokens. Running the _Lock_ and _Log Out_ commands in this package will invalidate any existing session tokens and remove them from the keychain. Conversely, running the _Log In_ and _Unlock_ commands will create a new session token and store it in the keychain accordingly, while both invalidating and overwriting any existing session token that may exist.\n\n#### Session Token Manipulation\n\n> Manipulating your session token directly, via either the command line or the Keychain Access UI is discouraged. See below for troubleshooting if you choose to do so anyway.\n\nTokens are stored in the macOS keychain under the user's account and the `raycast-bitwarden` service. When the session is both authenticated and unlocked, you can retrieve your session token via the command line with:\n\n```sh\n$ security find-generic-password -a ${USER} -s raycast-bitwarden\n```\n\nYou can manually remove your session token with:\n\n```sh\n$ security delete-generic-password -a ${USER} -s raycast-bitwarden\n```\n\n> **IMPORTANT:**<br/>\n>Removing your session token using this method will only prevent this package from executing script commands. The Bitwarden session itself will remain unlocked, and accessible via the Bitwarden CLI by including the `--session {{token}}` argument when executing CLI commands.\n\nNew session tokens can only be created using the Bitwarden CLI. Creating a new session token will invalidate any tokens created previously. To create a new session token, use [the `bw login` command](https://bitwarden.com/help/article/cli/#logging-in) if not already authenticated, otherwise use [the `bw unlock` command](https://bitwarden.com/help/article/cli/#locking). To restore usage of this package after creating a new session token, run:\n\n```sh\nsecurity add-generic-password -U -a ${USER} -s raycast-bitwarden -w {{token}}\n```\n\n### Troubleshooting\n\nIf you use the Bitwarden CLI and/or `security` command in your command line, or the Keychain Access UI to manipulate your session token (and therefore your session's lock status, from the perspective of this package), you may encounter errors using the package's script commands. In the event that the _Session Status_ command does not align with the CLI status' output, try running the _Log Out_ command, or:\n\n```sh\n$ bw logout && security delete-generic-password -a ${USER} -s raycast-bitwarden\n```\n\nThis will invalidate any existing session tokens and remove them from your keychain. You may then create a new session token, and store it accordingly, using the _Log In_ command.\n"
  },
  {
    "path": "commands/productivity/bitwarden/copy-first-matching-password.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy First Matching Password\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Search all items in a Bitwarden vault, and copy the password of the first search result to the clipboard.\n\nnotFound() {\n  echo \"The query '${BASH_ARGV[0]}' did not return a password.\"\n  exit 1\n}\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Vault is locked!\"\n  exit 1\nfi\n\nitem=$(bw list items --search \"$1\" $session 2> /dev/null | jq \".[0] | { name: .name, password: .login.password }\")\nname=$(echo $item | jq --exit-status \".name\") || notFound\npassword=$(echo $item | jq --raw-output --exit-status \".password\") || notFound\n\necho -n $password | pbcopy\nunset password\necho \"Copied the password for '$name' to the clipboard.\"\nexit 0\n"
  },
  {
    "path": "commands/productivity/bitwarden/copy-first-matching-totp.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy First Matching TOTP\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n#\n# Documentation\n# @raycast.author Adrian Reyes\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/int3rrupt\n# @raycast.description Search all items in a Bitwarden vault, and copy the TOTP of the first search result to the clipboard.\n\nitemNotFound() {\n  echo \"The query '${BASH_ARGV[0]}' did not return any items.\"\n  exit 1\n}\n\ntotpNotFound() {\n  echo \"The item '$1' does not have a TOTP configured.\"\n  exit 1\n}\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Vault is locked!\"\n  exit 1\nfi\n\nitem=$(bw list items --search \"$1\" $session 2> /dev/null | jq \".[0] | { id: .id, name: .name }\")\nname=$(echo $item | jq --exit-status \".name\") || itemNotFound\nid=$(echo $item | jq --raw-output --exit-status \".id\") || itemNotFound\ntotp=$(bw get totp $id $session 2> /dev/null)\ntest $? -eq 0 || totpNotFound \"$name\"\n\necho -n $totp | pbcopy\nunset totp\necho \"Copied the TOTP for '$name' to the clipboard.\"\nexit 0\n"
  },
  {
    "path": "commands/productivity/bitwarden/create-text-send.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create a Text Send\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Text\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Name\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Password\", \"optional\": true, \"secure\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Create a new text-only Bitwarden Send.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Session is locked. Use the Log In or Unlock command to create a Send.\"\n  exit 1\nfi\n\nfilter=(\".text.text=\\\"$1\\\" | .text.hidden=true | .notes=\\\"\\\"\")\nif [[ -n $2 ]]; then\n  filter+=(\" | .name=\\\"$2\\\"\")\nfi\n\nif [[ -n $3 ]]; then\n  filter+=(\" | .password=\\\"$3\\\"\")\nfi\n\nencoded=$(bw send template send.text | jq \"$(echo -n \"${filter[@]}\")\" | bw encode)\nsend=$(bw send create $session $encoded)\nsend_status=$?\n\nif [ $send_status -ne 0 ]; then\n  echo \"Failed to create Send\"\n  exit 1\nfi\n\necho $send | grep -o 'https://send.bitwarden.com/.*' | pbcopy\necho \"Send created! It's URL has been copied to the clipboard.\"\n"
  },
  {
    "path": "commands/productivity/bitwarden/delete-send.sh",
    "content": "#!/bin/bash\n\n# Dependency:\n# The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n# Install via homebrew: `brew install bitwarden-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Delete a Send\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.needsConfirmation true\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Send ID\" }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Delete a Bitwarden Send.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Session is locked. Use the Log In or Unlock command to delete a Send.\"\n  exit 1\nfi\n\nbw send delete $1 $session 2> /dev/null\ndelete_status=$?\n\nif [ $delete_status -ne 0 ]; then\n  printf \"Failed to delete Send with ID '%s'\" $1\n  exit 1\nfi\n\nprintf \"Deleted Send with ID '%s'\" $1\n"
  },
  {
    "path": "commands/productivity/bitwarden/edit-send.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Edit a Send\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Send ID\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Attribute\" }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"New Value\" }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Edit an existing Bitwarden Send.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Session is locked. Use the Log In or Unlock command to edit a Send.\"\n  exit 1\nfi\n\nsend=$(bw send get $1 $session 2> /dev/null)\nsend_status=$?\n\nif [ $send_status -ne 0 ]; then\n  printf \"No send found with ID '%s'\" $1\n  exit 1\nfi\n\nupdate=\"\"\ncase $2 in\n  \"\")\n    echo \"Please provide an attribute to update\"\n    exit 1\n    ;;\n  \"id\")\n    echo \"Updating a Send's ID is not supported\"\n    exit 1\n    ;;\n  \"text\")\n    update=\".text.text=\\\"$3\\\"\"\n    ;;\n  \"hidden\")\n    update=\".text.hidden=\\\"$3\\\"\"\n    ;;\n  \"url\")\n    update=\".accessUrl=\\\"$3\\\"\"\n    ;;\n  *)\n    update=\".$2\"\n    ;;\nesac\n\n$send | jq \"$update\" | bw encode | bw send edit $session | jq --color-output\n"
  },
  {
    "path": "commands/productivity/bitwarden/list-sends.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List All Text Sends\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Show Hidden Text? (y/n)\", \"optional\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description List all Bitwarden text Sends created in the currently unlocked account.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Session is locked. Use the Log In or Unlock command to list Sends.\"\n  exit 1\nfi\n\nbw sync $session > /dev/null 2>&1\n\ntext_content=\"(if (.text.hidden and (\\\"$1\\\" != \\\"y\\\")) then \\\"=== TEXT HIDDEN ===\\\" else .text.text end)\"\noutput_format=\"{ name, id, text: $text_content, deletionDate, expirationDate, maxAccessCount, accessCount, passwordSet, notes, url: .accessUrl }\"\nbw send list $session | jq --color-output \"map($output_format)\"\n"
  },
  {
    "path": "commands/productivity/bitwarden/lock.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the Bitwarden CLI:\n# https://bitwarden.com/help/article/cli/\n#\n# Install via homebrew: `brew install bitwarden-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Lock Session\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Lock a Bitwarden session.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nfi\n\nsecurity delete-generic-password -a ${USER} -s raycast-bitwarden > /dev/null 2>&1\nbw lock\n"
  },
  {
    "path": "commands/productivity/bitwarden/log-in-apikey.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the Bitwarden CLI:\n# https://bitwarden.com/help/article/cli/\n#\n# Install via homebrew: `brew install bitwarden-cli`\n\n# These values can be found in the \"API Key\" section of a web vault:\n# https://vault.bitwarden.com/#/settings/account\nBW_CLIENTID=\"\"\nBW_CLIENTSECRET=\"\"\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Log In\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Master Password\", \"secure\": true }\n#\n# Documentation\n# @raycast.author Marcel Bochtler\n# @raycast.authorURL https://github.com/MarcelBochtler\n# @raycast.description Log in to Bitwarden using an API key.\n\nif [ -z \"$BW_CLIENTID\" ] || [ -z \"$BW_CLIENTSECRET\" ]; then\n  echo \"Error: API key not set.\"\n  exit 1\nfi\n\nlogin_token=$(BW_CLIENTID=$BW_CLIENTID BW_CLIENTSECRET=$BW_CLIENTSECRET bw --raw login --apikey)\nlogin_status=$?\n\nif [ $login_status -ne 0 ]; then\n  echo $login_token\n  exit 1\nfi\n\nunlock_token=$(bw --raw unlock \"$1\")\nunlock_status=$?\n\nif [ $unlock_status -eq 0 ]; then\n  security add-generic-password -U -a ${USER} -s raycast-bitwarden -j \"Bitwarden session token for use with Raycast\" -w $unlock_token\n  echo \"Login successful! Your session is now unlocked.\"\n  exit 0\nelse\n  echo $unlock_token\n  exit 1\nfi\n"
  },
  {
    "path": "commands/productivity/bitwarden/log-in.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the Bitwarden CLI:\n# https://bitwarden.com/help/article/cli/\n#\n# Install via homebrew: `brew install bitwarden-cli`\n\n# If logging in with multi-factor authentication, set the `MFA_METHOD`\n# as necessary. Otherwise, leave this variable set to the empty string.\n#\n# Authenticator: 0\n# Email: 1\n# Yubikey: 3\nMFA_METHOD=\"\"\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Log In\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Email\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Master Password\", \"secure\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"MFA Code\", \"optional\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Log in to Bitwarden.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nfi\n\nif [ -n \"$MFA_METHOD\" ]; then\n  mfa=\"--method $MFA_METHOD --code $3\"\nfi\n\nout=$(bw --raw login $1 $2 $mfa)\nstatus=$?\n\nif [ $status -eq 0 ]; then\n  security add-generic-password -U -a ${USER} -s raycast-bitwarden -j \"Bitwarden session token for use with Raycast\" -w $out\n  unset out\n  echo \"Login successful! Your session is now unlocked.\"\n  exit 0\nelse\n  echo $out\n  exit 1\nfi\n"
  },
  {
    "path": "commands/productivity/bitwarden/log-out.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the Bitwarden CLI:\n# https://bitwarden.com/help/article/cli/\n#\n# Install via homebrew: `brew install bitwarden-cli`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Log Out\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Log out of Bitwarden.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nfi\n\nsecurity delete-generic-password -a ${USER} -s raycast-bitwarden > /dev/null 2>&1\nbw logout\n"
  },
  {
    "path": "commands/productivity/bitwarden/receive-text-send.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Receive a Text Send\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Send URL\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Password\", \"optional\": true, \"secure\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Show Hidden Text? (y/n)\", \"optional\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description View the content of a text-only Bitwarden Send.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed.\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\nbw unlock --check $session > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Session is locked. Use the Log In or Unlock command to view a Send.\"\n  exit 1\nfi\n\npassword=\"\"\nif [[ -n $2 ]]; then\n  password=\"--password $2\"\nfi\n\nsend=$(bw send receive --obj $password $session $1)\n\nif [[ $send == *\"Invalid password\"* ]]; then\n  echo $send\n  exit 1\nfi\n\nname=$(echo \"$send\" | jq --raw-output \".name\")\ntext=$(echo \"$send\" | jq --raw-output \"if (.text.hidden and (\\\"$3\\\" != \\\"y\\\")) then \\\"=== TEXT HIDDEN ===\\\" else .text.text end\")\nprintf \"%s\\n\\n%s\\n\" \"$name\" \"$text\"\n"
  },
  {
    "path": "commands/productivity/bitwarden/search-vault-items.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Vault Items\n# @raycast.mode fullOutput\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Include Passwords? (y/n)\", \"optional\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Search all items in a Bitwarden vault.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed (https://bitwarden.com/help/article/cli/).\"\n  echo \"Install via Homebrew with 'brew install bitwarden-cli'\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"The jq utility is not installed (https://stedolan.github.io/jq/).\"\n  echo \"Install via Homebrew with 'brew install jq'\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\nsession_args=\"\"\nif [ $token_status -eq 0 ]; then\n  session_args=\"--session $token\"\nfi\n\nbw unlock --check $session_args > /dev/null 2>&1\nunlocked_status=$?\n\nif [ $unlocked_status -ne 0 ]; then\n  echo \"Vault is locked. Use the 'Log In' or 'Unlock' commands to enable searching.\"\n  exit 0\nfi\n\npassword=\"\"\nfields=\", fields: [[.fields[]? | select(.type != 1)][]? | { name, value }]\"\nif [[ -n $2 && $2 == \"y\" ]]; then\n  password=\"password: .login.password,\"\n  fields=\", fields: [.fields[]? | { name, value }]\"\nfi\n\noutput_format=\"{ name, username: .login.username, $password uris: [.login.uris[]?.uri], lastUpdated: .revisionDate, notes $fields }\"\nbw list items $session_args --search \"$1\" | jq --color-output \"map($output_format)\"\n"
  },
  {
    "path": "commands/productivity/bitwarden/status.sh",
    "content": "#!/bin/bash\n\n# Dependencies:\n#   1. The Bitwarden CLI: https://bitwarden.com/help/article/cli/\n#   2. The `jq` utility: https://stedolan.github.io/jq/\n#\n# Install via homebrew: `brew install bitwarden-cli jq`\n\n# IMPORTANT:\n# This script only displays accurate session statuses when you have\n# previously used the `Log In`, `Unlock`, `Lock`, and `Log Out`\n# scripts within this package. If you're getting unexpected results\n# or errors, try running the `Log Out` script, or:\n#   bw logout && security delete-generic-password -a ${USER} -s raycast-bitwarden\n# and logging in again using the `Log In` script.\n\n# Parameters\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Bitwarden Status\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 5m\n\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Display the authentication and lock status of the user's Bitwarden session.\n\nif ! command -v bw &> /dev/null; then\n  echo \"⚠️  The Bitwarden CLI is not installed\"\n  exit 1\nelif ! command -v jq &> /dev/null; then\n  echo \"⚠️  The jq utility is not installed\"\n  exit 1\nfi\n\ntoken=$(security find-generic-password -a ${USER} -s raycast-bitwarden -w 2> /dev/null)\ntoken_status=$?\n\ndelete_token() {\n  if [ $token_status -eq 0 ]; then\n    security delete-generic-password -a ${USER} -s raycast-bitwarden > /dev/null 2>&1\n  fi\n\n  unset token\n}\n\nsession=\"\"\nif [ $token_status -eq 0 ]; then\n  session=\"--session $token\"\nfi\n\ncase $(bw --raw status $session 2> /dev/null | jq --raw-output '.status') in\n  unauthenticated)\n    delete_token\n    echo \"❌  Logged out\"\n    exit 0\n    ;;\n\n  locked)\n    delete_token\n    echo \"🔒  Locked\"\n    exit 0\n    ;;\n\n  unlocked)\n    echo \"✅  Unlocked\"\n    unset token\n    exit 0\n    ;;\n\n  *)\n    echo \"⚠️  An error occurred. Please try again.\"\n    unset token\n    exit 1\n    ;;\nesac\n"
  },
  {
    "path": "commands/productivity/bitwarden/unlock.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the Bitwarden CLI:\n# https://bitwarden.com/help/article/cli/\n#\n# Install via homebrew: `brew install bitwarden-cli`\n\n# IMPORTANT:\n# You must first authenticate your session using the `Log In` script\n# before this script will work as expected. Note that using the\n# `Log In` script will automatically unlock the session in addition\n# to authenticating.\n#\n# Use this script only for unlocking an authenticated, but locked,\n# session. You can check your session's authentication and lock status\n# using the `Session Status` command.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unlock Session\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Bitwarden\n# @raycast.icon images/bitwarden.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Master Password\", \"secure\": true }\n#\n# Documentation\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Unlock an authenticated Bitwarden session.\n\nif ! command -v bw &> /dev/null; then\n  echo \"The Bitwarden CLI is not installed.\"\n  exit 1\nfi\n\nout=$(bw --raw unlock \"$1\")\nstatus=$?\n\nif [ $status -eq 0 ]; then\n  security add-generic-password -U -a ${USER} -s raycast-bitwarden -j \"Bitwarden session token for use with Raycast\" -w $out\n  unset out\n  echo \"Session unlocked\"\n  exit 0\nelse\n  echo $out\n  exit 1\nfi\n"
  },
  {
    "path": "commands/productivity/imgur/imgur-upload-clipboard-image.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Clipboard to Imgur\n# @raycast.mode silent\n# @raycast.packageName Uploads Copied Image or Image from Clipboard\n\n#\n# Optional parameters:\n# @raycast.icon 📋\n#\n# Documentation:\n# @raycast.description Upload Image from your Clipboard and copy the image link to clipboard\n# @raycast.author Fahim Faisal\n# @raycast.authorURL https://github.com/i3p9\n\n#Dependency: pngpaste and imagemagick (Install via brew install pngpaste imagemagick)\n#pngpaste required to grab image from clipboard\n#imagemagick required to convert heic image to jpg (imgur doesnt accept heic files)\n\n#pngpaste check\nt=$(which pngpaste)\nif [ -z \"$t\" ]; then\n    echo \"pngpaste not found, install using brew install pngpaste\"\n    exit -1\nfi\n\n#imagemagick check\nm=$(which magick)\nif [ -z \"$m\" ]; then\n    echo \"imagemagick not found, install using brew install imagemagick\"\n    exit -1\nfi\n\n#Client ID, use your own client ID. Get it from https://api.imgur.com/oauth2/addclient (Select anonymous usage as auth type)\nclient_id=\"\" #CAN NOT BE EMPTY\n\nif [ \"$client_id\" == \"\" ]; then\n    echo \"No API Key found. Configure your own key before running\"\n    exit -1\nfi\n\n\nfunction upload {\n\tcurl --location --request POST 'https://api.imgur.com/3/image' --header \"Authorization: Client-ID $client_id\" --form \"image=$1\"\n}\n\n#Grab full file path from clipboard if there's an image\nfile_img=$(osascript -e \"POSIX path of (the clipboard as «class furl»)\")\next=\"${file_img##*.}\"\n\ncase \"$ext\" in\n    png|jpg|jpeg|gif) #If image file is found in clipboard\n        output=$(upload \"@$file_img\") 2>/dev/null\n        ;;\n    heic|HEIC) #HEIC conversion to JPG as Imgur doesnt suppot heic natively\n        clip_img=\"$(mktemp).jpg\"\n        magick convert \"${file_img}\" \"${clip_img}\"\n        echo \"${clip_img}\"\n        output=$(upload \"@$clip_img\") 2>/dev/null\n        ;;\n    *)\n        # check clipboard via pngpaste\n        clip_img=\"$(mktemp).png\"\n        pngpaste \"${clip_img}\"\n        output=$(upload \"@$clip_img\") 2>/dev/null\n        ;;\nesac\n\njobdone=1\n#Parse response from Imgur\nif echo \"$output\" | grep -q 'success=\"0\"'; then\n    echo \"From Imgur: Upload Error, try again\" >&2\nelif echo \"$output\" | grep -q 'Imgur is over capacity!'; then\n    echo \"From Imgur: Upload Error, try again\" >&2\nelse\n    url=\"${output##*\\\"link\\\":\\\"}\"\n    url=\"${url%%\\\"\\}*}\"\n    delete_hash=\"${output##*<deletehash>}\"\n    delete_hash=\"${delete_hash%%</deletehash>*}\"\n\n    echo -n \"$url\" | sed 's/\\\\\\//\\//g' | pbcopy\n    jobdone=0\nfi\n\n#Error handling is a solid \"ehhh\" (for now)\nif [ \"$jobdone\" -ne 1 ]; then\n    echo \"Upload Successful, link copied to clipboard\"\nelse\n    echo \"No image/image file found in clipboard, try again.\"\nfi\n"
  },
  {
    "path": "commands/productivity/imgur/imgur-upload-latest-screenshot.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Upload Latest Screenshot to Imgur\n# @raycast.mode silent\n# @raycast.packageName Upload to Imgur\n#\n# Optional parameters:\n# @raycast.icon ☁️\n#\n# Documentation:\n# @raycast.description Upload your last screenshot to Imgur and copy the image link to clipboard\n# @raycast.author Fahim Faisal\n# @raycast.authorURL https://github.com/i3p9\n\n\n# Get screenshot location and latest screenshot\nDIR=$(defaults read com.apple.screencapture location)\nFILE=$(ls -t \"$DIR\" | head -n 1)\nFILELOC=\"$DIR/$FILE\"\n\n#Client ID, use your own client ID. Get it from https://api.imgur.com/oauth2/addclient (Select anonymous usage as auth type)\nclient_id=\"\" #CAN NOT BE EMPTY\n\nif [ \"$client_id\" == \"\" ]; then\n    echo \"No API Key found. Configure your own key before running\"\n    exit -1\nfi\n\nfunction upload {\n\tcurl --location --request POST 'https://api.imgur.com/3/image' --header \"Authorization: Client-ID $client_id\" --form \"image=$1\"\n}\n\noutput=$(upload \"@$FILELOC\") 2>/dev/null\n\nif echo \"$output\" | grep -q 'success=\"0\"'; then\n    echo \"From Imgur: Upload Error, try again\" >&2\nelse\n    #grab the image link and delete hash from curl response\n    url=\"${output##*\\\"link\\\":\\\"}\"\n    url=\"${url%%\\\"\\}*}\"\n    delete_hash=\"${output##*<deletehash>}\"\n    delete_hash=\"${delete_hash%%</deletehash>*}\"\n\n    #Copy to clipboard\n    echo -n \"$url\" | pbcopy\n    echo \"Link copied to clipboard\"\nfi\n"
  },
  {
    "path": "commands/productivity/imgur/screenshot-and-imgur.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Screenshot and Imgur\n# @raycast.mode silent\n# @raycast.packageName Opens Screenshot Interface and Uploads\n\n#\n# Optional parameters:\n# @raycast.icon 📷\n#\n# Documentation:\n# @raycast.description Opens default screenshot interface and immediately uploads and copies link to clipboard\n# @raycast.author Fahim Faisal\n# @raycast.authorURL https://github.com/i3p9\n\n#Client ID, use your own client ID. Get it from https://api.imgur.com/oauth2/addclient (Select anonymous usage as auth type)\nclient_id=\"\" #CAN NOT BE EMPTY\n\nif [ \"$client_id\" == \"\" ]; then\n    echo \"No API Key found. Configure your own key before running\"\n    exit -1\nfi\n\nfunction upload {\n\tcurl --location --request POST 'https://api.imgur.com/3/image' --header \"Authorization: Client-ID $client_id\" --form \"image=$1\"\n}\n\n#Opens screenshot interface\nscreencapture -c -s\n\n#Grabs the screenshot from clipboard into a png file, uploads\nclip_img=\"$(mktemp).png\"\npngpaste \"${clip_img}\"\noutput=$(upload \"@$clip_img\") 2>/dev/null\n\n#Parse response from Imgur\nif echo \"$output\" | grep -q 'success=\"0\"'; then\n    echo \"From Imgur: Upload Error, try again\" >&2\nelif echo \"$output\" | grep -q 'Imgur is over capacity!'; then\n    echo \"From Imgur: Upload Error, try again\" >&2\nelse\n    url=\"${output##*\\\"link\\\":\\\"}\"\n    url=\"${url%%\\\"\\}*}\"\n    delete_hash=\"${output##*<deletehash>}\"\n    delete_hash=\"${delete_hash%%</deletehash>*}\"\n\n    echo -n \"$url\" | pbcopy\n    echo \"Screenshotted and Uploaded, Image link copied to clipboard\"\nfi\n"
  },
  {
    "path": "commands/productivity/macocr/macocr-run-ocr.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `macOCR` to be installed: https://github.com/schappim/macOCR\n# Install via homebrew: `brew install schappim/ocr/ocr`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Run OCR\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName macOCR\n# @raycast.icon 📸\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Language (default: en-US)\", \"optional\": true }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\nif ! command -v ocr &> /dev/null; then\n   echo \"macOCR has to be installed (https://github.com/schappim/macOCR)\";\n   exit 1;\nfi\n\nresult=$(ocr -l ${1:-\"en-US\"})\necho $result | tee >(pbcopy)\n"
  },
  {
    "path": "commands/productivity/pomodoro/pomodoro-start-timer.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Timer\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Duration\", \"optional\": true }\n# @raycast.packageName Pomodoro\n\n# Documentation:\n# @raycast.description Start a Pomodoro timer\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\nFILENAME=\"pomodoro_timer_end.txt\"\n\nif [ -n \"$1\" ]; then\n  DURATION_IN_MINUTES=\"$1\"\nelse\n  DURATION_IN_MINUTES=\"20\"\nfi\n\nNOW=$(date +\"%s\")\nEND=$(( $NOW + ($DURATION_IN_MINUTES * 60) ))\necho $END > $FILENAME\n\necho \"Started timer for $DURATION_IN_MINUTES minutes\""
  },
  {
    "path": "commands/productivity/pomodoro/pomodoro-status.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Status\n# @raycast.mode inline\n\n# Conditional parameters:\n# @raycast.refreshTime 30s\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.packageName Pomodoro\n\n# Documentation:\n# @raycast.description Status of a Pomodoro timer\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\nFILENAME=\"pomodoro_timer_end.txt\"\n\nif [ -f \"$FILENAME\" ]; then\n  END=$(cat $FILENAME)\n  NOW=$(date +\"%s\")\n  TIME_REMAINING_IN_MINUTES=$(( ($END - $NOW) / 60 ))\n\n  if [ \"$TIME_REMAINING_IN_MINUTES\" -lt \"-5\" ]; then\n    rm $FILENAME\n    echo -e \"\\\\033[31mTimer ended\\\\033[0m\"\n  elif [ \"$TIME_REMAINING_IN_MINUTES\" -lt \"0\" ]; then\n    echo -e \"\\\\033[31mTimer ended\\\\033[0m\"\n  elif [ \"$TIME_REMAINING_IN_MINUTES\" -lt \"3\" ]; then\n    echo -e \"\\\\033[31m$TIME_REMAINING_IN_MINUTES minutes remaining\\\\033[0m\"  \n  elif [ \"$TIME_REMAINING_IN_MINUTES\" -lt \"10\" ]; then\n    echo -e \"\\\\033[33m$TIME_REMAINING_IN_MINUTES minutes remaining\\\\033[0m\"  \n  else\n    echo -e \"\\\\033[32m$TIME_REMAINING_IN_MINUTES minutes remaining\\\\033[0m\"  \n  fi\nelse \n  echo \"No active timer\"\nfi"
  },
  {
    "path": "commands/productivity/pomodoro/pomodoro-stop-timer.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Timer\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🍅\n# @raycast.packageName Pomodoro\n\n# Documentation:\n# @raycast.description Stop active Pomodoro timer\n# @raycast.author Thomas Paul Mann\n# @raycast.authorURL https://github.com/thomaspaulmann\n\nFILENAME=\"pomodoro_timer_end.txt\"\n\nrm $FILENAME\n\necho \"Stopped timer\""
  },
  {
    "path": "commands/productivity/qpdf/compress-pdf-qpdf.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `qpdf` installed: https://github.com/qpdf/qpdf\n# Install via homebrew: `brew install qpdf`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Compress PDF\n# @raycast.mode compact\n# @raycast.packageName QPDF\n\n# Optional parameters:\n# @raycast.icon 🗜️\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Quality (0-100, default: 50)\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Compress selected PDF files. Note: This script requires 'qpdf' to be installed via Homebrew.\n# @raycast.author Nicklas Jakobsen\n# @raycast.authorURL https://github.com/nicklasjm\n\n# Configuration\nQUALITY=\"${1:-50}\"\nexport PATH=\"/opt/homebrew/bin:/usr/local/bin:$PATH\"\n\n# Check for qpdf dependency\nif ! command -v qpdf &> /dev/null; then\n    echo \"Error: qpdf is not installed.\"\n    echo \"Run 'brew install qpdf' in Terminal.\"\n    exit 1\nfi\n\n# Get files via AppleScript\nSELECTED_FILES=$(osascript <<EOD\ntell application \"Finder\"\n    set theSelection to selection\n    if theSelection is {} then\n        return \"\"\n    end if\n    set output to \"\"\n    repeat with theItem in theSelection\n        set output to output & POSIX path of (theItem as alias) & \"\\n\"\n    end repeat\n    return output\nend tell\nEOD\n)\n\nif [ -z \"$SELECTED_FILES\" ]; then\n    echo \"No files selected in Finder\"\n    exit 1\nfi\n\nIFS=$'\\n'\ncount=0\nlast_output=\"\"\n\n# Loop through files and compress\nfor f in $SELECTED_FILES; do\n    # Ignore non-PDF files\n    if [[ \"$f\" != *.pdf && \"$f\" != *.PDF ]]; then\n        continue\n    fi\n\n    filename=$(basename \"$f\")\n    echo \"Processing: $filename ($QUALITY%)...\"\n\n    dir=$(dirname \"$f\")\n    base_filename=$(basename \"$f\" .pdf)\n    \n    # Filename format: Name_50%.pdf\n    output=\"$dir/${base_filename}_${QUALITY}%.pdf\"\n\n    # Run qpdf\n    # We use --recompress-flate to ensure images are unpacked and re-evaluated\n    qpdf --compress-streams=y \\\n         --recompress-flate \\\n         --decode-level=generalized \\\n         --compression-level=9 \\\n         --optimize-images \\\n         --jpeg-quality=\"$QUALITY\" \\\n         --object-streams=generate \\\n         \"$f\" \"$output\"\n    \n    if [ $? -eq 0 ]; then\n        ((count++))\n        last_output=\"$output\"\n    else\n        echo \"Error processing: $filename\"\n        sleep 2\n    fi\ndone\n\n# Show result\nif [ $count -eq 0 ]; then\n    echo \"No files were created.\"\n    exit 1\nelse\n    # Reveal the last created file in Finder\n    if [ -n \"$last_output\" ]; then\n        open -R \"$last_output\"\n    fi\n    echo \"Done! Saved as ..._${QUALITY}%.pdf\"\nfi"
  },
  {
    "path": "commands/productivity/stopwatch/stopwatch-progress.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Stopwatch Progress\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.packageName stopwatch\n\n# Documentation:\n# @raycast.description Status of active stopwatch\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\nif [ ! -f \"$TMPDIR/raycast-stopwatch-start.txt\" ]; then\n    echo \"No stopwatch currently exist!\" > /dev/stderr\n    exit 1\nfi\n\nNOW=$(date +\"%s\")\nSTART=$(<\"$TMPDIR/raycast-stopwatch-start.txt\")\nDIFF=$((NOW - START))\n\nif [ $DIFF -lt 60 ]; then\n    printf '%02ds' $((DIFF%60))\nelif [ $DIFF -lt 3600 ]; then\n    printf '%02dm:%02ds' $((DIFF%3600/60)) $((DIFF%60))\nelse\n    printf '%02dh:%02dm:%02ds' $((DIFF/3600)) $((DIFF%3600/60)) $((DIFF%60))\nfi\n"
  },
  {
    "path": "commands/productivity/stopwatch/stopwatch-start.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start Stopwatch\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.packageName stopwatch\n\n# Documentation:\n# @raycast.description Start a stopwatch\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\nif [ -f \"$TMPDIR/raycast-stopwatch-start.txt\" ]; then\n    echo \"A stopwatch already exists!\" > /dev/stderr\n    exit 1\nfi\n\ndate +\"%s\" > \"$TMPDIR/raycast-stopwatch-start.txt\"\necho \"Stopwatch started!\"\n"
  },
  {
    "path": "commands/productivity/stopwatch/stopwatch-stop.sh",
    "content": "#!/usr/bin/env bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Stopwatch\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ⏱\n# @raycast.packageName stopwatch\n\n# Documentation:\n# @raycast.description Stop active stopwatch, copy total time\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\nset -e\n\nPROGRESS=$(./stopwatch-progress.sh)\nrm \"$TMPDIR/raycast-stopwatch-start.txt\"\n\npbcopy <<< \"$PROGRESS\"\n\necho \"FINAL TIME -> $PROGRESS\"\n"
  },
  {
    "path": "commands/productivity/tesseract/tesseract-ocr.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires the `tesseract` cli to be installed: https://github.com/tesseract-ocr/tesseract\n# Install via homebrew: `brew install tesseract`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title OCR Screenshot\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔍\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Language\", \"optional\": true }\n# @raycast.packageName tesseract\n\n# Documentation:\n# @raycast.description Tesseract OCR\n# @raycast.author Diego Lopes\n# @raycast.authorURL https://github.com/Dihgg\n\nif ! command -v tesseract &> /dev/null; then\n    echo \"tesseract command is required (https://github.com/tesseract-ocr/tesseract)\"\n    exit 1;\nfi\n\nTEMP_FILE=$(mktemp)\nscreencapture -i \"$TEMP_FILE\"\nLANG=${1:-eng}\ntesseract \"$TEMP_FILE\" stdout -l $LANG | LANG=en_US.UTF-8 pbcopy\necho \"Gathered text copied to clipboard\"\n"
  },
  {
    "path": "commands/productivity/writing/dictionary-lookup.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Dictionary Lookup\n// @raycast.mode compact\n\n// Optional parameters:\n// @raycast.icon 📖\n// @raycast.packageName Writing\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"word or phrase\" }\n\n// Documentation:\n// @raycast.description Directly use macOS Dictionary\n// @raycast.author Alessandra Pereyra\n// @raycast.authorURL https://github.com/alessandrapereyra\n\nimport Cocoa\nimport CoreServices.DictionaryServices\n\nfunc translate(_ text: String) -> String? {\n    let nsstring = text as NSString\n    let cfrange = CFRange(location: 0, length: nsstring.length)\n\n    guard let definition = DCSCopyTextDefinition(nil, nsstring, cfrange) else {\n        return nil\n    }\n\n    var foundDefinitions = String(definition.takeRetainedValue()).components(separatedBy:  \"\\n\")\n\n    if foundDefinitions.count > 1 {\n        foundDefinitions.removeFirst()\n        foundDefinitions.removeFirst()\n        foundDefinitions.removeLast()\n    }\n\n    return foundDefinitions.joined(separator: \" • \")\n}\n\nlet text = CommandLine.arguments[1]\nlet definition = translate(text) ?? \"No definition found for \\\"\\(text)\\\"\"\nprint(definition)\n"
  },
  {
    "path": "commands/productivity/writing/word-count.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Word Count\n# @raycast.mode inline\n# @raycast.refreshTime 15s\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.packageName Writing\n\n# Documentation:\n# @raycast.description Counts the number of words of the text in the clipboard\n# @raycast.author Benny Wong\n# @raycast.authorURL https://bwong.net\n\npbpaste | wc | awk '{print \"Words: \" $2 \", Lines: \" $1 \", Characters: \", $3}'"
  },
  {
    "path": "commands/remote-control/ddc/arm64/screen-dp.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `m1ddc` cli installed: https://github.com/waydabber/m1ddc\n# Install via github: `https://github.com/waydabber/m1ddc`\n\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch to DP\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📺\n# @raycast.author goodhyun\n# @raycast.packageName External Display\n# @raycast.description This script will switch the external display screen to DP.\n\nif ! command -v m1ddc &> /dev/null; then\n      echo \"m1ddc command is required (https://github.com/waydabber/m1ddc).\";\n      exit 1;\nfi\n\nm1ddc set input 15\n"
  },
  {
    "path": "commands/remote-control/ddc/arm64/screen-hdmi.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `m1ddc` cli installed: https://github.com/waydabber/m1ddc\n# Install via github: `https://github.com/waydabber/m1ddc`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch to HDMI\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📺\n# @raycast.author goodhyun\n# @raycast.packageName External Display\n# @raycast.description This script will switch the external display screen to HDMI.\n\n\nif ! command -v m1ddc &> /dev/null; then\n      echo \"m1ddc command is required (https://github.com/waydabber/m1ddc).\";\n      exit 1;\nfi\n\nm1ddc set input 17\n"
  },
  {
    "path": "commands/remote-control/ddc/x86/screen-dp.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `ddcctl` cli installed: https://github.com/kfix/ddcctl\n# Install via homebrew: `brew install ddcctl`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch to DP\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📺\n# @raycast.author goodhyun\n# @raycast.packageName External Display\n# @raycast.description This script will switch the external display screen to DP.\n\nif ! command -v ddcctl &> /dev/null; then\n      echo \"ddcctl command is required (https://github.com/kfix/ddcctl).\";\n      exit 1;\nfi\n\nddcctl -d 1 -i 15\n"
  },
  {
    "path": "commands/remote-control/ddc/x86/screen-hdmi.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `ddcctl` cli installed: https://github.com/kfix/ddcctl\n# Install via homebrew: `brew install ddcctl`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch to HDMI\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📺\n# @raycast.author goodhyun\n# @raycast.packageName External Display\n# @raycast.description This script will switch the external display screen to HDMI.\n\n\nif ! command -v ddcctl &> /dev/null; then\n      echo \"ddcctl command is required (https://github.com/kfix/ddcctl).\";\n      exit 1;\nfi\n\nddcctl -d 1 -i 17\n"
  },
  {
    "path": "commands/remote-control/denon-avr/configure.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Configure\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Denon AVR IP\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Method (Classic or Modern)\" }\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Helperscript to configure Denon AVR Script Commands\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run argv\n\ttry\n\t\tcheckAlive(item 1 of argv)\n\t\twriteIP(item 1 of argv)\n\t\tsetMethod(item 2 of argv)\n\t\tlog \"Configuration success!\"\n\ton error err_msg\n\t\ttell me to error \"An error has occured: \" & err_msg\n\tend try\nend run\n\non checkAlive(ip_address)\n\ttry\n\t\tdo shell script \"ping -c 1 \" & ip_address\n\ton error\n\t\ttell me to error \"Ip-address \" & ip_address & \" is incorrect, please adjust\"\n\tend try\nend checkAlive\n\non writeIP(ip_address)\n\tdo shell script \"defaults write com.Rediwed.DenonAVR ip_address \" & ip_address\n\treturn\nend writeIP\n\non setMethod(Method)\n\tset Method to (do shell script \"echo \" & (quoted form of Method) & \" | tr '[:upper:]' '[:lower:]'\")\n\tdo shell script \"defaults write com.Rediwed.DenonAVR method \" & Method\nend setMethod\n"
  },
  {
    "path": "commands/remote-control/denon-avr/power-off.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Power Off\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Powers off a modern Denon AVR if it is currently powered on\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run\n\tset ip_address to (do shell script \"defaults read com.Rediwed.DenonAVR ip_address\")\n\tif (do shell script \"defaults read com.Rediwed.DenonAVR method\") = \"modern\" then\n\t\trunModern(ip_address)\n\telse\n\t\trunClassic(ip_address)\n\tend if\nend run\n\non runModern(ip_address)\n\tdo shell script \"curl \" & ip_address & \":8080/goform/formiPhoneAppDirect.xml?PWSTANDBY\"\n\tlog \"Powering on...\"\nend runModern\n\non runClassic(ip_address)\n\t#classic is not yet set-up\n\t#do shell script \"curl 192.168.0.214:8080//goform/formiPhoneAppDirect.xml?MV\" & (item 1 of argv)\n\tlog \"Classic has not yet been set-up\"\nend runClassic\n"
  },
  {
    "path": "commands/remote-control/denon-avr/power-on.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Power On\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Powers on a modern Denon AVR if it is currently powered off\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run\n\tset ip_address to (do shell script \"defaults read com.Rediwed.DenonAVR ip_address\")\n\tif (do shell script \"defaults read com.Rediwed.DenonAVR method\") = \"modern\" then\n\t\trunModern(ip_address)\n\telse\n\t\trunClassic(ip_address)\n\tend if\nend run\n\non runModern(ip_address)\n\tdo shell script \"curl \" & ip_address & \":8080/goform/formiPhoneAppDirect.xml?PWON\"\n\tlog \"Powering on...\"\nend runModern\n\non runClassic(ip_address)\n\t#classic is not yet set-up\n\t#do shell script \"curl 192.168.0.214:8080//goform/formiPhoneAppDirect.xml?MV\" & (item 1 of argv)\n\tlog \"Classic has not yet been set-up\"\nend runClassic\n"
  },
  {
    "path": "commands/remote-control/denon-avr/set-volume.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Volume\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Placeholder\" }\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Sets the Denon AVR to a specific volume level (between 0 and 80)\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run argv\n\tif 0  (item 1 of argv) and (item 1 of argv)  80 then\n\t\tset ip_address to (do shell script \"defaults read com.Rediwed.DenonAVR ip_address\")\n\t\tif (do shell script \"defaults read com.Rediwed.DenonAVR method\") = \"modern\" then\n\t\t\trunModern(ip_address, item 1 of argv)\n\t\telse\n\t\t\trunClassic(ip_address, item 1 of argv)\n\t\tend if\n\telse\n\t\tlog \"Command not executed, illegal volume!\"\n\tend if\nend run\n\non runModern(ip_address, volume_level)\n\tdo shell script \"curl \" & ip_address & \":8080//goform/formiPhoneAppDirect.xml?MV\" & (volume_level)\n\tlog \"Volume set to \" & volume_level & \"!\"\nend runModern\n\non runClassic(ip_address, volume_level)\n\t#classic is not yet set-up\n\t#do shell script \"curl 192.168.0.214:8080//goform/formiPhoneAppDirect.xml?MV\" & (item 1 of argv)\n\tlog \"Classic has not yet been set-up\"\nend runClassic\n"
  },
  {
    "path": "commands/remote-control/denon-avr/volume-down.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Volume Down\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Decreases the volume of your Denon AVR by one unit\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run\n\tset ip_address to (do shell script \"defaults read com.Rediwed.DenonAVR ip_address\")\n\tif (do shell script \"defaults read com.Rediwed.DenonAVR method\") = \"modern\" then\n\t\trunModern(ip_address)\n\telse\n\t\trunClassic(ip_address)\n\tend if\nend run\n\non runModern(ip_address)\n\tdo shell script \"curl \" & ip_address & \":8080/goform/formiPhoneAppDirect.xml?MVDOWN\"\n\tlog \"Volume decreased!\"\nend runModern\n\non runClassic(ip_address)\n\t#classic is not yet set-up\n\t#do shell script \"curl 192.168.0.214:8080//goform/formiPhoneAppDirect.xml?MV\" & (item 1 of argv)\n\tlog \"Classic has not yet been set-up\"\nend runClassic\n"
  },
  {
    "path": "commands/remote-control/denon-avr/volume-up.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Volume Up\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/denon_logo.png\n# @raycast.packageName Denon AVR\n\n# Documentation:\n# @raycast.description Increases the volume of your Denon AVR by one unit\n# @raycast.author Rediwed\n# @raycast.authorURL github.com/Rediwed\n\non run\n\tset ip_address to (do shell script \"defaults read com.Rediwed.DenonAVR ip_address\")\n\tif (do shell script \"defaults read com.Rediwed.DenonAVR method\") = \"modern\" then\n\t\trunModern(ip_address)\n\telse\n\t\trunClassic(ip_address)\n\tend if\nend run\n\non runModern(ip_address)\n\tdo shell script \"curl \" & ip_address & \":8080/goform/formiPhoneAppDirect.xml?MVUP\"\n\tlog \"Volume increased!\"\nend runModern\n\non runClassic(ip_address)\n\t#classic is not yet set-up\n\t#do shell script \"curl 192.168.0.214:8080//goform/formiPhoneAppDirect.xml?MV\" & (item 1 of argv)\n\tlog \"Classic has not yet been set-up\"\nend runClassic\n"
  },
  {
    "path": "commands/remote-control/lg-tv/README.md",
    "content": "## LG TV (powered by [LGWebOSRemote](https://github.com/klattimer/LGWebOSRemote))\n\n![demo](images/demo.png)\n\nManage your LG TV with the collection of scripts that execute the [LGWebOSRemote commands](https://github.com/klattimer/LGWebOSRemote) via [Raycast](http://raycast.com).\n\n### Initial setup\n\n0. (Optional) Assign a static IP address to the TV.\n\n   > This step is optional, but highly recommended to avoid re-authentication when the IP changes. The instruction depends on the router model, but the phrase you are looking for is `DHCP`:\n   >\n   > - Asus: https://www.asus.com/support/FAQ/114068/\n   > - TP-Link: https://www.tp-link.com/us/support/faq/560/\n   > - etc.\n\n1. Install the `LGWebOSRemote` library system-wide.\n\n   > The recommended way is to use **[pipx](https://github.com/pypa/pipx)**:\n   >\n   > `pipx install git+https://github.com/klattimer/LGWebOSRemote`\n\n2. Run the `Scan` command.\n\n   > Remember the TV has to be turned on.\n\n3. Copy the TV IP address from the output.\n\n   ```python\n   {\"result\": \"ok\", \"count\": 1, \"list\": [{\"uuid\": \"some-long-id\", \"model\": \"OLED55C11LB\", \"address\": \"192.168.1.200\"}]}\n   ```\n\n4. Run the `Authenticate` command with the obtained IP.\n\n   > Remember the TV has to be turned on and you have to accept the connection on the TV.\n\n5. Voilà, now you can control the TV!\n\n### Available scripts\n\nAll the scripts with their descriptions can be found [here](https://github.com/raycast/script-commands/tree/master/commands#lg-tv).\n\n### Known issues\n\n- Commands' outputs are quite messy, e.g. always include `DEBUG` messages (bug in the library).\n- Only one TV configuration at a time is supported (bug in the library).\n- `Execute Command` command doesn't work (bug in the library).\n- `Send Notification With Icon` command doesn't work (bug in the library).\n- `Open Youtube (URL)` and `Open Youtube (ID)` commands don't seem to work (but try them yourself).\n- `Show Config` command runs forever - you have to cancel the process with `Control+C` (bug in the library).\n- Commands are not documented, so some of them are not obvious to use, e.g. `Open App With Payload`.\n\n**If you find out any more issues related to the library, not the Raycast scripts, please report them in [the LGWebOSRemote repository](https://github.com/klattimer/LGWebOSRemote) or... just contribute to the library by fixing them 🙂**\n"
  },
  {
    "path": "commands/remote-control/lg-tv/authenticate.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Authenticate\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"TV IP Address\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Authenticate the library. The TV has to be turned on. You have to provide the IP address of the TV and accept the connection on the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv auth $1 tv\n"
  },
  {
    "path": "commands/remote-control/lg-tv/change-channel.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Change Channel\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Channel ID\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Change the TV channel by its ID.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv setTVChannel $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/change-input.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Change Input\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Input ID\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Change the input by its ID.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv setInput $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/change-sound-output.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Change Sound Output\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Output Type\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Change the sound output. Possible \"Output Type\" values: tv_speaker | external_optical | external_arc | external_speaker | lineout | headphone | tv_external_speaker | tv_speaker_headphone | bt_soundbar.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv setSoundOutput $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/change-volume.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Change Volume\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Volume Level\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Change the volume level.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv setVolume $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/close-app.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close App\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"App ID\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Close the application by its ID.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv closeApp $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/execute-command.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Execute Command\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Arguments\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Execute the given command on TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv execute $1 $2\n"
  },
  {
    "path": "commands/remote-control/lg-tv/fast-forward-media.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Fast Forward Media\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Fast forward the media.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputMediaFastForward\n"
  },
  {
    "path": "commands/remote-control/lg-tv/list-apps.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Apps\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the list of applications.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv listApps\n"
  },
  {
    "path": "commands/remote-control/lg-tv/list-channels.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Channels\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the list of TV channels.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv listChannels\n"
  },
  {
    "path": "commands/remote-control/lg-tv/list-inputs.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Inputs\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the list of inputs.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv listInputs\n"
  },
  {
    "path": "commands/remote-control/lg-tv/list-launch-points.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Launch Points\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the list of launch points.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv listLaunchPoints\n"
  },
  {
    "path": "commands/remote-control/lg-tv/list-services.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title List Services\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the list of services.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv listServices\n"
  },
  {
    "path": "commands/remote-control/lg-tv/mute.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Mute\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Mute the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv mute true\n"
  },
  {
    "path": "commands/remote-control/lg-tv/open-app-with-payload.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open App With Payload\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Payload\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Open the application with the given payload.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv openAppWithPayload $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/open-app.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open App\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"App ID\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Open the application by its ID.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv startApp $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/open-browser.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Browser\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Page URL\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Open the browser with the given URL. The URL has to start with \"http://\" or \"https://\" prefix.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv openBrowserAt $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/open-youtube-id.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Youtube (ID)\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Video ID\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Open Youtube with the given video ID.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv openYoutubeId $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/open-youtube-url.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Youtube (URL)\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Video URL\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Open Youtube with the given video URL. The URL has to start with \"http://\" or \"https://\" prefix.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv openYoutubeURL $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/pause-media.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pause Media\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Pause the media.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputMediaPause\n"
  },
  {
    "path": "commands/remote-control/lg-tv/play-media.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Play Media\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Play the media.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputMediaPlay\n"
  },
  {
    "path": "commands/remote-control/lg-tv/rewind-media.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Rewind Media\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Rewind the media.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputMediaRewind\n"
  },
  {
    "path": "commands/remote-control/lg-tv/scan.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Scan\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Scan to find the TV. The TV has to be turned on.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv scan\n"
  },
  {
    "path": "commands/remote-control/lg-tv/send-notification-with-icon.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Send Notification With Icon\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Message\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Icon Path / URL\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Send the notification with the icon and show it on the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv notificationWithIcon $1 $2\n"
  },
  {
    "path": "commands/remote-control/lg-tv/send-notification.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Send Notification\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Message\" }\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Send the notification and show it on the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv notification $1\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-audio-status.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Audio Status\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the audio status.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv audioStatus\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-audio-volume.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Audio Volume\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the audio volume.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv audioVolume\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-channel.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Channel\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show information about the TV channel.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getTVChannel\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-config.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Config\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the configuration of the library.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv serialise\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-cursor-socket.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Cursor Socket\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the cursor socket.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getCursorSocket\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-fg-app-info.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Foreground App Info\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show information about the foreground application.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getForegroundAppInfo\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-picture-settings.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Picture Settings\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show picture settings.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getPictureSettings\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-power-state.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Power State\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the power state.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getPowerState\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-software-info.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Software Info\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show information about the software.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv swInfo\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-sound-output.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show Sound Output\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show the sound output.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getSoundOutput\n"
  },
  {
    "path": "commands/remote-control/lg-tv/show-tv-info.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Show TV Info\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Show information about the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv getSystemInfo\n"
  },
  {
    "path": "commands/remote-control/lg-tv/stop-media.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop Media\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Stop the media.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputMediaStop\n"
  },
  {
    "path": "commands/remote-control/lg-tv/switch-next-channel.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch To Next Channel\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Switch to the next TV channel.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputChannelUp\n"
  },
  {
    "path": "commands/remote-control/lg-tv/switch-previous-channel.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Switch To Previous Channel\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Switch to the previous TV channel.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv inputChannelDown\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-off-3d.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Off 3D\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn off the 3D mode.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv input3DOff\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-off-screen.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Off Screen\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn off the screen.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv screenOff\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-off.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Off\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn off the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv off\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-on-3d.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn On 3D\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn on the 3D mode.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv input3DOn\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-on-screen.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn On Screen\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn on the screen.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv screenOn\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-on.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn On\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn on the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv on\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-volume-down.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Volume Down\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn the volume down.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv volumeDown\n"
  },
  {
    "path": "commands/remote-control/lg-tv/turn-volume-up.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Volume Up\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Turn the volume up.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv volumeUp\n"
  },
  {
    "path": "commands/remote-control/lg-tv/unmute.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependencies:\n# LGWebOSRemote: https://github.com/klattimer/LGWebOSRemote\n\n# Recommended installation: \n# Use pipx (https://github.com/pypa/pipx) to install the package system-wide:\n# pipx install git+https://github.com/klattimer/LGWebOSRemote\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unmute\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.packageName LG TV\n# @raycast.icon images/lg.png\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n# @raycast.description Unmute the TV.\n\n# Modified PATH to include pipx-installed packages. If you used a different installation method, adjust the variable properly to make the 'lgtv' package detectable.\nPATH=\"$HOME/.local/bin:$PATH\"\n\nlgtv tv mute false\n"
  },
  {
    "path": "commands/remote-control/samsung-tv/README.md",
    "content": "## Samsung TV\n\n![demo](images/demo.png)\n\nManage your Samsung TV via [Raycast](http://raycast.com).\n\n### Compatibility\n> [Here](https://developer.samsung.com/smarttv/develop/specifications/tv-model-groups.html) are a complete list of compatible Samsung models that will be able to use these commands\n\n### Initial setup\n\n1. Install the `wakeonlan` module\n\n   \n   > `pip3 install wakeonlan`\n\n2. Obtain your preferred Samsung TV's IP and MAC Address then update the `turn-on.template.py` and `turn-off.template.py`\n\n   > Remember to remove the **.template.** from the scripts after updating\n\n3. Reload your scripts and Voilà ! Now you can control the TV via Raycast!\n\n### Important\n- First time users will need to allow the device to connect to it\n- Some TVs will need the user to allow IP remote devices to connect to it\n\n### Known issues\n\n- After turning the TV off. Users cannot turn the TV back via `Turn on TV` command until ~10-15 secs later \n\n"
  },
  {
    "path": "commands/remote-control/samsung-tv/samsungexceptions.py",
    "content": "class ConnectionFailure(Exception):\n    \"\"\"Error during connection.\"\"\"\n    pass\n\n\nclass ResponseError(Exception):\n    \"\"\"Error in response.\"\"\"\n    pass\n\n\nclass HttpApiError(Exception):\n    \"\"\"Error using HTTP API.\"\"\"\n    pass\n"
  },
  {
    "path": "commands/remote-control/samsung-tv/samsunghelper.py",
    "content": "\"\"\"\n\nSamsungTVWS - Samsung Smart TV WS API wrapper\n\n\"\"\"\nimport base64\nimport json\nimport time\nimport ssl\nimport logging\nimport websocket\nimport samsungexceptions as exceptions\nimport samsungshortcuts as shortcuts\n\n_LOGGING = logging.getLogger(__name__)\n\nclass SamsungTVWS:\n    _URL_FORMAT = 'ws://{host}:{port}/api/v2/channels/samsung.remote.control?name={name}'\n    _SSL_URL_FORMAT = 'wss://{host}:{port}/api/v2/channels/samsung.remote.control?name={name}&token={token}'\n\n    def __init__(self, host, port=8002, timeout=None, key_press_delay=1,\n                 name='SamsungTvRemote',token=None,token_file=None):\n        self.host = host\n        self.port = port\n        self.timeout = None if timeout == 0 else timeout\n        self.token = token\n        self.token_file = token_file\n        self.key_press_delay = key_press_delay\n        self.name = name\n        self.connection = None\n\n    def _get_token(self):\n        if self.token_file is not None:\n            try:\n                with open(self.token_file, 'r') as token_file:\n                    return token_file.readline()\n            except:\n                return ''\n        else:\n            return self.token\n\n    def _set_token(self, token):\n        _LOGGING.info('New token %s', token)\n        if self.token_file is not None:\n            _LOGGING.debug('Save token to file: %s', token)\n            with open(self.token_file, 'w') as token_file:\n                token_file.write(token)\n        else:\n            self.token = token\n\n    def _serialize_string(self, string):\n        if isinstance(string, str):\n            string = str.encode(string)\n\n        return base64.b64encode(string).decode('utf-8')\n\n    def _is_ssl_connection(self):\n        return self.port == 8002\n\n    def _format_websocket_url(self):\n        params = {\n            'host': self.host,\n            'port': self.port,\n            'name': self._serialize_string(self.name),\n            'token': self._get_token(),\n        }\n\n        if self._is_ssl_connection():\n            return self._SSL_URL_FORMAT.format(**params)\n        else:\n            return self._URL_FORMAT.format(**params)\n\n    def _ws_send(self, command, key_press_delay=None):\n        if self.connection is None:\n            self.open()\n        payload = json.dumps(command)\n        self.connection.send(payload)\n\n        delay = self.key_press_delay if key_press_delay is None else key_press_delay\n        time.sleep(delay)\n\n    def _process_api_response(self, response):\n        try:\n            return json.loads(response)\n        except json.JSONDecodeError:\n            _LOGGING.debug('Failed to parse response from TV. response text: %s', response)\n            raise exceptions.ResponseError('Failed to parse response from TV. Maybe feature not supported on this model')\n\n    def open(self):\n        url = self._format_websocket_url()\n        sslopt = {'cert_reqs': ssl.CERT_NONE} if self._is_ssl_connection() else {}\n\n        self.connection = websocket.create_connection(\n            url,\n            self.timeout,\n            sslopt=sslopt,\n            connection='Connection: Upgrade'\n        )\n\n        response = self._process_api_response(self.connection.recv())\n        \n        if response.get('data') and response.get('data').get('token'):\n            token = response.get('data').get('token')\n            _LOGGING.debug('Got token %s', token)\n            self._set_token(token)\n\n        if response['event'] != 'ms.channel.connect':\n            self.close()\n            raise exceptions.ConnectionFailure(response)\n\n    def close(self):\n        if self.connection:\n            self.connection.close()\n\n        self.connection = None\n        _LOGGING.debug('Connection closed.')\n\n    def send_key(self, key, times=1, key_press_delay=None, cmd='Click'):\n        for _ in range(times):\n            self._ws_send(\n                {\n                    'method': 'ms.remote.control',\n                    'params': {\n                        'Cmd': cmd,\n                        'DataOfCmd': key,\n                        'Option': 'false',\n                        'TypeOfRemote': 'SendRemoteKey'\n                    }\n                },\n                key_press_delay\n            )\n\n    def shortcuts(self):\n        return shortcuts.SamsungTVShortcuts(self)\n"
  },
  {
    "path": "commands/remote-control/samsung-tv/samsungshortcuts.py",
    "content": "\"\"\"\nSamsungTVWS - Samsung Smart TV WS API wrapper\n\n\"\"\"\n\nclass SamsungTVShortcuts:\n    def __init__(self, remote):\n        self.remote = remote\n\n    # power\n    def power(self):\n        self.remote.send_key('KEY_POWER')"
  },
  {
    "path": "commands/remote-control/samsung-tv/turn-off.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and place your TVs IP address within the host parameter\n# You need to copy samsunghelper.py, samsungshortcuts.py, and samsungexceptions.py next to \n# the enabled script command otherwise it won't work.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn Off TV\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.packageName Samsung TV\n# @raycast.icon images/logo.png\n\n# Documentation:\n# @raycast.author Darryl Brooks\n# @raycast.authorURL https://github.com/DarrylBrooks97\n# @raycast.description Turns off a Samsung TV.\n\nimport sys\nimport os\nfrom samsunghelper import SamsungTVWS\n\nsys.path.append('../')\n\n# Your TVs IP Address should be within the TV's network settings menu\nip_address = '192.168.0.00'\n\n# This will allow one time authentication on the TV.\n# Caches TV ssl token for later use.\ntoken_file = os.path.dirname(os.path.realpath(__file__)) + '/tv-token.txt'\n\ntv = SamsungTVWS(host=ip_address, port=8002,token_file=token_file)\n\ntv.shortcuts().power()"
  },
  {
    "path": "commands/remote-control/samsung-tv/turn-on.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set your TVs MAC Address as a parameter.\n# You need to copy samsunghelper.py, samsungshortcuts.py and samsungexceptions.py next to the script command\n# otherwise it won't work.\n\n# Dependency: This script requires the following Python libraries: `wakeonlan`\n# Install them with `pip3 install wakeonlan`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Turn On TV\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.packageName Samsung TV\n# @raycast.icon images/logo.png\n\n# Documentation:\n# @raycast.author Darryl Brooks\n# @raycast.authorURL https://github.com/DarrylBrooks97\n# @raycast.description Turns on a Samsung TV.\n\nimport wakeonlan\n\n# Your TVs MAC Address should be within the TV's network settings menu\nmac_address = '00:00:00:00:00:00'\n\nwakeonlan.send_magic_packet(mac_address)"
  },
  {
    "path": "commands/system/Low Power Mode.sh",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Low Power Mode\n# @raycast.mode silent\n\n# @raycast.icon 🔋\n# @raycast.author Kailash Yellareddy\n# @raycast.authorURL https://github.com/kyellareddy\n\non getLowPowerMode(str)\n    set trimmedStr to do shell script \"echo \" & quoted form of str & \" | xargs\" -- trim trailing spaces\n    set lastChar to character (length of trimmedStr) of trimmedStr -- get last character\n    set mode to lastChar as number -- convert to number\n    return mode\nend getLowPowerMode\ntell application \"System Settings\"\n    set output to do shell script \"pmset -g | grep lowpowermode\" \nend tell\nset result to getLowPowerMode(output)\nif result = 0 then\n    tell application \"System Settings\"\n        do shell script \"pmset -a lowpowermode 1\" with administrator privileges\n    end tell\n    do shell script \"echo Low Power Mode turned on.\"\nelse\n    tell application \"System Settings\"\n        do shell script \"pmset -a lowpowermode 0\" with administrator privileges\n    end tell\n\n# This makes the brightness 100% again, if it doesn't go all the way to 100% for you, change the number of times it repeats.\n    repeat 25 times\n        tell application \"System Events\"\n            key code 144\n        end tell\n    end repeat\nend if\n"
  },
  {
    "path": "commands/system/Network Info.sh",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Network Info\n# @raycast.mode fullOutput\n\n# @raycast.icon 🛜\n# @raycast.author Kailash Yellareddy\n# @raycast.authorURL https://github.com/kyellareddy\n\nimport urllib.request, json \nwith urllib.request.urlopen(\"http://ip-api.com/json\") as url:\n    data = json.load(url)\n\n    print(\"IP address:\", data[\"query\"])\n    print(\"ISP:\", data[\"isp\"])\n\n    print(\"City:\", data[\"city\"])\n    print(\"Region:\", data[\"regionName\"])\n    print(\"Country:\", data[\"country\"])\n    print(\"ZIP:\", data[\"zip\"])"
  },
  {
    "path": "commands/system/add-spacer-to-dock.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Add Spacer to Dock\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 💻\n\n# @Documentation:\n# @raycast.packageName System\n# @raycast.description Adds an invisible icon to the Dock as a separator.\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\ndefaults write com.apple.dock persistent-apps -array-add '{\"tile-type\"=\"spacer-tile\";}'\nkillall Dock\necho \"Added spacer to dock\"\n"
  },
  {
    "path": "commands/system/audio/airpodsbattery.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title AirPods Battery Level\n# @raycast.mode inline\n\n# Optional parameters:\n# @raycast.icon ⚡️\n# @raycast.packageName Audio\n# @raycast.refreshTime 10m\n\n# Documentation:\n# @raycast.description Get the current battery status of your AirPods.\n# @raycast.author Quentin Eude\n# @raycast.authorURL https://www.github.com/qeude\n\n# This should be changed every time new AirPods models are released.\nairpods_product_ids=(\"0x200E\" \"0x200F\" \"0x2002\" \"0x2013\")\nairpods_max_product_ids=(\"0x200A\")\ndelimiter=\"    🎧    \"\n\nfunction join_by { local d=${1-} f=${2-}; if shift 2; then printf %s \"$f\" \"${@/#/$d}\"; fi; }\n\nsystem_profiler=$(system_profiler SPBluetoothDataType 2>/dev/null)\nmac_addresses=($(grep -b2 \"Minor Type: Headphones\"<<<\"${system_profiler}\" | awk '/Address/{print $3}'))\nairpods_list=()\nfor i in \"${mac_addresses[@]}\"; do\n    mac_address_system_profiler=$(grep -ia11 \"${i}\"<<<\"${system_profiler}\")\n    # $(grep -ia11 \"${mac_addr}\"<<<\"${system_profiler}\"|awk '/Product ID/{print $3}')\n    product_id=$(echo \"$mac_address_system_profiler\" | awk '/Product ID/{print $3}')\n    if [[ ! \"${airpods_product_ids[*]}\" =~ $product_id && ! \"${airpods_max_product_ids[*]}\" =~ $product_id ]]; then\n        continue\n    fi\n    airpods_list+=(\"$i,$product_id,$(echo \"$mac_address_system_profiler\" | awk '{if ($0 ~ /Connected: Yes/) {print 1} else if ($0 ~ /Connected: No/) {print 0}}')\")\ndone\n\nif [[ \"${airpods_list[*]}\" =~ \",1\" ]]; then\n    # Started here, we are going to assume that we only take the first connected AirPods\n    mac_address=${airpods_list[0]%,*,*}\n    temp=${airpods_list[0]#*,*}\n    product_id=${temp%*,*}\n    default=$(grep -ia6 '\"'\"${mac_address}\"'\"'<<<\"$(defaults read /Library/Preferences/com.apple.Bluetooth)\")\n    if [[ \"${airpods_product_ids[*]}\" =~ $product_id ]]; then\n        battery_infos=(\"BatteryPercentCase,Case\" \"BatteryPercentLeft,Left\" \"BatteryPercentRight,Right\")\n        declare -a result_array\n        for i in \"${battery_infos[@]}\"; do\n            key=${i%,*};\n            val=${i#*,};\n            battery_level=$(echo \"$default\" | grep \"$key\" | tr -d \\; | awk '{print $3}')\n            # Not displaying info when battery level is 0% since it means not connected for the system\n            # When batteries are empty, the device will stay at 1%\n            if [[ $battery_level == 0 ]]; then\n                continue\n            fi\n            result_array+=(\"$val $battery_level%\")\n        done\n        join_by \"$delimiter\" \"${result_array[@]}\"\n        exit 0\n    elif [[ \" ${airpods_max_product_ids[*]} \" =~ ${product_id} ]]; then\n        battery_single=$(echo \"$default\" | grep BatteryPercentSingle | tr -d \\; | awk '{print $3}')\n        echo \"🎧 $battery_single%\"\n        exit 0\n    else\n        echo \"No AirPods connected. 🤷\"\n        exit 0\n    fi\nelse\n    echo \"No AirPods connected. 🤷\"\n    exit 0\nfi\n"
  },
  {
    "path": "commands/system/audio/audio-output-switch.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename,\n# Replace all instances of <Device Name> with the name of your desired audio output device\n\n# @raycast.schemaVersion 1\n# @raycast.title Switch Audio to <Device Name>\n# @raycast.mode silent\n\n# @raycast.packageName Audio\n# @raycast.icon 🔊\n\n# @raycast.author mmerle\n# @raycast.authorURL https://github.com/mmerle\n# @raycast.description Switch audio output to desired device.\n\nset asrc to \"<Device Name>\"\n\ntell application \"System Preferences\"\n\n\treveal anchor \"output\" of pane id \"com.apple.preference.sound\"\n\t\n\tdelay 1\n\t\n\ttell application \"System Events\"\n\t\ttell process \"System Preferences\"\n\t\t\tselect (row 1 of table 1 of scroll area 1 of tab group 1 of window \"Sound\" whose value of text field 1 is asrc)\n\t\tend tell\n\tend tell\n\t\n\tquit\n\t\nend tell\n\ndo shell script \"echo Audio switched to <Device Name>\"\n"
  },
  {
    "path": "commands/system/audio/bluetooth-headphones-battery-level.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Headphones Battery Level\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🎧\n# @raycast.packageName Audio\n\n# Documentation:\n# @raycast.description Get the battery level of your bluetooth headphones\n# @raycast.author Mortada Sarheed\n# @raycast.authorURL https://github.com/mSarheed\n\n# Find the mac address of your headhpones by holding down option-key (⌥) (+ click on your bluetooth icon in the menubar or control centre. \n# The mac address for your headphones should look something like this A1-23-45-B6-C7, change the dashes(-) to colons (:), so A1:23:45:B6:C7\nmacAddr=\"XX:XX:XX:XX:XX\"\n\ncall=\"system_profiler SPBluetoothDataType\"\n\n# Finds the name of the Headphones\nheadphonesName=$($call | grep -B1 \"$macAddr\" | head -n 1 | sed 's/.$//')\n\nbatteryLevel=$($call | grep -A4 \"$macAddr\" | grep 'Battery Level:' | grep -Eo '[0-9]{1,4}')\n\n\nif [ \"$batteryLevel\" != \"\" ]; then\necho '🔋'$headphonesName' is at '$batteryLevel'% 🔋'\nelse\necho \"🎧 Headphones aren't connected 🤷🏻‍♂️\"\nfi\n"
  },
  {
    "path": "commands/system/audio/get-audio-devices.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Audio devices\n// @raycast.mode fullOutput\n\n// Optional parameters:\n// @raycast.icon 🔈\n// @raycast.packageName Audio\n\n// Documentation:\n// @raycast.description Lists all audio devices\n// @raycast.author Roland Leth\n// @raycast.authorURL https://runtimesharks.com\n\nimport Foundation\nimport CoreAudio\n\n// Based on https://stackoverflow.com/a/58618034/793916\n\n// Equivalent of kAudioObjectPropertyElementMain to prevent SDK compatibility issues.\nprivate let audioObjectPropertyElementMain: AudioObjectPropertyElement = 0\n\nfinal class AudioDevice {\n\n\tlet audioDeviceID: AudioDeviceID\n\n\tinit(deviceID: AudioDeviceID) {\n\t\tself.audioDeviceID = deviceID\n\t}\n\n\tvar hasOutput: Bool {\n\t\tvar address: AudioObjectPropertyAddress = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioDevicePropertyStreamConfiguration),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar propSize: UInt32 = 0\n\t\tvar result = AudioObjectGetPropertyDataSize(\n\t\t\taudioDeviceID,\n\t\t\t&address,\n\t\t\t0,\n\t\t\tnil,\n\t\t\t&propSize)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet bufferList = UnsafeMutablePointer<AudioBufferList>.allocate(capacity: Int(propSize))\n\n\t\tdefer {\n\t\t\tbufferList.deallocate()\n\t\t}\n\n\t\tresult = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, bufferList)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet buffers = UnsafeMutableAudioBufferListPointer(bufferList)\n\n\t\treturn buffers.contains { $0.mNumberChannels > 0 }\n\t}\n\n\tvar name: String? {\n\t\tvar address = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioObjectPropertyName),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar name: CFString? = nil\n\t\tvar propSize = UInt32(MemoryLayout<CFString?>.size)\n\t\tlet result = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, &name)\n\n\t\tif (result != 0) {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn name as String?\n\t}\n\n}\n\nfunc findDevices() -> [AudioDevice] {\n\tvar address = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(kAudioHardwarePropertyDevices),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tvar propSize: UInt32 = 0\n\tvar result = AudioObjectGetPropertyDataSize(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyDataSize\")\n\t\treturn []\n\t}\n\n\tlet numDevices = Int(propSize / UInt32(MemoryLayout<AudioDeviceID>.size))\n\tvar devids = Array<AudioDeviceID>(repeating: AudioDeviceID(), count: numDevices)\n\n\tresult = AudioObjectGetPropertyData(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize,\n\t\t&devids)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyData\")\n\t\treturn []\n\t}\n\n\treturn (0..<numDevices).compactMap { i in\n\t\tAudioDevice(deviceID: devids[i])\n\t}\n\n}\n\nlet devices = findDevices()\nlet inputs = devices.filter { !$0.hasOutput }\nlet outputs = devices.filter { $0.hasOutput }\n\nfunc selectedDevice(output: Bool) -> String? {\n\tvar id = AudioObjectID(kAudioObjectSystemObject)\n\tvar idSize = UInt32(MemoryLayout.size(ofValue: id))\n\tlet selector = output\n\t\t? kAudioHardwarePropertyDefaultOutputDevice\n\t\t: kAudioHardwarePropertyDefaultInputDevice\n\n\tvar idPropertyAddress = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(selector),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tlet result = AudioObjectGetPropertyData(\n\t\tid,\n\t\t&idPropertyAddress,\n\t\t0,\n\t\tnil,\n\t\t&idSize,\n\t\t&id)\n\n\tif (result != 0) {\n\t\treturn nil\n\t}\n\n\treturn (output ? outputs : inputs).first { $0.audioDeviceID == id }?.name\n}\n\nlet outputDevice = selectedDevice(output: true)\nlet inputDevice = selectedDevice(output: false)\n\nlet inputNames = inputs\n\t.compactMap(\\.name)\n\t.map { inputDevice == $0 ? \"* \\($0)\" : $0 }\n\t.sorted()\n\t.joined(separator: \"\\n\")\nlet outputNames = outputs\n\t.compactMap(\\.name)\n\t.map { outputDevice == $0 ? \"* \\($0)\" : $0 }\n\t.sorted()\n\t.joined(separator: \"\\n\")\n\nprint(\"Inputs:\\n\\(inputNames)\\n\\nOutputs:\\n\\(outputNames)\")\n"
  },
  {
    "path": "commands/system/audio/get-selected-audio-device.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Audio devices\n// @raycast.mode inline\n// @raycast.refreshTime 10m\n\n// Optional parameters:\n// @raycast.icon 🔈\n// @raycast.packageName Audio\n\n// Documentation:\n// @raycast.description Shows the selected audio devices for input and output\n// @raycast.author Roland Leth\n// @raycast.authorURL https://runtimesharks.com\n\nimport Foundation\nimport CoreAudio\n\n// Based on https://stackoverflow.com/a/58618034/793916\n\n// Equivalent of kAudioObjectPropertyElementMain to prevent SDK compatibility issues.\nprivate let audioObjectPropertyElementMain: AudioObjectPropertyElement = 0\n\nfinal class AudioDevice {\n\n\tlet audioDeviceID: AudioDeviceID\n\n\tinit(deviceID: AudioDeviceID) {\n\t\tself.audioDeviceID = deviceID\n\t}\n\n\tvar hasOutput: Bool {\n\t\tvar address: AudioObjectPropertyAddress = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioDevicePropertyStreamConfiguration),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar propSize: UInt32 = 0\n\t\tvar result = AudioObjectGetPropertyDataSize(\n\t\t\taudioDeviceID,\n\t\t\t&address,\n\t\t\t0,\n\t\t\tnil,\n\t\t\t&propSize)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet bufferList = UnsafeMutablePointer<AudioBufferList>.allocate(capacity: Int(propSize))\n\n\t\tdefer {\n\t\t\tbufferList.deallocate()\n\t\t}\n\n\t\tresult = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, bufferList)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet buffers = UnsafeMutableAudioBufferListPointer(bufferList)\n\n\t\treturn buffers.contains { $0.mNumberChannels > 0 }\n\t}\n\n\tvar name: String? {\n\t\tvar address = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioObjectPropertyName),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar name: CFString? = nil\n\t\tvar propSize = UInt32(MemoryLayout<CFString?>.size)\n\t\tlet result = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, &name)\n\n\t\tif (result != 0) {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn name as String?\n\t}\n\n}\n\nfunc findDevices() -> [AudioDevice] {\n\tvar address = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(kAudioHardwarePropertyDevices),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tvar propSize: UInt32 = 0\n\tvar result = AudioObjectGetPropertyDataSize(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyDataSize\")\n\t\treturn []\n\t}\n\n\tlet numDevices = Int(propSize / UInt32(MemoryLayout<AudioDeviceID>.size))\n\tvar devids = Array<AudioDeviceID>(repeating: AudioDeviceID(), count: numDevices)\n\n\tresult = AudioObjectGetPropertyData(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize,\n\t\t&devids)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyData\")\n\t\treturn []\n\t}\n\n\treturn (0..<numDevices).compactMap { i in\n\t\tAudioDevice(deviceID: devids[i])\n\t}\n\n}\n\nlet devices = findDevices()\nlet inputs = devices.filter { !$0.hasOutput }\nlet outputs = devices.filter { $0.hasOutput }\n\nfunc selectedDevice(output: Bool) -> String? {\n\tvar id = AudioObjectID(kAudioObjectSystemObject)\n\tvar idSize = UInt32(MemoryLayout.size(ofValue: id))\n\tlet selector = output\n\t\t? kAudioHardwarePropertyDefaultOutputDevice\n\t\t: kAudioHardwarePropertyDefaultInputDevice\n\n\tvar idPropertyAddress = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(selector),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tlet result = AudioObjectGetPropertyData(\n\t\tid,\n\t\t&idPropertyAddress,\n\t\t0,\n\t\tnil,\n\t\t&idSize,\n\t\t&id)\n\n\tif (result != 0) {\n\t\treturn nil\n\t}\n\n\treturn (output ? outputs : inputs).first { $0.audioDeviceID == id }?.name\n}\n\nlet outputDevice = selectedDevice(output: true)\nlet inputDevice = selectedDevice(output: false)\n\nlet inputName = inputs\n\t.compactMap(\\.name)\n\t.filter { inputDevice == $0 }\n\t.first\nlet outputName = outputs\n\t.compactMap(\\.name)\n\t.filter { outputDevice == $0 }\n\t.first\n\nswitch (inputName, outputName) {\ncase (let inputName?, let outputName?):\n\tprint(\"\\(inputName)  |  \\(outputName)\")\ncase (let inputName?, nil):\n\tprint(\"\\(inputName)\")\ncase (nil, let outputName?):\n\tprint(\"\\(outputName)\")\ncase (nil, nil):\n\tprint(\"No devices found\")\n}\n\n"
  },
  {
    "path": "commands/system/audio/reload-coreaudio.sh",
    "content": "#!/bin/zsh\n\n# @raycast.schemaVersion 1\n# @raycast.title Reload CoreAudio\n# @raycast.mode silent\n# @raycast.author Maxim Krouk\n# @raycast.authorURL https://github.com/maximkrouk\n# @raycast.description Reloads CoreAudio.\n# @raycast.icon 🎧\n# @raycast.packageName System\n\nsudo launchctl stop com.apple.audio.coreaudiod && sudo launchctl start com.apple.audio.coreaudiod\necho \"Done\"\n\n"
  },
  {
    "path": "commands/system/audio/set-audio-device.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Set audio device\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 🎧\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\" }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Type (i/o/b)\", \"optional\": true }\n// @raycast.packageName Audio\n\n// Documentation:\n// @raycast.description Sets the input (i), the output (o) or both (b) audio sources, based on name. If `both` is passed, but no input or output device is found with the given name, it will still try to set the other one. For example, if you're trying to set both to \"External mic\", which doesn't have an input source, it will still set the output to the mic; vice-versa for a speaker.\n// @raycast.author Roland Leth\n// @raycast.authorURL https://runtimesharks.com\n\n// Change lines 29 and 30 if you'd like another default,\n// which currently sets both when no parameter is passed.\n\nlet arguments = Array(CommandLine.arguments.dropFirst())\nlet query = arguments.first!\nlet changeType: DeviceType = arguments.count >= 2\n\t? [\"input\", \"i\"].contains(arguments[1])\n\t\t? .input\n\t\t: [\"output\", \"o\"].contains(arguments[1])\n\t\t\t? .output\n\t\t\t: .both\n\t: .both\n\nimport Foundation\nimport CoreAudio\n\n// Based on https://stackoverflow.com/a/58618034/793916\n\n// Equivalent of kAudioObjectPropertyElementMain to prevent SDK compatibility issues.\nprivate let audioObjectPropertyElementMain: AudioObjectPropertyElement = 0\n\nstruct DeviceType: OptionSet {\n\n\tstatic let input = DeviceType(rawValue: 1 << 0)\n\tstatic let output = DeviceType(rawValue: 1 << 1)\n\tstatic let both: DeviceType = [.input, .output]\n\n\tlet rawValue: Int\n\n\tvar value: String {\n\t\tswitch self {\n\t\tcase .input:\n\t\t\treturn \"input\"\n\t\tcase .output:\n\t\t\treturn \"output\"\n\t\tcase .both:\n\t\t\treturn \"both\"\n\t\tdefault:\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n}\n\nfinal class AudioDevice {\n\n\tlet audioDeviceID: AudioDeviceID\n\n\tinit(deviceID: AudioDeviceID) {\n\t\tself.audioDeviceID = deviceID\n\t}\n\n\tvar hasOutput: Bool {\n\t\tvar address = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioDevicePropertyStreamConfiguration),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar propSize = UInt32(MemoryLayout<CFString?>.size)\n\t\tvar result = AudioObjectGetPropertyDataSize(audioDeviceID, &address, 0, nil, &propSize)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet bufferList = UnsafeMutablePointer<AudioBufferList>.allocate(capacity: Int(propSize))\n\n\t\tdefer {\n\t\t\tbufferList.deallocate()\n\t\t}\n\n\t\tresult = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, bufferList)\n\n\t\tif (result != 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet buffers = UnsafeMutableAudioBufferListPointer(bufferList)\n\n\t\treturn buffers.contains { $0.mNumberChannels > 0 }\n\t}\n\n\tvar name: String? {\n\t\tvar address = AudioObjectPropertyAddress(\n\t\t\tmSelector: AudioObjectPropertySelector(kAudioObjectPropertyName),\n\t\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\t\tmElement: audioObjectPropertyElementMain)\n\n\t\tvar name: CFString? = nil\n\t\tvar propSize = UInt32(MemoryLayout<CFString?>.size)\n\t\tlet result = AudioObjectGetPropertyData(audioDeviceID, &address, 0, nil, &propSize, &name)\n\n\t\tif (result != 0) {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn name as String?\n\t}\n\n}\n\nfunc findDevices() -> [AudioDevice] {\n\tvar propSize: UInt32 = 0\n\n\tvar address = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(kAudioHardwarePropertyDevices),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tvar result = AudioObjectGetPropertyDataSize(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyDataSize\")\n\t\treturn []\n\t}\n\n\tlet numDevices = Int(propSize / UInt32(MemoryLayout<AudioDeviceID>.size))\n\tvar devids = Array<AudioDeviceID>(repeating: AudioDeviceID(), count: numDevices)\n\n\tresult = AudioObjectGetPropertyData(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&address,\n\t\t0,\n\t\tnil,\n\t\t&propSize,\n\t\t&devids)\n\n\tif (result != 0) {\n\t\tprint(\"Error \\(result) from AudioObjectGetPropertyData\")\n\t\treturn []\n\t}\n\n\treturn (0..<numDevices).compactMap { i in\n\t\tAudioDevice(deviceID: devids[i])\n\t}\n\n}\n\n@discardableResult\nfunc set(_ deviceType: DeviceType, to query: String) -> (Bool, String) {\n\tlet devices = findDevices()\n\n\tguard\n\t\tlet device = devices.first(where: {\n\t\t\t$0.name?.localizedCaseInsensitiveContains(query) == true\n\t\t\t\t && (deviceType.contains(.input) ? !$0.hasOutput : $0.hasOutput)\n\t\t})\n\telse {\n\t\treturn (false, query)\n\t}\n\n\tlet deviceName = device.name ?? query\n\tvar deviceId = device.audioDeviceID\n\tlet deviceIdSize = UInt32(MemoryLayout.size(ofValue: deviceId))\n\tlet selector = deviceType.contains(.input)\n\t\t? kAudioHardwarePropertyDefaultInputDevice\n\t\t: kAudioHardwarePropertyDefaultOutputDevice\n\n\tvar deviceIdPropertyAddress = AudioObjectPropertyAddress(\n\t\tmSelector: AudioObjectPropertySelector(selector),\n\t\tmScope: AudioObjectPropertyScope(kAudioObjectPropertyScopeGlobal),\n\t\tmElement: audioObjectPropertyElementMain)\n\n\tlet result = AudioObjectSetPropertyData(\n\t\tAudioObjectID(kAudioObjectSystemObject),\n\t\t&deviceIdPropertyAddress,\n\t\t0,\n\t\tnil,\n\t\tdeviceIdSize,\n\t\t&deviceId)\n\n\tif (result != 0) {\n\t\treturn (false, deviceName)\n\t}\n\n\treturn (true, deviceName)\n}\n\nswitch changeType {\ncase .input,\n\t .output:\n\tlet  i = set(changeType, to: query)\n\n\tguard i.0 else {\n\t\tprint(\"Could not set \\(changeType.value) to \\(i.1)\")\n\t\texit(1)\n\t}\n\n\tprint(\"Set \\(changeType.value) to \\(i.1)\")\ncase .both:\n\tlet i = set(.input, to: query)\n\tlet o = set(.output, to: query)\n\n\tswitch (i.0, o.0) {\n\tcase (false, false):\n\t\tprint(\"Could not set any device to \\(i.1)\")\n\tcase (true, false):\n\t\tprint(\"Set input to \\(i.1)\")\n\tcase (false, true):\n\t\tprint(\"Set output to \\(i.1)\")\n\tcase (true, true):\n\t\tprint(\"Set both to \\(i.1) & \\(o.1)\")\n\t}\ndefault:\n\texit(1)\n}\n"
  },
  {
    "path": "commands/system/audio/toggle-airpods.template.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Toggle AirPods\n// @raycast.mode silent\n// @raycast.packageName Audio\n//\n// Optional parameters:\n// @raycast.icon images/airpod.png\n//\n// Documentation:\n// @raycast.description Toggle AirPods bluetooth device\n// @raycast.author Nichlas W. Andersen\n// @raycast.authorURL https://github.com/itsnwa\n\nimport IOBluetooth\n\n// Get your device's MAC address by option (⌥) + clicking the bluetooth icon in the menu bar\nlet deviceAddress = \"\"\n\nfunc toggleAirPods() {\n    guard let bluetoothDevice = IOBluetoothDevice(addressString: deviceAddress) else {\n        print(\"Device not found\")\n        exit(1)\n    }\n\n    if !bluetoothDevice.isPaired() {\n        print(\"Device not paired\")\n        exit(1)\n    }\n\n    if bluetoothDevice.isConnected() {\n        print(\"AirPods Disconnected\")\n        bluetoothDevice.closeConnection()\n    } else {\n        print(\"AirPods Connected\")\n        bluetoothDevice.openConnection()\n    }\n}\n\ntoggleAirPods()\n"
  },
  {
    "path": "commands/system/audio/toggle-mic.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Microphone\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🎙\n\n# Documentation:\n# @raycast.author Matthew Morek\n# @raycast.authorURL https://github.com/matthewmorek\n# @raycast.description Toggles microphone.\n\n\non getMicrophoneVolume()\n\tinput volume of (get volume settings)\nend getMicrophoneVolume\non disableMicrophone()\n\tset volume input volume 0\n\tlog \"Microphone turned off 🔴\"\nend disableMicrophone\non enableMicrophone()\n\tset volume input volume 100\n\tlog \"Microphone turned on 🟢\"\nend enableMicrophone\n\nif getMicrophoneVolume() is greater than 0 then\n\tdisableMicrophone()\nelse\n\tenableMicrophone()\nend if\n"
  },
  {
    "path": "commands/system/audio/toggle-mute-notification-sounds.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Mute Notifcation Sounds\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🔔\n\n# Documentation:\n# @raycast.author Annie Ma\n# @raycast.authorURL http://www.anniema.co/\n# @raycast.description Toggles notification sounds.\n\nset volumeSettings to get volume settings\nset alertVolume to alert volume of volumeSettings\n\nif alertVolume > 0 then\n    set volume alert volume 0\n    display notification \"\" with title \"Muted notification sounds\"\nelse\n    set volume alert volume 100\n    display notification \"\" with title \"Unmuted notification sounds\"\nend if\n\n"
  },
  {
    "path": "commands/system/battery-info.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Battery Info\n# @raycast.mode inline\n# @raycast.refreshTime 3m\n# @raycast.packageName System\n\n#\n# Optional parameters:\n# @raycast.icon 🔋\n#\n# Documentation:\n# @raycast.description Get Battery percentage, time remaining, charge status, charger wattage, total cycles etc.\n# @raycast.author Fahim Faisal\n# @raycast.authorURL https://github.com/i3p9\n\nBATT_PERCENTAGE=$(pmset -g batt | grep \"InternalBattery-0\" |  awk '{print $3}')\nCHARGE_STATUS=$(pmset -g batt | grep \"InternalBattery-0\" |  awk '{print $4}')\nTIME_REMAINING=$(pmset -g batt | grep \"InternalBattery-0\" |  awk '{print $5}')\nCYCLE_COUNT=$(system_profiler SPPowerDataType | grep \"Cycle Count\" | awk '{print $3}')\nCHARGE_WATT=$(pmset -g ac | grep \"Wattage\" | awk '{print $3}')\n\nBATT=${BATT_PERCENTAGE%??}\n\nif [[ \"$CHARGE_STATUS\" == \"charging;\" ]]; then\n    #Charging\n    if [[ \"$TIME_REMAINING\" == \"(no\" ]]; then\n        TO_SHOW=\"⚡${BATT}% - No Estimation Yet (Charging at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    else\n        if [[ \"$TIME_REMAINING\" != \"(no\" ]]; then\n            RE_MIN=${TIME_REMAINING##*:}\n            RE_HOUR=${TIME_REMAINING%%:*}\n            if [[ \"$RE_HOUR\" == \"0\" ]]; then\n                TIME_REMAINING_FORMATTED=\"${RE_MIN}m\"\n            else\n                TIME_REMAINING_FORMATTED=\"${RE_HOUR}h ${RE_MIN}m\"\n            fi\n        fi\n        TO_SHOW=\"⚡${BATT}% - ${TIME_REMAINING_FORMATTED} to Full (Charging at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    fi\nelif [[ \"$CHARGE_STATUS\" == \"finishing\" ]]; then\n    #Finishing Charning, xx:xx time remaining\n    TIME_REMAINING=$(pmset -g batt | grep \"InternalBattery-0\" |  awk '{print $6}')\n    RE_MIN=${TIME_REMAINING##*:}\n    RE_HOUR=${TIME_REMAINING%%:*}\n    if [[ \"$RE_HOUR\" == \"0\" ]]; then\n        if [[ \"$RE_MIN\" == \"00\" ]]; then\n            FULLY_CHARGED_FLAG=\"TRUE\"\n        fi\n        TIME_REMAINING_FORMATTED=\"${RE_MIN}m\"\n    else\n        TIME_REMAINING_FORMATTED=\"${RE_HOUR}h ${RE_MIN}m\"\n    fi\n\n    if [[ \"$TIME_REMAINING\" == \"(no\" ]]; then\n        TO_SHOW=\"⚡${BATT}% - No Estimation Yet (Charging at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    elif [[ \"$FULLY_CHARGED_FLAG\" = \"TRUE\" ]]; then\n        TO_SHOW=\"⚡${BATT}% - Fully Charged (Power Connected at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    else\n        TO_SHOW=\"⚡${BATT}% - ${TIME_REMAINING_FORMATTED} to Full (Charging at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    fi\n\nelif [[ \"$CHARGE_STATUS\" == \"charged;\" ]]; then\n    #Fully charged\n    TO_SHOW=\"⚡${BATT}% - Fully Charged (Power Connected at ${CHARGE_WATT}) - ${CYCLE_COUNT} Cycles\"\n   echo $TO_SHOW\n\nelif [[ \"$CHARGE_STATUS\" == \"discharging;\" ]]; then\n    #Discharging\n    if [[ \"$TIME_REMAINING\" == \"(no\" ]]; then\n        TO_SHOW=\"${BATT}% - No Estimation Yet - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    else\n        if [[ \"$TIME_REMAINING\" != \"(no\" ]]; then\n            RE_MIN=${TIME_REMAINING##*:}\n            RE_HOUR=${TIME_REMAINING%%:*}\n            if [[ \"$RE_HOUR\" == \"0\" ]]; then\n                TIME_REMAINING_FORMATTED=\"${RE_MIN}m\"\n            else\n                TIME_REMAINING_FORMATTED=\"${RE_HOUR}h ${RE_MIN}m\"\n            fi\n        fi\n        TO_SHOW=\"${BATT}% - ${TIME_REMAINING_FORMATTED} Remaining - ${CYCLE_COUNT} Cycles\"\n        echo $TO_SHOW\n    fi\nfi\n"
  },
  {
    "path": "commands/system/bluetooth.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Toggle Bluetooth\n# @raycast.author Vincent Dörig\n# @raycast.authorURL https://github.com/vincentdoerig\n# @raycast.description Toggle your Bluetooth connection.\n\n# @raycast.icon images/bluetooth.png\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.schemaVersion 1\n\n# set this variable to the equivalent of \"Control Center\" in your system language\nset ControlCenterWindow to \"Control Center\"\n\ntell application \"System Events\"\n  tell process \"ControlCenter\"\n    click menu bar item \"Bluetooth\" of menu bar 1\n    set BluetoothSwitch to checkbox \"Bluetooth\" of group 1 of window ControlCenterWindow\n    click BluetoothSwitch\n    delay 1\n    if value of BluetoothSwitch is 0 then\n      do shell script \"echo Bluetooth turned off\"\n    else\n      do shell script \"echo Bluetooth turned on\"\n    end if\n  end tell\nend tell\n"
  },
  {
    "path": "commands/system/brightness.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `brightness` cli installed: http://bergdesign.com/brightness/\n# Install via homebrew: `brew install brightness`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Brightness\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon ☀️\n# @raycast.packageName System brightness\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"brightness\", \"percentEncoded\": false }\n#\n# @Documentation:\n# @raycast.description Set system brightness\n# @raycast.author Antonio Dal Sie\n# @raycast.authorURL https://github.com/exodusanto\n\nbrightness $(awk '{print $1*$2}' <<<\"${1} 0.01\")\n"
  },
  {
    "path": "commands/system/caffeinate-disable.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disable Caffeinate\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon ☕️\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Stops all caffeinate sessions\n# @raycast.author Yan Smaliak\n# @raycast.authorURL https://github.com/ysmaliak\n\nkillall caffeinate\necho \"Disable caffeinate\"\n"
  },
  {
    "path": "commands/system/caffeinate-enable.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Enable Caffeinate\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon ☕️\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Time\", \"percentEncoded\": true, \"optional\": true }\n#\n# Documentation:\n# @raycast.description Starts a caffeinated session\n# @raycast.author Yan Smaliak\n# @raycast.authorURL https://github.com/ysmaliak\n\nif [ -z \"$1\" ]\nthen\n    killall caffeinate\n    caffeinate -t 3600 &>/dev/null &\n    echo \"Enable caffeinate for 1h\"\nelse\n    unit=$(echo -n $1 | tail -c 1)\n    timeValueLenght=$((${#1}-1))\n    timeValue=$(echo $1 | cut -c1-$timeValueLenght)\n    if [ \"$timeValue\" -eq \"$timeValue\" ] 2>/dev/null\n    then\n        if [[ $unit == \"s\" ]]\n        then\n            seconds=$(( $timeValue ))\n        elif [[ $unit == \"m\" ]]\n        then\n            seconds=$(( $timeValue*60 ))\n        elif [[ $unit == \"h\" ]]\n        then\n            seconds=$(( $timeValue*3600 ))\n        elif [[ $unit == \"d\" ]]\n        then\n            seconds=$(( $timeValue*86400 ))\n        else\n            echo \"Wrong time input!\"\n            exit 1\n        fi\n        killall caffeinate\n        caffeinate -t $seconds &>/dev/null &\n        echo \"Enable caffeinate for $1\"\n    else\n        echo \"Wrong time input!\"\n        exit 1\n    fi\nfi\n"
  },
  {
    "path": "commands/system/caffeinate-status.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Caffeinate\n# @raycast.mode inline\n# @raycast.packageName System\n# @raycast.refreshTime 30s\n#\n# Optional parameters:\n# @raycast.icon ☕️\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Shows caffeinate status\n# @raycast.author Yan Smaliak\n# @raycast.authorURL https://github.com/ysmaliak\n\ncaffeinate_ps=$(ps aux | grep '\\d caffeinate')\n\nif [ -z \"$caffeinate_ps\" ]\nthen\n    echo \"Caffeinate is not active\"\nelse\n    echo \"Caffeinate is running\"\nfi\n"
  },
  {
    "path": "commands/system/caffeinate-status.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Caffeinate\n// @raycast.mode inline\n// @raycast.packageName System\n// @raycast.refreshTime 30s\n//\n// Optional parameters:\n// @raycast.icon ☕️\n// @raycast.needsConfirmation false\n//\n// Documentation:\n// @raycast.description Shows caffeinate status and time left if it's running\n// @raycast.author Yan Smaliak\n// @raycast.authorURL https://github.com/ysmaliak\n\nimport Foundation\n\nfunc shell(_ command: String) -> String {\n    let task = Process()\n    let pipe = Pipe()\n    \n    task.standardOutput = pipe\n    task.standardError = pipe\n    task.arguments = [\"-c\", command]\n    task.launchPath = \"/bin/bash\"\n    task.launch()\n    \n    let data = pipe.fileHandleForReading.readDataToEndOfFile()\n    let output = String(data: data, encoding: .utf8)!\n    \n    return output\n}\n\nfunc secondsToDhm(_ seconds: Int) -> (Int, Int, Int) {\n    (seconds / 86400, (seconds % 86400) / 3600, (seconds % 3600) / 60)\n}\n\nlet caffeinate_processes = shell(\"ps aux -O lstart | grep '\\\\d caffeinate'\")\n\nif caffeinate_processes.isEmpty {\n    print(\"Caffeinate is not active\")\n    exit(0)\n}\n\nlet formatter = DateFormatter()\nformatter.dateFormat = \"E MMM d HH:mm:ss yyyy\"\nlet compactDateTimeFormatter = DateFormatter()\ncompactDateTimeFormatter.dateFormat = \"MMM d, HH:mm\"\n\nlet compactTimeFormatter = DateFormatter()\ncompactTimeFormatter.dateFormat = \"HH:mm\"\n\nlet currentDateTime = Date()\nvar maxDateTime: Date?\nvar latestStartDateTime: Date?\n\nlet separate_processes = caffeinate_processes.components(separatedBy: \"\\n\")\n\nseparate_processes.forEach { process in\n    let process_components = process\n        .components(separatedBy: \" \")\n        .filter { !$0.isEmpty }\n    \n    if !process_components.isEmpty {\n        let startDateTimeElements = [process_components[14], process_components[15], process_components[16], process_components[17], process_components[18]]\n        let startDateTimeString = startDateTimeElements.joined(separator:\" \")\n        if let startDateTime = formatter.date(from: startDateTimeString), let timeInterval = Double(process_components[24]) {\n            let endDateTime = startDateTime.addingTimeInterval(timeInterval)\n            if let maxTimeToCompare = maxDateTime {\n                if endDateTime > maxTimeToCompare {\n                    maxDateTime = endDateTime\n                    latestStartDateTime = startDateTime\n                }\n            } else {\n                maxDateTime = endDateTime\n                latestStartDateTime = startDateTime\n            }\n        } else {\n            print(\"Something went wrong!\")\n            exit(1)\n        }\n    }\n}\n\nif let maxDateTime = maxDateTime, let latestStartDateTime = latestStartDateTime {\n    let (d, h, m) = secondsToDhm(Int(maxDateTime - currentDateTime))\n    let hmString: String = (d > 0 ? \"\\(d)d \" : \"\") + (h > 0 ? \"\\(h)h \" : \"\") + (m > 0 ? \"\\(m)m\" : \"\")\n    let calendar = Calendar.current\n    let startDateTimeString = calendar.isDate(latestStartDateTime, inSameDayAs: currentDateTime) ?\n        \"at \\(compactTimeFormatter.string(from: latestStartDateTime))\" :\n        \"on \\(compactDateTimeFormatter.string(from: latestStartDateTime))\"\n    print(\"Started \\(startDateTimeString). Expires in \\(hmString)\")    \n} else {\n    print(\"Something went wrong!\")\n    exit(1)\n}\n\nextension Date {\n    static func - (lhs: Date, rhs: Date) -> TimeInterval {\n        return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate\n    }\n}\n"
  },
  {
    "path": "commands/system/capture-fullscreen-to-clipboard.sh",
    "content": "#!/bin/sh\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Fullscreen to Clipboard\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 💻\n#\n# Documentation:\n# @raycast.description This script screenshots the entire screen and saves it to the clipboard.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\nscreencapture -c\necho \"Screenshot saved to clipboard\"\n"
  },
  {
    "path": "commands/system/capture-fullscreen-to-desktop.sh",
    "content": "#!/bin/sh\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Fullscreen to Desktop\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 💻\n#\n# Documentation:\n# @raycast.description This script screenshots the entire screen and saves it to the desktop.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\nscreencapture ~/Desktop/\"Screen Shot $(date +\"%F at %-I.%M.%S %p\")\".png\necho \"Screenshot saved to desktop\"\n"
  },
  {
    "path": "commands/system/capture-screen-selection-to-clipboard.sh",
    "content": "#!/bin/sh\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Screen Selection to Clipboard\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 💻\n#\n# Documentation:\n# @raycast.description This script screenshots the selected area and saves it to the clipboard.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\nscreencapture -ci\necho \"Selection saved to clipboard\"\n"
  },
  {
    "path": "commands/system/capture-screen-selection-to-desktop.sh",
    "content": "#!/bin/sh\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Capture Screen Selection to Desktop\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 💻\n#\n# Documentation:\n# @raycast.description This script screenshots the selected area and saves it to the desktop.\n# @raycast.author Aaron Miller\n# @raycast.authorURL https://github.com/aaronhmiller\n\nscreencapture -i ~/Desktop/\"Screen Shot $(date +\"%F at %-I.%M.%S %p\")\".png\necho \"Selection saved to desktop\"\n"
  },
  {
    "path": "commands/system/close-finder-windows.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Close All Finder Windows\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 🔪\n#\n# Documentation:\n# @raycast.description Close all open Finder windows. \n# @raycast.author Alexander Steffen\n# @raycast.authorURL https://github.com/alexjsteffen\n\ntell application \"Finder\" to close windows\n"
  },
  {
    "path": "commands/system/copy-availability.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Copy Availability\n// @raycast.mode silent\n// @raycast.packageName System\n//\n// Optional parameters:\n// @raycast.icon 📅\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"9:00\", \"optional\": true }\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"17:00\", \"optional\": true }\n//\n// Documentation:\n// @raycast.description Copies the calendar availability of today.\n\nimport AppKit\nimport EventKit\n\nlet now = Date()\nlet calendar: Calendar = .current\n\ndo {\n  let workDay: (startDate: Date, endDate: Date)\n  let today: (startDate: Date, endDate: Date, events: [EKEvent])\n\n  do {\n    // Retrieve the range for today (from 00:00 to 23:59)\n    today.startDate = calendar.startOfDay(for: now)\n    today.endDate = calendar.date(byAdding: .day, value: 1, to: today.startDate)!\n    // Parse the optional arguments\n    let timeFormatter = DateFormatter()\n    timeFormatter.dateFormat = \"HH:mm\"\n    var arguments = try CommandLine.arguments.dropFirst().prefix(2).map { arg throws -> Date? in\n      var iterator = arg.split(separator: \":\").makeIterator()\n      guard let hours = iterator.next() else { return nil }\n      let minutes = iterator.next() ?? \"00\"\n      guard hours.allSatisfy(\\.isNumber),\n            minutes.allSatisfy(\\.isNumber),\n            let date = timeFormatter.date(from: \"\\(hours):\\(minutes)\") else { throw Error.invalidInput(arg) }\n      return date\n    }.makeIterator()\n    // Compose the working day range (checking that start is not after end)\n    workDay.startDate = arguments.next().flatMap { $0 } ?? calendar.date(bySettingHour: 9, minute: 0, second: 0, of: now)!\n    workDay.endDate = arguments.next().flatMap { $0 } ?? calendar.date(bySettingHour: 17, minute: 0, second: 0, of: now)!\n    guard workDay.startDate < workDay.endDate else { throw Error.invalidRange }\n    // Retrieve all the events for today\n    let store = EKEventStore()\n    let predicate = store.predicateForEvents(withStart: today.startDate, end: today.endDate, calendars: nil)\n    today.events = store.events(matching: predicate).filter { !$0.isAllDay }\n  }\n\n  let availability: String\n  if today.events.isEmpty {\n    availability = \"I'm available the full day.\"\n  } else if calendar.component(.hour, from: now) < 12,\n            today.events.allSatisfy({ calendar.component(.hour, from: $0.endDate) >= 12 }) {\n    availability = \"I'm available in the morning.\"\n  } else if today.events.allSatisfy({ calendar.component(.hour, from: $0.endDate) <= 11 }) {\n    availability = \"I'm available in the afternoon.\"\n  } else {\n    let allowedRange = workDay.startDate...workDay.endDate\n    let busy = busyRanges(during: allowedRange, events: today.events)\n    let available = availableRanges(during: allowedRange, busy: busy)\n    let timeFormatter = DateFormatter()\n    timeFormatter.dateStyle = .none\n    timeFormatter.timeStyle = .short\n    let availableTimes = available\n      .map { (from: timeFormatter.string(from: $0.lowerBound), to: timeFormatter.string(from: $0.upperBound)) }\n      .map { \"- \\($0.from) - \\($0.to)\" }\n      .joined(separator: \"\\n\")\n    availability = \"Here's my availability for today:\\n\\(availableTimes)\"\n  }\n\n  NSPasteboard.general.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n  NSPasteboard.general.setString(availability, forType: NSPasteboard.PasteboardType.string)\n  print(\"Copied availability\")\n} catch Error.invalidInput(let arg) {\n  print(\"Invalid date input: '\\(arg)'\")\n} catch Error.invalidRange {\n  print(\"The input date range is invalid\")\n} catch {\n  print(\"Unknown error.\")\n}\n\n\n// MARK: - Convenience\n\nprivate enum Error: Swift.Error {\n  case invalidInput(String)\n  case invalidRange\n}\n\nprivate func busyRanges(during allowedRange: ClosedRange<Date>, events: [EKEvent]) -> [ClosedRange<Date>] {\n  let busyRanges = events\n    .compactMap { $0.startDate...$0.endDate }\n    .sorted(by: { $0.lowerBound < $1.lowerBound })\n\n  var result: [ClosedRange<Date>] = []\n  for busy in busyRanges.sorted(by: { $0.lowerBound < $1.lowerBound }) {\n    guard busy.upperBound > allowedRange.lowerBound,\n          busy.lowerBound < allowedRange.upperBound else { continue }\n\n    let start = max(busy.lowerBound, allowedRange.lowerBound)\n    let end = min(busy.upperBound, allowedRange.upperBound)\n    guard start < end else { continue }\n\n    guard let last = result.last else {\n      result.append(start...end)\n      continue\n    }\n\n    if start > last.upperBound {\n      result.append(start...end)\n    } else {\n      result[result.endIndex - 1] = min(start, last.lowerBound)...max(end, last.upperBound)\n    }\n  }\n\n  return result\n}\n\nprivate func availableRanges(during allowedRange: ClosedRange<Date>, busy busyRanges: [ClosedRange<Date>]) -> [ClosedRange<Date>] {\n  var result: [ClosedRange<Date>] = []\n  var milestone: Date = allowedRange.lowerBound\n\n  for busy in busyRanges {\n    if busy.lowerBound > milestone {\n      result.append(milestone...busy.lowerBound)\n    }\n    milestone = busy.upperBound\n  }\n\n  if milestone < allowedRange.upperBound {\n    result.append(milestone...allowedRange.upperBound)\n  }\n\n  return result\n}\n"
  },
  {
    "path": "commands/system/copy-last-download.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Copy Last Download\n// @raycast.mode silent\n// @raycast.packageName System\n//\n// Optional parameters:\n// @raycast.icon 💁\n//\n// Documentation:\n// @raycast.description Copy the last downloaded file to the clipboard.\n\nimport AppKit\n\n// MARK: - Main\n\nguard let download = getLatestDownload() else {\n  print(\"No recent downloads\")\n  exit(1)\n}\n\ncopyToPasteboard(download)\nprint(\"Copied \\(download.lastPathComponent)\")\n\n// MARK: - Convenience\n\nfunc getLatestDownload() -> URL? {\n  guard let downloadsDirectory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first else { return nil }\n  return try? FileManager.default\n    .contentsOfDirectory(at: downloadsDirectory, includingPropertiesForKeys: [.addedToDirectoryDateKey], options: .skipsHiddenFiles)\n    .sorted { $0.addedToDirectoryDate > $1.addedToDirectoryDate }\n    .first\n}\n\nfunc copyToPasteboard(_ url: URL) {\n  NSPasteboard.general.clearContents()\n  NSPasteboard.general.writeObjects([url as NSPasteboardWriting])\n}\n\nextension URL {\n  var addedToDirectoryDate: Date {\n    return (try? resourceValues(forKeys: [.addedToDirectoryDateKey]).addedToDirectoryDate) ?? .distantPast\n  }\n}"
  },
  {
    "path": "commands/system/copy-last-screenshot.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Copy Last Screenshot\n// @raycast.mode silent\n// @raycast.packageName System\n\n// Optional parameters:\n// @raycast.icon 📸\n\n// Documentation:\n// @raycast.description Copies the last screenshot to the clipboard.\n\nimport Cocoa\n\n// MARK: - Main\n\nlet query = NSMetadataQuery()\nguard let lastScreenshot = query.searchScreenshots()?.first, let path = lastScreenshot.value(forAttribute: \"kMDItemPath\") as? String else {\n  print(\"Cannot find screenshot\")\n  exit(1)\n}\n\nlet fileURL = URL(fileURLWithPath: path)\nNSPasteboard.general.clearContents()\nNSPasteboard.general.writeObjects([fileURL as NSPasteboardWriting])\n\nprint(\"Copied last screenshot\")\n\n// MARK: - Convenience\n\nextension NSMetadataQuery {\n  func searchScreenshots() -> [NSMetadataItem]? {\n    predicate = NSPredicate(format: \"kMDItemIsScreenCapture = 1\")\n    sortDescriptors = [NSSortDescriptor(key: \"kMDItemFSCreationDate\", ascending: false)]\n\n    NotificationCenter.default.addObserver(forName: .NSMetadataQueryDidFinishGathering, object: nil, queue: nil) { [weak self] _ in\n      self?.disableUpdates()\n      self?.stop()\n      CFRunLoopStop(CFRunLoopGetCurrent());\n    }\n\n    guard start() else { return nil }\n\n    CFRunLoopRun()\n\n    return results.compactMap { $0 as? NSMetadataItem }\n  }\n}\n\n"
  },
  {
    "path": "commands/system/copy-selection-to-clipboard.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Finder Selection to Clipboard\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon ??\n#\n# Documentation:\n# @raycast.description Copy contents of selected items in Finder to the clipboard. If there's more than one file selected, they will be combined and added to the clipboard.\n# @raycast.author Felipe Turcheti\n# @raycast.authorURL https://felipeturcheti.com\n\non run\n\tlog \"Copying contents of the selected items to the clipboard...\"\n\n\ttell application \"Finder\"\n\t\t-- get Finder selected items\n\t\tset theItems to selection\n\tend tell\n\n\t-- create a list to store contents of all selected items\n\tset allContents to \"\"\n\n\t-- for each item in the Finder selection\n\trepeat with itemRef in theItems\n\t\t-- get the item path\n\t\tset theItem to POSIX path of (itemRef as string)\n\t\t-- read the content of the item\n\t\tset fileDescriptor to open for access (POSIX file theItem)\n\t\tset fileContent to read fileDescriptor for (get eof fileDescriptor)\n\t\tclose access fileDescriptor\n\t\t-- add the content to the list\n\t\tset allContents to allContents & fileContent & \"\n\"\n\tend repeat\n\n\t-- set the clipboard to the combined contents\n\tset the clipboard to allContents\nend run\n"
  },
  {
    "path": "commands/system/create-new-file-in-finder.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Create New File in Finder\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.description Create New File in Finder is a script to make your Finder better.You can use this script to create a plain text file.\n# Optional parameters:\n# @raycast.icon images/new-file.png\n\nset file_name to \"untitled\"\nset file_ext to \".txt\"\nset is_desktop to false\n\n-- get folder path and if we're in desktop (no folder opened)\ntry\n    tell application \"Finder\"\n        set this_folder to (folder of the front Finder window) as alias\n    end tell\non error\n    -- no open folder windows\n    set this_folder to path to desktop folder as alias\n    set is_desktop to true\nend try\n\n-- get the new file name (do not override an already existing file)\ntell application \"System Events\"\n    set file_list to get the name of every disk item of this_folder\nend tell\nset new_file to file_name & file_ext\nset x to 1\nrepeat\n    if new_file is in file_list then\n        set new_file to file_name & \" \" & x & file_ext\n        set x to x + 1\n    else\n        exit repeat\n    end if\nend repeat\n\n-- create and select the new file\ntell application \"Finder\"\n    activate\n    set the_file to make new file at folder this_folder with properties {name:new_file}\n    if is_desktop is false then\n        reveal the_file\n    else\n        select window of desktop\n        set selection to the_file\n        delay 0.1\n    end if\nend tell\n\n-- press enter (rename)\ntell application \"System Events\"\n    tell process \"Finder\"\n        keystroke return\n    end tell\nend tell\n"
  },
  {
    "path": "commands/system/create-new-file.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create New File\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📄\n\n# @Documentation:\n# @raycast.description Create files in the front window or desktop of the visit\n# @raycast.author LokHsu\n# @raycast.authorURL https://github.com/lokhsu\n\nset file_name to \"untitled\"\nset file_ext to \".txt\"\nset is_desktop to false\n\n-- get folder path\ntry\n    tell application \"Finder\"\n        set this_folder to folder of the front window as alias\n    end tell\non error   -- no open folder windows\n    set this_folder to path to desktop folder as alias\n    set is_desktop to true\nend try\n\n-- get the new file name (do not override an already existing file)\ntell application \"Finder\"\n    set file_list to name of every file of this_folder\nend tell\n\nset new_file to file_name & file_ext\nset x to 1\n\nrepeat\n    if new_file is in file_list then\n        set new_file to file_name & x & file_ext\n        set x to x + 1\n    else\n        exit repeat\n    end if\nend repeat\n\n-- create and select the new file\ntell application \"Finder\"\n    activate\n    set the_file to make new file at folder this_folder with properties {name:new_file}\n    if is_desktop is false then\n        reveal the_file\n    else\n        select window of desktop\n        set selection to the_file\n        delay 0.1\n    end if\nend tell\n\n-- press enter (rename)\ntell application \"System Events\"\n    tell process \"Finder\"\n    keystroke return\n    end tell\nend tell\n"
  },
  {
    "path": "commands/system/custom-window.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Custom Window Size\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon images/custom-window-size.png\n\n# Documentation:\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n# @raycast.description Resize and center the frontmost window to any custom size.\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Width\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Height\" }\n\non run argv\n\n\ttell application \"System Events\"\n\t\tset frontApp to name of first application process whose frontmost is true\n\tend tell\n\n\ttell application \"Finder\"\n    get bounds of window of desktop\n\tend tell\n\n\ttell application \"Finder\"\n    set desktopBounds to bounds of window of desktop\n    set screenWidth to item 3 of desktopBounds\n    set screenHeight to item 4 of desktopBounds\n\tend tell\n\n\tset theApp to frontApp\n\tset appWidth to \"\" & ( item 1 of argv )\n\tset appHeight to \"\" & ( item 2 of argv )\n\n\ttell application frontApp to activate\n\ttell application \"System Events\" to tell application process frontApp\n\t\ttry\n\t\t\tset size of window 1 to {appWidth, appHeight}\n\t\t\tset position of window 1 to {(screenWidth - appWidth) / 2.0, (screenHeight - appHeight) / 2.0}\n\t\ton error errmess\n\t\t\tlog errmess\n\t\t\t-- no window open\n\t\tend try\n\tend tell\nend run\n"
  },
  {
    "path": "commands/system/default-browser-arc.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Default to Arc\n# @raycast.mode silent\n# @raycast.packageName Browser\n\n# Optional parameters:\n# @raycast.icon images/arc.png\n\n# Documentation:\n# @raycast.author Marcos Sánchez-Dehesa\n# @raycast.authorURL https://github.com/dehesa\n# @raycast.description Set Arc as the default browser.\n\n# check to see what the current browser is\nset currentDefaultBrowser to my getCurrentDefaultBrowser()\n\nset repeatCount to 0\n\ntell application \"System Events\"\n\ttry\n\t\tmy changeDefaultBrowser(\"browser\")\n\t\trepeat until button 2 of window 1 of process \"CoreServicesUIAgent\" exists\n\t\t\tdelay 0.01\n\t\t\tset repeatCount to repeatCount + 1\n\t\t\tif repeatCount = 15 then exit repeat\n\t\tend repeat\n\t\ttry\n\t\t\t# if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to Arc.\n\t\t\tif currentDefaultBrowser contains \"com.google.chrome\" then\n                click button 1 of window 1 of process \"CoreServicesUIAgent\"\n            else    # otherwise click button 2 to change the default browser to Arc.\n                click button 2 of window 1 of process \"CoreServicesUIAgent\"\n            end if\n\t\t\tlog \"Arc is now your default browser\"\n\t\ton error\n\t\t\tlog \"Arc is already your default browser\"\n\t\tend try\n\ton error\n\t\tlog \"The \\\"defaultbrowser\\\" CLI tool is required: https://github.com/kerma/defaultbrowser 🔥\"\n\tend try\nend tell\n\nto getCurrentDefaultBrowser()\n    set filePath to \"~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist\"\n\n    set output to do shell script \"plutil -p \" & filePath & \" | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\\\"\\\\\\\"https\\\\\\\"\\\") print a}'\"\n    return output\nend getCurrentDefaultBrowser\n\nto changeDefaultBrowser(thebrowser)\n\tdo shell script \"\n\t\tif ! command -v defaultbrowser &> /dev/null; then\n  \t\texit 1\n\t\tfi\n\t\tdefaultbrowser \" & thebrowser & \"\n\t\texit 0\n\t\"\nend changeDefaultBrowser"
  },
  {
    "path": "commands/system/default-browser-chrome.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Default to Chrome\n# @raycast.mode silent\n# @raycast.packageName Browser\n\n# Optional parameters:\n# @raycast.icon images/chrome.png\n\n# Documentation:\n# @raycast.author Marcos Sánchez-Dehesa\n# @raycast.authorURL https://github.com/dehesa\n# @raycast.description Set Google Chrome as the default browser.\n\nset repeatCount to 0\n\ntell application \"System Events\"\n\ttry\n\t\tmy changeDefaultBrowser(\"chrome\")\n\t\trepeat until button 2 of window 1 of process \"CoreServicesUIAgent\" exists\n\t\t\tdelay 0.01\n\t\t\tset repeatCount to repeatCount + 1\n\t\t\tif repeatCount = 15 then exit repeat\n\t\tend repeat\n\t\ttry\n\t\t\tclick button 2 of window 1 of process \"CoreServicesUIAgent\"\n\t\t\tlog \"Google Chrome is now your default browser\"\n\t\ton error\n\t\t\tlog \"Google Chrome is already your default browser\"\n\t\tend try\n\ton error\n\t\tlog \"The \\\"defaultbrowser\\\" CLI tool is required: https://github.com/kerma/defaultbrowser 🔥\"\n\tend try\nend tell\n\nto changeDefaultBrowser(thebrowser)\n\tdo shell script \"\n\t\tif ! command -v defaultbrowser &> /dev/null; then\n  \t\texit 1\n\t\tfi\n\t\tdefaultbrowser \" & thebrowser & \"\n\t\texit 0\n\t\"\nend changeDefaultBrowser"
  },
  {
    "path": "commands/system/default-browser-chromium.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Default to Chromium\n# @raycast.mode silent\n# @raycast.packageName Browser\n\n# Optional parameters:\n# @raycast.icon images/chrome-icon.png\n\n# Documentation:\n# @raycast.author Marcos Sánchez-Dehesa\n# @raycast.authorURL https://github.com/dehesa\n# @raycast.description Set Chromium as the default browser.\n\nset repeatCount to 0\n\ntell application \"System Events\"\n\ttry\n\t\tmy changeDefaultBrowser(\"chromium\")\n\t\trepeat until button 2 of window 1 of process \"CoreServicesUIAgent\" exists\n\t\t\tdelay 0.01\n\t\t\tset repeatCount to repeatCount + 1\n\t\t\tif repeatCount = 15 then exit repeat\n\t\tend repeat\n\t\ttry\n\t\t\tclick button 2 of window 1 of process \"CoreServicesUIAgent\"\n\t\t\tlog \"Chromium is now your default browser\"\n\t\ton error\n\t\t\tlog \"Chromium is already your default browser\"\n\t\tend try\n\ton error\n\t\tlog \"The \\\"defaultbrowser\\\" CLI tool is required: https://github.com/kerma/defaultbrowser 🔥\"\n\tend try\nend tell\n\nto changeDefaultBrowser(thebrowser)\n\tdo shell script \"\n\t\tif ! command -v defaultbrowser &> /dev/null; then\n  \t\texit 1\n\t\tfi\n\t\tdefaultbrowser \" & thebrowser & \"\n\t\texit 0\n\t\"\nend changeDefaultBrowser"
  },
  {
    "path": "commands/system/default-browser-firefox.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Default to Firefox\n# @raycast.mode silent\n# @raycast.packageName Browser\n\n# Optional parameters:\n# @raycast.icon images/firefox.png\n\n# Documentation:\n# @raycast.author Marcos Sánchez-Dehesa\n# @raycast.authorURL https://github.com/dehesa\n# @raycast.description Set Firefox as the default browser.\n\n# check to see what the current browser is\nset currentDefaultBrowser to my getCurrentDefaultBrowser()\n\nset repeatCount to 0\n\ntell application \"System Events\"\n\ttry\n\t\tmy changeDefaultBrowser(\"firefox\")\n\t\trepeat until button 2 of window 1 of process \"CoreServicesUIAgent\" exists\n\t\t\tdelay 0.01\n\t\t\tset repeatCount to repeatCount + 1\n\t\t\tif repeatCount = 15 then exit repeat\n\t\tend repeat\n\t\ttry\n\t\t\t# if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to FF.\n\t\t\tif currentDefaultBrowser contains \"com.google.chrome\" then\n                click button 1 of window 1 of process \"CoreServicesUIAgent\"\n            else    # otherwise click button 2 to change the default browser to FF.\n                click button 2 of window 1 of process \"CoreServicesUIAgent\"\n            end if\n\t\t\tlog \"Firefox is now your default browser\"\n\t\ton error\n\t\t\tlog \"Firefox is already your default browser\"\n\t\tend try\n\ton error\n\t\tlog \"The \\\"defaultbrowser\\\" CLI tool is required: https://github.com/kerma/defaultbrowser 🔥\"\n\tend try\nend tell\n\nto getCurrentDefaultBrowser()\n    set filePath to \"~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist\"\n\n    set output to do shell script \"plutil -p \" & filePath & \" | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\\\"\\\\\\\"https\\\\\\\"\\\") print a}'\"\n    return output\nend getCurrentDefaultBrowser\n\nto changeDefaultBrowser(thebrowser)\n\tdo shell script \"\n\t\tif ! command -v defaultbrowser &> /dev/null; then\n  \t\texit 1\n\t\tfi\n\t\tdefaultbrowser \" & thebrowser & \"\n\t\texit 0\n\t\"\nend changeDefaultBrowser\n"
  },
  {
    "path": "commands/system/default-browser-front-most-app.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser/)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Set Frontmost App as Default Browser\n# @raycast.mode silent\n# Browser dev is developer version of Google Chrome\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Browser (chrome, dev, safari, firefox)\", \"optional\": true }\n\n# Optional parameters:\n# @raycast.packageName Browsing\n# @raycast.icon 🧭\n\n# Documentation:\n# @raycast.author Yohanes Bandung Bondowoso\n# @raycast.authorURL https://github.com/ybbond\n# @raycast.description Set Frontmost Web Browser as Default Browser.\n\n# raycastArgv is Raycast argument\non run {raycastArgv}\n\nif (raycastArgv is equal to \"\") then\n\n  tell application \"System Events\"\n    tell (first process whose frontmost is true)\n      set appName to displayed name\n    end tell\n  end tell\n\n  set browserName to appName\n\n  if (appName contains \"Brave Browser\") then\n    set browserName to \"browser\"\n  else if (appName is equal to \"Safari\") then\n    set browserName to \"safari\"\n  else if (appName is equal to \"Safari Technology Preview\") then\n    set browserName to \"safaritechnologypreview\"\n  else if (appName contains \"Firefox Dev\") then\n    set browserName to \"firefoxdeveloperedition\"\n  # set Google chrome dev as default browser\n  # it need to put before Chrome\n  else if (appName contains \"dev\") then\n    set browserName to \"dev\"\n  else if (appName contains \"Chrome\") then\n    set browserName to \"chrome\"\n  else if (appName is equal to \"Chromium\") then\n    set browserName to \"chromium\"\n  else if (appName is equal to \"Firefox\") then\n    set browserName to \"firefox\"\n  else if (appName is equal to \"SigmaOS\") then\n    set browserName to \"macos\"\n  else if (appName is equal to \"Arc\") then\n    set browserName to \"browser\"\n  end if\n\nelse\n  # appName is used for print log message\n  if (raycastArgv is equal to \"dev\")\n    set appName to \"Chrome dev\"\n  else\n     set appName to raycastArgv\n  end if\n  set browserName to raycastArgv\nend if  \n\n# display dialog (\"Set defaut browser is \" & raycastArgv & \"!\")\n\ntry\n\tset commandResult to do shell script \"defaultbrowser\" & space & browserName & space & \"2>/dev/null \"\n\t\n\tif (commandResult contains \"The command exited with a non-zero status\") then\n\t\tlog \"Shell command 'defaultbrowser' is required.\"\n\telse if (commandResult contains \"is already set as the default HTTP handler\" or commandResult is equal to \"\") then\n\t\tlog appName & space & \"already set as default browser\"\n\telse if (commandResult contains \"is not available as an HTTP handler\") then\n\t\tlog appName & space & \"is not a web browser, or not handled yet :(\"\n\tend if\non error errStr\n\tset commandResult to errStr\n\t\n\tif (commandResult contains \"The command exited with a non-zero status\") then\n\t\tlog \"Shell command 'defaultbrowser' is required.\"\n\telse if (commandResult contains \"is already set as the default HTTP handler\" or commandResult is equal to \"\") then\n\t\tlog appName & space & \"already set as default browser\"\n\telse if (commandResult contains \"is not available as an HTTP handler\") then\n\t\tlog appName & space & \"is not a web browser, or not handled yet :(\"\n\tend if\nend try\n\ntry\n\ttell application \"System Events\"\n\t\ttell application process \"CoreServicesUIAgent\"\n\t\t\ttell window 1\n\t\t\t\ttell (first button whose name starts with \"use\")\n\t\t\t\t\tperform action \"AXPress\"\n\t\t\t\t\tlog appName & space & \"set as default browser\"\n\t\t\t\tend tell\n\t\t\tend tell\n\t\tend tell\n\tend tell\nend try\n\nend run\n"
  },
  {
    "path": "commands/system/default-browser-safari.applescript",
    "content": "#!/usr/bin/osascript\n\n# Dependency: requires defaultbrowser (https://github.com/kerma/defaultbrowser)\n# Install via Homebrew: `brew install defaultbrowser`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Default to Safari\n# @raycast.mode silent\n# @raycast.packageName Browser\n\n# Optional parameters:\n# @raycast.icon images/safari.png\n\n# Documentation:\n# @raycast.author Marcos Sánchez-Dehesa\n# @raycast.authorURL https://github.com/dehesa\n# @raycast.description Set Safari as the default browser.\n\n# check to see what the current browser is\nset currentDefaultBrowser to my getCurrentDefaultBrowser()\n\nset repeatCount to 0\n\ntell application \"System Events\"\n\ttry\n\t\tmy changeDefaultBrowser(\"safari\")\n\t\trepeat until button 2 of window 1 of process \"CoreServicesUIAgent\" exists\n\t\t\tdelay 0.01\n\t\t\tset repeatCount to repeatCount + 1\n\t\t\tif repeatCount = 15 then exit repeat\n\t\tend repeat\n\t\ttry\n\t\t\t# if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to Safari.\n\t\t\tif currentDefaultBrowser contains \"com.google.chrome\" then\n                click button 1 of window 1 of process \"CoreServicesUIAgent\"\n            else    # otherwise click button 2 to change the default browser to Safari.\n                click button 2 of window 1 of process \"CoreServicesUIAgent\"\n            end if\n\t\t\tlog \"Safari is now your default browser\"\n\t\ton error\n\t\t\tlog \"Safari is already your default browser\"\n\t\tend try\n\ton error\n\t\tlog \"The \\\"defaultbrowser\\\" CLI tool is required: https://github.com/kerma/defaultbrowser 🔥\"\n\tend try\nend tell\n\nto getCurrentDefaultBrowser()\n    set filePath to \"~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist\"\n\n    set output to do shell script \"plutil -p \" & filePath & \" | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\\\"\\\\\\\"https\\\\\\\"\\\") print a}'\"\n    return output\nend getCurrentDefaultBrowser\n\nto changeDefaultBrowser(thebrowser)\n\tdo shell script \"\n\t\tif ! command -v defaultbrowser &> /dev/null; then\n  \t\texit 1\n\t\tfi\n\t\tdefaultbrowser \" & thebrowser & \"\n\t\texit 0\n\t\"\nend changeDefaultBrowser\n"
  },
  {
    "path": "commands/system/delete-selected-files.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Delete Selected Files\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🗑\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Move selected files in Finder to Trash\n# @raycast.author Vicent Gozalbes\n# @raycast.authorURL https://github.com/vigosan\n\nfile_count=$(osascript <<'ENDAPPLE'\ntell application \"Finder\"\n    set selectedItems to selection\n    if (count of selectedItems) is 0 then\n        return 0\n    end if\n\n    delete selectedItems\n    return count of selectedItems\nend tell\nENDAPPLE\n)\n\nif [ \"$file_count\" -eq 0 ]; then\n    exit 1\nfi\n\nif [ $file_count -eq 1 ]; then\n    message=\"1 item moved to Trash\"\nelse\n    message=\"$file_count items moved to Trash\"\nfi\n\nosascript -e \"display notification \\\"$message\\\" with title \\\"Trash\\\"\"\n"
  },
  {
    "path": "commands/system/disk-free.sh",
    "content": "#!/bin/bash\n\n# Addapted from existing Alfred workflow\n# https://github.com/packal/repository/tree/master/com.ctn.diskfree\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disk Free\n# @raycast.packageName Utils\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.packageName System\n# @raycast.icon 💾\n\n# Documentation:\n# @raycast.description Show free space in your mounted disks\n# @raycast.author Juan Luis Romero\n# @raycast.authorURL https://github.com/JuanluR8\n\n# EXAMPLE:\n# Macintosh HD:  95%  (361 Gb) free\n# 15 Gb used of 500 Gb total\n\nGREEN='\\033[1;32m'\nYELLOW='\\033[1;33m'\nRED='\\033[1;31m'\nNC='\\033[0;m' \n\nwhile read -r item; do\n\t[[ $item == /dev/* ]] || continue\n\n\titems=($item)\n\tpath=\"${items[@]:8}\"\n\t[[ \"$path\" == \"/\" ]] && name=\"$(diskutil info ${items[0]} | sed -nE 's/^ *Volume Name: +([^ ].*) *$/\\1/p')\" || name=\"${path##*/}\"\n\n\tsize=${items[1]:0:$((${#items[1]}-1))}\n\tsize_unit=${items[1]:$((${#items[1]}-1))}b\n\n\tused=${items[2]:0:$((${#items[2]}-1))}\n\tused_unit=${items[2]:$((${#items[2]}-1))}b\n\n\tfree=${items[3]:0:$((${#items[3]}-1))}\n\tfree_unit=${items[3]:$((${#items[3]}-1))}b\n\n\tperc=$((100-${items[4]:0:$((${#items[4]}-1))}))\n\n  color=$NC\n\n  if [[ perc -ge 70 ]]; then\n    color=$GREEN\n  elif [[ perc -lt 70 ]] && [[ perc -ge 30 ]]; then\n    color=$YELLOW\n  else\n    color=$RED\n  fi\n\n\techo -e $name':' ${color} $perc'%' ${NC} '('$free $free_unit') free'\n\techo $used $used_unit 'used of' $size $size_unit 'total'\n  echo ''\ndone < <(df -Hl)"
  },
  {
    "path": "commands/system/disk-usage.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disk Usage\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.icon 💿\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Show disk usage for / (root)\n# @raycast.author Jesse Claven\n# @raycast.authorURL https://github.com/jesse-c\n\n# Example:\n#\n# Filesystem       Size   Used  Avail Capacity iused      ifree %iused  Mounted on\n# /dev/disk1s6s1  113Gi   15Gi  3.4Gi    82%  563983 1182278497    0%   /\n\nx=$(df -h / | awk 'FNR == 2 {printf \"Root: %s available of %s\",$4,$2;}')\n\necho \"$x\"\n\n"
  },
  {
    "path": "commands/system/dismiss-notifications.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Dismiss Notifications\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔕\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Close all notification alerts staying on screen, e.g., Calendar notifications.\n# @raycast.author benyn\n# @raycast.authorURL github.com/benyn\n\ntell application \"System Events\" to tell process \"NotificationCenter\"\n\t-- Exit if there are no visible notifications.\n\tif not (window \"Notification Center\" exists) then return\n\n\t-- `notificationContainer` refers to the UI element (of class `group`) holding notifications and can be either:\n\t-- - A single, individual notification, or\n\t-- - A collection of individual notifications and groups of stacked notifications.\n\tset notificationContainer to a reference to group 1 of scroll area 1 of group 1 of group 1 of window \"Notification Center\"\n\n\t-- If it is a collection, close notifications and groups in reverse order to avoid index changes.\n\tset notificationGroups to a reference to groups of notificationContainer\n\trepeat with i from (number of notificationGroups) to 1 by -1\n\t\tset g to item i of notificationGroups\n\t\trepeat with a in (actions of g whose description is \"Close\" or description starts with \"Clear\")\n\t\t\t-- Ignore errors that happen if the last remaining item is an individual notification,\n\t\t\t-- and `notificationCenter` is no longer a `group` of `group`s.\n\t\t\t-- The final remaining notification will be closed in the second repeat statement below.\n\t\t\tignoring application responses\n\t\t\t\tperform a\n\t\t\tend ignoring\n\t\tend repeat\n\tend repeat\n\n\t-- Close the `notificationContainer` itself. This handles:\n\t-- - A single, individual notification that was `notificationContainer` from the start, or\n\t-- - The last remaining individual notification after the loop above.\n\trepeat with a in (actions of notificationContainer whose description is \"Close\" or description starts with \"Clear\")\n\t\tperform a\n\tend repeat\nend tell\n\n-- Prevent Raycast from displaying the successful result message.\nreturn\n"
  },
  {
    "path": "commands/system/dnd-off.sh",
    "content": "#!/bin/bash\n\n# Dependency: do-not-disturb-cli (https://github.com/sindresorhus/do-not-disturb-cli)\n# Install via npm: `npm install --global do-not-disturb-cli`\n\n## Contributions welcome for a reliable, dependency-free version.\n\n# @raycast.title Turn Off Do Not Disturb\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Turn off \"do not disturb\" mode. Does [not work on Big Sur](https://github.com/sindresorhus/do-not-disturb-cli/issues/2).\n\n# @raycast.icon 😴\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.schemaVersion 1\n\nif ! command -v do-not-disturb &> /dev/null; then\n\techo \"do-not-disturb-cli is required (https://github.com/sindresorhus/do-not-disturb-cli).\";\n\texit 1;\nfi\n\nstatus=$(do-not-disturb status)\n\nif [[ $status = \"off\" ]]; then\n\techo \"DND already off\"\n\texit 0\nfi\n\ndo-not-disturb off\n\nstatus=$(do-not-disturb status)\n\nif [[ $status = \"off\" ]]; then\n\techo \"Turned DND off\"\nelse\n\techo \"Unable to turn DND off\"\nfi"
  },
  {
    "path": "commands/system/dnd-on.sh",
    "content": "#!/bin/bash\n\n# Dependency: do-not-disturb-cli (https://github.com/sindresorhus/do-not-disturb-cli)\n# Install via npm: `npm install --global do-not-disturb-cli`\n\n## Contributions welcome for a reliable, dependency-free version.\n\n# @raycast.title Turn On Do Not Disturb\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Turn on \"do not disturb\" mode. Does [not work on Big Sur](https://github.com/sindresorhus/do-not-disturb-cli/issues/2).\n\n# @raycast.icon 😴\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.schemaVersion 1\n\nif ! command -v do-not-disturb &> /dev/null; then\n\techo \"do-not-disturb-cli is required (https://github.com/sindresorhus/do-not-disturb-cli).\";\n\texit 1;\nfi\n\nstatus=$(do-not-disturb status)\n\nif [[ $status = \"on\" ]]; then\n\techo \"DND already on\"\n\texit 0\nfi\n\ndo-not-disturb on\n\nstatus=$(do-not-disturb status)\n\nif [[ $status = \"on\" ]]; then\n\techo \"Turned DND on\"\nelse\n\techo \"Unable to turn DND on\"\nfi"
  },
  {
    "path": "commands/system/do-not-disturb.sh",
    "content": "#!/usr/bin/env bash\n\n# Dependency: This script requires `calm-notifications` cli installed: https://github.com/vitorgalvao/tiny-scripts/blob/master/calm-notifications\n# Install via homebrew: `brew install vitorgalvao/tiny-scripts/calm-notifications`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Do Not Disturb\n# @raycast.mode compact\n#\n# Optional parameters:\n# @raycast.icon 🔕\n# @raycast.packageName System\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command (default: toggle)\", \"optional\": true, \"percentEncoded\": true }\n#\n# @Documentation:\n# @raycast.description Do Not Disturb\n# @raycast.author Antonio Dal Sie\n# @raycast.authorURL https://github.com/exodusanto\n\ncmd=${1:-\"toggle\"}\n\nif [[ \"$cmd\" != \"on\" && \"$cmd\" != \"off\" && \"$cmd\" != \"toggle\" ]]; then\n  echo \"Unsupported command: $1 (must be [on/off/toggle])\"\n  exit 1\nfi\n\ncalm-notifications $cmd\necho \"Do Not Disturb $(calm-notifications status)\"\n"
  },
  {
    "path": "commands/system/dock-autohide-toggle.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Dock Autohide\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Toggle the Dock Autohide\n# @raycast.author Jelte Lagendijk\n# @raycast.authorURL https://raycast.com/j3lte\n\nautohide=$(defaults read com.apple.dock autohide)\n\nif [[ $autohide == 1 ]]; then\n    defaults write com.apple.dock autohide -bool false; killall Dock\nelse\n    defaults write com.apple.dock autohide -bool true; killall Dock\nfi\n"
  },
  {
    "path": "commands/system/dock-set-autohide.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Dock Set Autohide\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.argument1 { \"type\": \"dropdown\", \"placeholder\": \"On/Off\", \"data\": [{\"title\": \"Off\", \"value\": \"false\"}, {\"title\": \"On\", \"value\": \"true\"}]  }\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Set the Dock autohide\n# @raycast.author Jelte Lagendijk\n# @raycast.authorURL https://raycast.com/j3lte\n\ndefaults write com.apple.dock autohide -bool $1; killall Dock\n"
  },
  {
    "path": "commands/system/dock-set-position.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Dock Position\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.argument1 { \"type\": \"dropdown\", \"placeholder\": \"Position on Screen\", \"data\": [{\"title\": \"Left\", \"value\": \"left\"}, {\"title\": \"Right\", \"value\": \"right\"}, {\"title\": \"Bottom\", \"value\": \"bottom\"}]  }\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Set the position of the Dock in the screen\n# @raycast.author Jelte Lagendijk\n# @raycast.authorURL https://raycast.com/j3lte\n\ndefaults write com.apple.dock orientation -string $1; killall Dock\n"
  },
  {
    "path": "commands/system/eject-all-disks.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Eject All Disks\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 📀\n\n# Documentation:\n# @raycast.description Ejects all mounted disk images.\n\ntell application \"Finder\" to eject (every disk whose ejectable is true and local volume is true and free space is not equal to 0)\n"
  },
  {
    "path": "commands/system/empty-clipboard.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Empty Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Empty Clipboard\n\n/usr/bin/pbcopy < /dev/null\necho \"Clipboard emptied\"\n"
  },
  {
    "path": "commands/system/empty-trash.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Empty Trash\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🗑\n\n# Documentation:\n# @raycast.description Empty the trash.\n\non run\n  try\n    tell application \"Finder\" to empty trash\n  end try\nend run"
  },
  {
    "path": "commands/system/flush-dns.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Flush DNS\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 💨\n\n# Documentation:\n# @raycast.description Flush DNS cache\n# @raycast.author Felipe Turcheti\n# @raycast.authorURL https://felipeturcheti.com\n\nsudo dscacheutil -flushcache\nsudo killall -HUP mDNSResponder\necho \"DNS cache flushed\"\n"
  },
  {
    "path": "commands/system/inline-cpu-usage-percent.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title CPU Usage\n# @raycast.mode inline\n# @raycast.packageName System\n# @raycast.refreshTime 10s\n\n# Optional parameters:\n# @raycast.icon 🖥️\n\n# Documentation:\n# @raycast.description Display CPU usage percent\n# @raycast.author Juan Luis Romero\n# @raycast.authorURL https://github.com/JuanluR8\n\n\noutput=$(top -l 1 | grep \"CPU usage\")\ncpu_usage=$(echo \"$output\" | awk -F \" \" '{print $3}' | cut -d% -f1)\n\necho \"CPU Usage: ${cpu_usage}%\""
  },
  {
    "path": "commands/system/kill-a-process-on-port.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Kill a process on PORT\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🚫\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Ports (e.g. 3000 5000)\" }\n\n# Documentation:\n# @raycast.description Kill running processes on the given ports\n# @raycast.author aaqifshafi\n# @raycast.authorURL https://github.com/aaqifshafi\n\nif [ $# -eq 0 ]; then\n  echo \"Provide at least one port number.\"\n  exit 1\nfi\n\nfor port in \"$@\"\ndo\n  pid=$(lsof -ti tcp:$port)\n  if [ -n \"$pid\" ]; then\n    kill -9 $pid\n    echo \"Killed process $pid on port $port\"\n  else\n    echo \"No process found on port $port\"\n  fi\ndone\n"
  },
  {
    "path": "commands/system/kill-airdrop.processes.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Kill AirDrop Processes\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🔫\n\n# @Documentation:\n# @raycast.description Force kill all AirDrop processes\n# @raycast.author Linus Salzmann\n# @raycast.authorURL https://github.com/linus569\n\nkillall -9 'AirDrop'\n"
  },
  {
    "path": "commands/system/kill-process.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Kill Running Process\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon ⚠️\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"process name\" }\n\n# Documentation:\n# @raycast.description Force kill a running process\n# @raycast.author Gustavo Santana\n# @raycast.authorURL https://github.com/gumadeiras\n\npkill -9 \"$1\""
  },
  {
    "path": "commands/system/largest-cpu-process.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Largest CPU Process\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Report process with largest system CPU usage.\n\n# @raycast.icon 📈\n# @raycast.mode inline\n# @raycast.packageName System\n# @raycast.refreshTime 3m\n# @raycast.schemaVersion 1\n\noutput=$(ps -exco pcpu,comm | sort -k 1 -n -r | head -n 1)\npercentage=$(echo -e \"$output\" | awk -F \" \" '{ st = index($0,\" \");print $1}')\n\n# Using awk like in largest-ram-consumer doesn't work, so do this instead.\ncmd=${output/$percentage/}\n\n# Remove leading whitespace...?\ncmd=$(echo \"$cmd\" | awk '{$1=$1};1')\n\necho \"${cmd} - ${percentage}%\""
  },
  {
    "path": "commands/system/largest-ram-process.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Largest RAM Process\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Report process with largest system RAM usage.\n\n# @raycast.icon 📈\n# @raycast.mode inline\n# @raycast.packageName System\n# @raycast.refreshTime 3m\n# @raycast.schemaVersion 1\n\noutput=$(ps -exco rss,comm | sort -k 1 -n -r | head -n 1)\nkbytes=$(echo \"$output\" | awk -F \" \" '{ st = index($0,\" \");print $1}')\ncmd=$(echo \"$output\" | awk -F \" \" '{ st = index($0,\" \");print substr($0,st+1)}')\n\n\n## Kilobytes (no decimal places)\nprint_as_kb=$(echo \"$kbytes < 1024\" | bc -l)\n\nif (( print_as_kb )); then\n\techo \"${cmd} - ${kbytes} KB\"\n\texit 0\nfi\n\n\n## Megabytes (one decimal place)\nmbytes=$(echo \"scale=1; $kbytes / 1024\" | bc -l)\nprint_as_mb=$(echo \"$mbytes < 1024\" | bc -l)\n\nif (( print_as_mb )); then\n\techo \"${cmd} - ${mbytes} MB\"\n\texit 0\nfi\n\n\n## Gigabytes (two decimal places)\ngbytes=$( echo \"scale=2; $kbytes / 1024 / 1024\" | bc -l)\necho \"${cmd} - ${gbytes} GB\""
  },
  {
    "path": "commands/system/list-processes.rb",
    "content": "#!/usr/bin/ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Running processes\n# @raycast.mode fullOutput\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🔡\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Paths (no)\", \"optional\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Count (15)\", \"optional\": true }\n\n# Documentation:\n# @raycast.description List running app showing their process id, CPU usage, name, and optionally the process path.\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com\n\nitems = []\nshowPaths = [\"yes\", \"y\", \"true\"].include?(ARGV[0])\ncount = ARGV[1] == \"\" ? \"15\" : ARGV[1]\n\n# Assemble an array of each matching process.\n# -e shows all processes, -c shows only the executable name.\n# The pid, pcpu, and comm show only the process's PID, CPU usage and path, respectively.\n\nprocesses = `ps -eo pid,pcpu,comm | sort -nrk 2,3 | head -n #{count}`.split(\"\\n\")\n\nprocesses.each do |process|\n\t# Extract the PID, CPU usage, and path from the line (lines are in the form of `123 12.3 /path/to/process`).\n\tprocessId, processCpu, processPath = process.match(/(\\d+)\\s+(\\d+[\\.|\\,]\\d+)\\s+(.*)/).captures\n\n\t# Isolate the name of the process.\n\tprocessName = processPath.match(/[^\\/]*[^\\/]*$/i)[0]\n\n\tbase = processCpu + \"% @ \" + processName + \" (\" + processId + \")\"\n\n\tif showPaths then\n\t\titems.push(base + \" -- \" + processPath)\n\telse\n\t\titems.push(base)\n\tend\nend\n\nputs items.join(\"\\n\")\n"
  },
  {
    "path": "commands/system/magic-keyboard-switcher/README.md",
    "content": "# magic-keyboard-switcher\nScript command to easility switch the bluetooth connectivity of a single Magic Keyboard between several computers.\n\n## How to setup\n\n1. Install [blueutil](https://github.com/toy/blueutil). You can use [brew](https://brew.sh/) - `brew install blueutil`\n2. Find out your Magic Keyboard bluetooth MAC address. With the keyboard connected, keep the Option key pressed while you click on your status bar bluetooth icon.\n<div align=\"center\">\n  <img src=\"images/bluetooth menu.png\" alt=\"Bluetooth menu\" width=\"75%\">\n</div>\n\n3. Open the script file, set your Magic Keyboard bluetooth MAC address in the `BTMAC` variable and review the blueutil binary location set in the `BIN` variable.\n4. Remove `.template` from the file name.\n5. Say Ok when prompted about giving Bluetooth permissions to Raycast after executing the script command.\n\n## How to switch the Magic Keyboard between computers\n\nIt's desirable to have Raycast and this script command installed in both computers. \n\nFirst, run the script command in the one that has the keyboard currently connected. It will disconnect it and make it discoverable.\nSecond, run the script command in the other computer. It should connect it.\n"
  },
  {
    "path": "commands/system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `blueutil` cli installed: https://github.com/toy/blueutil\n# Install via homebrew: `brew install blueutil`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Magic Keyboard switcher\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/logo.png\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.author blastik\n# @raycast.authorURL https://github.com/blastik\n# @raycast.description Switch a single magic keyboard between computers\n\n# blueutil location\nBIN=/opt/homebrew/bin/blueutil\n\n# Your Magic Keyboard MAC Address\nBTMAC='XX:XX:XX:XX:XX:XX'\n\nCMD_VAL=\"$($BIN --is-connected $BTMAC)\"\nCMD_UNPAIR=\"$BIN --unpair $BTMAC\"\nCMD_PAIR=\"$BIN --pair $BTMAC\"\nCMD_CONN=\"$BIN --connect $BTMAC\"\n\nif ! command -v blueutil &> /dev/null; then\n      echo \"blueutil command is required (https://github.com/toy/blueutil).\";\n      exit 1;\nfi\n\nif [[ \"$CMD_VAL\" -eq 1 ]]; then\n    echo \"Connected to $BTMAC\"\n    echo \"Going to disconnect $BTMAC\"\n    $($CMD_UNPAIR)\n    if [[ $? -eq 0 ]]; then\n        echo \"Disconnected from $BTMAC\"\n    else\n        echo \"Failed to disconnect from $BTMAC\"\n        exit 1\n    fi\nelse\n    echo \"Not connected to $BTMAC\"\n    $($CMD_PAIR)\n    sleep 1\n    $($CMD_CONN)\n    if [[ $? -eq 0 ]]; then\n        echo \"Connected to $BTMAC\"\n    else\n        echo \"Failed to connect to $BTMAC\"\n        exit 1\n    fi\nfi\n"
  },
  {
    "path": "commands/system/meeting_summary_script.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Copy Meeting Summary\n// @raycast.mode silent\n// @raycast.packageName System\n//\n// Optional parameters:\n// @raycast.icon 📝\n//\n// Documentation:\n// @raycast.description Copies a summary of today's meetings to the clipboard.\n\nimport AppKit\nimport EventKit\n\nlet now = Date()\nlet calendar: Calendar = .current\n\ndo {\n  let today: (startDate: Date, endDate: Date, events: [EKEvent])\n\n  do {\n    // Retrieve the range for today (from 00:00 to 23:59)\n    today.startDate = calendar.startOfDay(for: now)\n    today.endDate = calendar.date(byAdding: .day, value: 1, to: today.startDate)!\n    \n    // Retrieve all the events for today\n    let store = EKEventStore()\n    let predicate = store.predicateForEvents(withStart: today.startDate, end: today.endDate, calendars: nil)\n    today.events = store.events(matching: predicate)\n      .filter { !$0.isAllDay } // Exclude all-day events\n      .sorted { $0.startDate < $1.startDate } // Sort by start time\n  }\n\n  let summary: String\n  if today.events.isEmpty {\n    summary = \"No meetings scheduled for today.\"\n  } else {\n    let dateFormatter = DateFormatter()\n    dateFormatter.dateStyle = .full\n    dateFormatter.timeStyle = .none\n    let todayString = dateFormatter.string(from: now)\n    \n    let timeFormatter = DateFormatter()\n    timeFormatter.dateStyle = .none\n    timeFormatter.timeStyle = .short\n    timeFormatter.timeZone = TimeZone.current\n    \n    let meetingList = today.events.map { event in\n      let startTime = timeFormatter.string(from: event.startDate)\n      let title = event.title ?? \"Untitled Event\"\n      let timezone = timeFormatter.timeZone.abbreviation() ?? \"\"\n      \n      var meetingInfo = timezone.isEmpty ? \"• \\(startTime): \\(title)\" : \"• \\(startTime) \\(timezone): \\(title)\"\n      \n      // Add location if available\n      if let location = event.location, !location.isEmpty {\n        meetingInfo += \" (\\(location))\"\n      }\n      \n      // Add notes if available (first line only to keep it concise)\n      if let notes = event.notes, !notes.isEmpty {\n        let firstLine = notes.components(separatedBy: .newlines).first ?? \"\"\n        let cleanedNotes = firstLine.trimmingCharacters(in: .whitespacesAndNewlines)\n        // Filter out junk characters (like the -::~: pattern)\n        let validNotes = cleanedNotes.filter { char in\n          char.isLetter || char.isNumber || char.isWhitespace || char.isPunctuation && !\"-:~\".contains(char)\n        }\n        if !validNotes.isEmpty && validNotes.count <= 100 && !validNotes.allSatisfy({ \"-:~\".contains($0) }) {\n          meetingInfo += \"\\n  Notes: \\(String(validNotes))\"\n        }\n      }\n      \n      return meetingInfo\n    }.joined(separator: \"\\n\")\n    \n    let meetingCount = today.events.count\n    \n    summary = \"\"\"\nMeetings:\n\\(meetingList)\n\"\"\"\n  }\n\n  NSPasteboard.general.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n  NSPasteboard.general.setString(summary, forType: NSPasteboard.PasteboardType.string)\n  print(\"Copied meeting summary to clipboard\")\n} catch {\n  print(\"Error retrieving calendar events: \\(error)\")\n}"
  },
  {
    "path": "commands/system/minimize-all-windows.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Minimize All Windows\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/minimize-window.png\n# @raycast.packageName System\n# Documentation:\n# @raycast.author Ernest Ojeh\n# @raycast.authorURL https://github.com/namzo\n# @raycast.description This script minimizes all windows of currently running apps\n\ntell application \"System Events\"\n    keystroke \"hm\" using {command down, option down}\nend tell"
  },
  {
    "path": "commands/system/modify-extension.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Modify File Extension\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🌵\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Before\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"After\" }\n\n# @Documentation:\n# @raycast.description Batch modify the file in the current directory or the specified extension of the selected file\n# @raycast.author LokHsu\n# @raycast.authorURL https://github.com/lokhsu\n\nfinder=$(\n    osascript <<EOF\n        tell application \"Finder\"\n            try\n                set finderPath to (POSIX path of (the selection as alias))\n            on error\n                set finderPath to (POSIX path of (folder of the front window as alias))\n            end try\n        end tell\n        return finderPath\n    EOF\n)\n\ncount=0\n\nif [ -d $finder ]; then\n    for file in `ls ${finder}`\n        do\n            if [[ $file =~ \\.$1$ ]]; then\n                count=$[$count+1]\n                convert=${finder}${file}\n                mv \"${convert}\" \"${convert%.$1}.$2\";\n            fi\n    done\nelif [[ $finder =~ \\.$1$ ]]; then\n    mv \"${finder}\" \"${finder%.$1}.$2\";\n    count=$[$count+1]\nfi\n\nif  [ $count -gt 0 ]; then\n    echo \"$count files modified successfully\"\nelse\n    echo \"no files to convert\"\nfi\n"
  },
  {
    "path": "commands/system/move-desktop-to-trash.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Move Desktop to Trash\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🗑\n# @raycast.packageName System\n# @raycast.needsConfirmation true\n\n# Documentation:\n# @raycast.author Seypopi\n# @raycast.authorURL https://github.com/Seypopi\n# @raycast.description Empty the desktop.\n\ntell application \"Finder\"\n    set allDesktop to every item of folder (path to Desktop folder as text)\n    move allDesktop to trash\n    log \"\"\nend tell\n"
  },
  {
    "path": "commands/system/move-downloads-to-trash.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Move Downloads to Trash\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.needsConfirmation true\n\n# Optional parameters:\n# @raycast.icon images/move-downloads-to-trash.png\n\ntell application \"Finder\"\n   set allDownloads to every item of folder (path to downloads folder as text)\n   move allDownloads to trash\n   log \"\"\nend tell\n"
  },
  {
    "path": "commands/system/network-quality.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Network Quality\n# @raycast.mode inline\n# @raycast.refreshTime 20m\n\n# Optional parameters:\n# @raycast.icon 🌐\n\n# Documentation:\n# @raycast.packageName System\n# @raycast.author Archie Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n# @raycast.author LanikSJ\n# @raycast.authorURL https://github.com/LanikSJ\n\nresult=$(networkQuality -v)\n\nrtt=$(echo \"$result\" | grep \"Idle Latency\" | awk '{print $3}')\nmbps_down=$(echo \"$result\" | grep \"Downlink capacity\" | awk '{print $3 tolower($4)}')\nmbps_up=$(echo \"$result\" | grep \"Uplink capacity\" | awk '{print $3 tolower($4)}')\n\necho \"↓ ${mbps_down}  ↑ ${mbps_up}  ↔ ${rtt} ms\"\n"
  },
  {
    "path": "commands/system/network-status.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Network Status\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.icon 📶\n\n# @Documentation:\n# @raycast.packageName System\n# @raycast.description Get current network connections.\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\nfunction get_wifi_ssid () {\n  service_info=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --getinfo)\n  ssid_line=$(echo \"$service_info\" | grep -v \"BSSID\" | grep \"SSID\")\n  ssid=$(echo \"$ssid_line\" | awk -F \"(: )\" '{print $2}')\n\n  echo \"$ssid\"\n}\n\nfunction get_internet_status () {\n  if ! ping -q -c 2 google.com &>/dev/null; then\n    echo \" (No Internet)\"\n  fi\n}\n\ncurrent_device=$(route get default 2>/dev/null | grep \"interface\" | awk '{print $2}')\n\n# Exit if there's no connection\nif [ -z \"$current_device\" ]; then\n  echo \"No connection\"\n  exit 0;\nfi\n\nservice_info=$(networksetup -listnetworkserviceorder | grep \"$current_device\")\nservice_name=$(echo \"$service_info\" | awk -F  \"(, )|(: )|[)]\" '{print $2}')\nwifi_ssid=$(get_wifi_ssid)\nnetwork_status=\"\"\n\nif grep -q \"USB\" <<< \"$service_name\"; then\n  network_status+=\"Ethernet\"\n  network_status+=$(get_internet_status)\n\n  # Check if also connected to Wi-fi\n  if [ -n \"$wifi_ssid\" ]; then\n    network_status+=\" | $wifi_ssid\"\n  fi\nelif grep -q \"Wi-Fi\" <<< \"$service_name\"; then\n  network_status+=\"$wifi_ssid\"\n  network_status+=$(get_internet_status)\nfi\n\necho \"$network_status\"\n"
  },
  {
    "path": "commands/system/new-email.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Create Email\n# @raycast.mode silent\n# @raycast.author Brandon Escamilla\n# @raycast.authorURL https://github.com/brandonescamilla\n# Optional parameters:\n# @raycast.icon 📧\n# @raycast.packageName System\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"To\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Subject\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Body\", \"optional\": true, \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.description Opens default email application, and creates a new email with the given inputs.\n\n\nopen \"mailto:${1}?subject=${2}&body=${3}\"\n"
  },
  {
    "path": "commands/system/nightshift.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `nightlight` to be installed: https://github.com/smudge/nightlight\n# Install via homebrew: `brew install smudge/smudge/nightlight`\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Night Shift\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🌘\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Toggle Night Shift mode (until tomorrow/sunrise). Required [nightlight](https://github.com/smudge/nightlight)\n# @raycast.author BhEaN\n# @raycast.authorURL https://github.com/bhean\n\nif ! command -v nightlight &> /dev/null; then\n    echo \"Download nightlight is required (https://github.com/smudge/nightlight)\".\n    exit 1;\nfi\n\nnightlight toggle\nstatus=$(nightlight status)\necho \"Night Shift ${status}\"\n"
  },
  {
    "path": "commands/system/ocr.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title OCR\n// @raycast.mode silent\n\n// Optional parameters:\n// @raycast.icon 🖼\n// @raycast.packageName Productivity\n\n// Documentation:\n// @raycast.author zhe\n// @raycast.authorURL https://github.com/wmszhe\n// @raycast.description Use macOS Vision API Identification pictures, if it contain a QR code, Copy the QR code content to the clipboard, If do not include QR codes, identify text content and supplement to clipboard\n\n\nimport Foundation\nimport CoreImage\nimport Cocoa\nimport Vision\n\nlet screenCapturePath = \"/tmp/ocr.png\"\nlet recognitionLanguages = [\"zh-Hans\", \"en-US\"]\nlet joiner = \" \"\n\n@discardableResult\nfunc screenCapture(_ command: String) throws -> String {\n    let task = Process()\n    let pipe = Pipe()\n\n    task.launchPath = \"/bin/bash\"\n    task.arguments = [\"-c\", command]\n    task.standardOutput = pipe\n    task.standardError = pipe\n\n    try task.run()\n\n    let data = pipe.fileHandleForReading.readDataToEndOfFile()\n    if let output = String(data: data, encoding: .utf8) {\n        return output\n    } else {\n        throw NSError(domain: \"error\", code: -1, userInfo: nil)\n    }\n}\n\nfunc convertCIImageToCGImage(inputImage: CIImage) -> CGImage? {\n    let context = CIContext(options: nil)\n    return context.createCGImage(inputImage, from: inputImage.extent)\n}\n\nfunc paste(text: String) {\n    let pasteboard = NSPasteboard.general\n    pasteboard.declareTypes([.string], owner: nil)\n    pasteboard.clearContents()\n    pasteboard.setString(text, forType: .string)\n}\n\nfunc recognizeTextHandler(request: VNRequest, error: Error?) {\n    guard let observations = request.results as? [VNRecognizedTextObservation] else {\n        return\n    }\n    let recognizedStrings = observations.compactMap { observation in\n        // Return the string of the top VNRecognizedText instance.\n        observation.topCandidates(1).first?.string\n    }\n\n    // Process the recognized strings.\n    let result = recognizedStrings.joined(separator: joiner)\n\n    print(\"The text content is: \" + result)\n\n    paste(text: result)\n}\n\nfunc detectText(fileName: URL) {\n    guard\n            let ciImage = CIImage(contentsOf: fileName),\n            let img = convertCIImageToCGImage(inputImage: ciImage)\n    else {\n        return\n    }\n\n    let requestHandler = VNImageRequestHandler(cgImage: img)\n\n    // Create a new request to recognize text.\n    let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler)\n    request.recognitionLanguages = recognitionLanguages\n\n    do {\n        // Perform the text-recognition request.\n        try requestHandler.perform([request])\n    } catch {\n        print(\"Unable to perform the requests: \\(error).\")\n    }\n}\n\nfunc detectImage(fileName: URL) -> Bool {\n    let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: nil)\n\n    guard let ciImage = CIImage(contentsOf: fileName), let features = detector?.features(in: ciImage) else {\n        return false\n    }\n\n    var isQRCode = false\n    var result = \"\"\n    for feature in features as! [CIQRCodeFeature] {\n        if feature.type == \"QRCode\" {\n            isQRCode = true\n        }\n        result += feature.messageString ?? \"\"\n        result += \"\\n\"\n    }\n\n    if isQRCode {\n        print(\"QR code analysis results: \" + result)\n        paste(text: result)\n    }\n\n    return isQRCode\n}\n\nfunc main() {\n    // Only support the system above macOS 10.15\n    guard #available(OSX 10.15, *) else {\n        return print(\"Only support the system above macOS 10.15\")\n    }\n    do {\n        // It must be ensured that the screenshot is preserved successfully\n        try screenCapture(\"/usr/sbin/screencapture -i \" + screenCapturePath)\n        print(\"screen capture complete, Image preservation location: \" + screenCapturePath)\n    } catch {\n        return print(\"\\(error)\")\n    }\n\n    // Determine whether the picture contains a QR code, if it contain a QR code, Copy the QR code content to the clipboard\n    guard detectImage(fileName: URL(fileURLWithPath: screenCapturePath)) else {\n        // If do not include QR codes, identify text content and supplement to clipboard\n        return detectText(fileName: URL(fileURLWithPath: screenCapturePath))\n    }\n}\n\nmain()\n"
  },
  {
    "path": "commands/system/open-folder.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Folder\n# @raycast.mode silent\n# @raycast.packageName System\n#\n# Optional parameters:\n# @raycast.icon 📁\n# @raycast.currentDirectoryPath /\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"folder_Path\", \"optional\": false }\n#\n# Documentation:\n# @raycast.description Open a folder on macOS \n# @raycast.author Bin Hua\n# @raycast.authorURL https://github.com/hzb\n\nif [[ ${1} =~ \"~\" ]]\nthen\n\topen $(sed -r 's#~#'$HOME'#' <<< \"$1\")\nelse\n\topen ${1}\nfi"
  },
  {
    "path": "commands/system/open-image-from-clipboard.sh",
    "content": "#!/bin/bash\n\n# Dependency: `brew install pngpaste coreutils`\n# pngpaste required to grab image from clipboard\n# coreutils required to create temp file with suffix\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Image\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Clipboard\n\n# Documentation:\n# @raycast.description Open Image from Clipboard in Preview for OCR or other purposes.\n# @raycast.author xxchan\n# @raycast.authorURL https://github.com/xxchan\n\ntempfile=$(gmktemp --suffix=.png) && pngpaste $tempfile && open $tempfile\n"
  },
  {
    "path": "commands/system/open-last-download.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Open Last Download\n// @raycast.mode silent\n// @raycast.packageName System\n\n// Optional parameters:\n// @raycast.icon 💁‍♂️\n\n// Documentation:\n// @raycast.description Opens the last downloaded file.\n\nimport AppKit\n\n// MARK: - Convenience\n\nextension URL {\n  var addedToDirectoryDate: Date {\n    return (try? resourceValues(forKeys: [.addedToDirectoryDateKey]).addedToDirectoryDate) ?? .distantPast\n  }\n}\n\nfunc failure(_ message: String) -> Never {\n  print(message)\n  exit(1)\n}\n\n// MARK: - Main\n\ndo {\n  let downloadsDirectory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!\n\n  let downloads = try FileManager.default.contentsOfDirectory(at: downloadsDirectory, includingPropertiesForKeys: [.addedToDirectoryDateKey], options: .skipsHiddenFiles)\n\n  guard let lastDownload = downloads.sorted(by: { $0.addedToDirectoryDate > $1.addedToDirectoryDate }).first else {\n    failure(\"No downloaded files\")\n  }\n\n  NSWorkspace.shared.open(lastDownload)\n} catch {\n  failure(error.localizedDescription)\n}\n"
  },
  {
    "path": "commands/system/open-selection-with.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open Selection With\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Application\", \"optional\": false }\n#\n# Optional parameters:\n# @raycast.icon 🗃\n#\n# Documentation:\n# @raycast.description Open selected items in Finder with the given application.\n# @raycast.author Felipe Turcheti\n# @raycast.authorURL https://felipeturcheti.com\n\non run {appName}\n\tlog \"Opening selection with \\\"\" & appName & \"\\\"…\"\n\n\t-- get the bundle id for the application name received as a parameter\n\tset bundleId to id of application appName\n\n\ttell application \"Finder\"\n\t\t-- get Finder selected items\n\t\tset theItems to selection\n\t\t-- get the path for the application with the bundle id defined above\n\t\tset appPath to (POSIX path of (application file id bundleId as alias))\n\tend tell\n\n\t-- for each item in the Finder selection\n\trepeat with itemRef in theItems\n\t\t-- get the item path\n\t\tset theItem to POSIX path of (itemRef as string)\n\t\t-- set a shell command to open the item with the desired application\n\t\t-- note:\n\t\t\t-- opening the file with applescript often results in permission errors\n\t\t\t-- but opening it with a shell script seems to bypass this issue\n\t\tset command to \"open -a \" & quoted form of appPath & \" \" & quoted form of theItem\n\t\tdo shell script command\n\tend repeat\nend run\n"
  },
  {
    "path": "commands/system/otp.sh",
    "content": "#!/bin/bash\n\n# Dependency: This script requires `apw`, `jq` and `awk` to be installed and in $PATH\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title One-Time Password\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.icon 🔑\n# @raycast.packageName System\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Domain\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Username Index\", \"optional\": true }\n#\n# @raycast.description Get One-Time Password (OTP) from Apple Password Manager\n# @raycast.author Angelos Michalopoulos\n# @raycase.authorURL https://github.com/miagg\n\nif ! command -v apw &> /dev/null || ! command -v jq &> /dev/null || ! command -v awk &> /dev/null; then\n    echo \"This function requires apw, jq and awk to be installed\"\n    exit 1\nfi\nUINDEX=$((${2:-1} - 1))\nCODES=$(apw otp get \"$1\" 2>/dev/null)\nSTATUS=$?\n# ✋ If return code 9, not authenticated, run apw auth\nif [ $STATUS -eq 9 ]; then\n    echo \"Please authenticate first by running 'apw auth'\"\n    exit 1\nfi\n# ✋ If return code 3, domain not found, alert user\nif [ $STATUS -eq 3 ]; then\n    echo \"Domain $1 not found\"\n    exit 1\nfi\n# Grab available OTP codes for domain\nCODES_COUNT=$(echo $CODES | jq '.results | length')\nif [ $CODES_COUNT -gt 1 ]; then\n    CODE=$(echo $CODES | jq -r \".results[$UINDEX].code\")\n    USERNAME=$(echo $CODES | jq -r \".results[$UINDEX].username\")\n    if [ \"$CODE\" == \"null\" ]; then\n        echo \"Please provide an index between 1 and $CODES_COUNT\"\n        exit 1\n    fi\nelse\n    CODE=$(echo $CODES | jq -r '.results[0].code')\n    USERNAME=$(echo $CODES | jq -r \".results[0].username\")\nfi\necho $CODE | pbcopy\necho \"OTP code for $USERNAME copied to clipboard\""
  },
  {
    "path": "commands/system/paste-clipboard.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Type Clipboard\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📋\n# @raycast.packageName Type Clipboard in Search\n\n# Documentation:\n# @raycast.description Takes your clipboard then types each character in the clipboard\n# @raycast.author AlexGadd\n# @raycast.authorURL https://raycast.com/AlexGadd\n\nsleep 0.3\n#returns \"true\" or \"false\" if key is held down\ncommandKeyDown=$(osascript -l JavaScript -e \"ObjC.import('Cocoa'); ($.NSEvent.modifierFlags & $.NSEventModifierFlagCommand) > 1\")\ncontrolKeyDown=$(osascript -l JavaScript -e \"ObjC.import('Cocoa'); ($.NSEvent.modifierFlags & $.NSEventModifierFlagControl) > 1\")\noptionKeyDown=$(osascript -l JavaScript -e \"ObjC.import('Cocoa'); ($.NSEvent.modifierFlags & $.NSEventModifierFlagOption) > 1\")\nshiftKeyDown=$(osascript -l JavaScript -e \"ObjC.import('Cocoa'); ($.NSEvent.modifierFlags & $.NSEventModifierFlagShift) > 1\")\nfunctionKeyDown=$(osascript -l JavaScript -e \"ObjC.import('Cocoa'); ($.NSEvent.modifierFlags & $.NSEventModifierFlagFunction) > 1\")\n\nkeys=(\"$commandKeyDown\" \"$controlKeyDown\" \"$optionKeyDown\" \"$shiftKeyDown\" \"$functionKeyDown\")\n\nanyPressed=false\nfor key in \"${keys[@]}\"; do\n  if [[ $key == \"true\" ]]; then\n    anyPressed=true\n    break\n  fi\ndone\n\nif $anyPressed; then\nosascript -e 'set theAlertText to \"Modifier key held\"' \\\n-e 'set theAlertMessage to \"To allow this script to function, please ensure you do not hold any modifier keys down while the paste script runs\"' \\\n-e 'display alert theAlertText message theAlertMessage as critical buttons {\"OK\"} default button \"OK\"' \\\nelse\nosascript -e 'set clipboardContent to the clipboard' \\\n-e 'set charCount to count of characters of clipboardContent' \\\n-e 'tell application \"System Events\"' \\\n-e '\trepeat with i from 1 to charCount' \\\n-e '\t\tset theChar to character i of clipboardContent' \\\n-e '\t\tkeystroke theChar' \\\n-e '\tend repeat' \\\n-e 'end tell'\nfi\n"
  },
  {
    "path": "commands/system/quit-all-apps.swift",
    "content": "#!/usr/bin/swift\n\n// NOTE: This script will only work in Raycast 0.30.0+\n//\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Quit All Applications\n// @raycast.mode silent\n// @raycast.packageName System\n//\n// Optional parameters:\n// @raycast.icon 💥\n// @raycast.needsConfirmation true\n//\n// Documentation:\n// @raycast.description Quits all running applications except Finder and Raycast.\n\nimport AppKit\n\nlet finderBundleIdentifier = \"com.apple.finder\"\n\nNSWorkspace.shared.runningApplications\n  .filter {\n    $0 != NSRunningApplication.current\n        && $0.activationPolicy == .regular\n        && $0.bundleIdentifier != finderBundleIdentifier\n  }\n  .forEach { $0.terminate() }\n\nprint(\"Quit all applications\")\n"
  },
  {
    "path": "commands/system/quit-app.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Quit app\n// @raycast.mode silent\n// @raycast.packageName System\n\n// Optional parameters:\n// @raycast.icon 💥\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name or pid\" }\n\n// Documentation:\n// @raycast.description Quits an app, by name or process id.\n// @raycast.author Roland Leth\n// @raycast.authorURL https://runtimesharks.com\n\nimport AppKit\n\nlet argument = Array(CommandLine.arguments.dropFirst()).first!\nlet runningApps = NSWorkspace.shared.runningApplications\n\nif let processId = Int(argument) {\n\trunningApps\n\t\t.first { $0.processIdentifier == processId }\n\t\t.map {\n\t\t\t$0.terminate()\n\n\t\t\tprint(\"Quit \\($0.localizedName ?? \"\\(processId)\")\")\n\t\t\texit(0)\n\t\t}\n\n\tprint(\"No apps with process id \\(processId)\")\n\texit(1)\n}\n\nlet apps = runningApps.filter {\n\t$0.localizedName?.localizedCaseInsensitiveContains(argument) == true\n}\n\nif apps.isEmpty {\n\tprint(\"No apps with name \\(argument)\")\n\texit(1)\n}\n\napps.first.map {\n\t// If there's just one match, quit it and exit.\n\tguard apps.count == 1 else { return }\n\n\t$0.terminate()\n\n\tprint(\"Quit \\($0.localizedName ?? argument)\")\n\texit(0)\n}\n\nrunningApps\n\t.first { $0.localizedName?.localizedCaseInsensitiveCompare(argument) == .orderedSame }\n\t.map {\n\t\t// If an exact match exists, quit that and exit, even if there are several results.\n\t\t$0.terminate()\n\n\t\tprint(\"Quit \\($0.localizedName ?? argument)\")\n\t\texit(0)\n\t}\n\nlet names = apps\n\t.compactMap { $0.localizedName }\n\t.joined(separator: \", \")\n\nif names.isEmpty {\n\t// Just in case `localizedName` were all `nil`, which shouldn't really happen.\n\tprint(\"Multiple apps found\")\n} else {\n\tprint(\"Multiple apps found: \\(names)\")\n}\n"
  },
  {
    "path": "commands/system/rename-videos-pictures.py",
    "content": "#!/usr/bin/env python3\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Rename Video\n# @raycast.mode fullOutput\n\n# Optional parameters:\n# @raycast.icon 📂\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Directory's absolute path\", \"optional\": false }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Type (video/image/all)\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Dry Run (true/false)\", \"optional\": true }\n\n# Documentation:\n# @raycast.description This is a simple Python script for recursively renaming video and picture files within a directory. Type the root directory's absolute path, and it will scan all the video and picture files in it and rename them according to the folder where they are located as the format `<folder_name>-<current_date (MMDD)>-<incremental_number>`.\n# @raycast.author StepaniaH\n# @raycast.authorURL https://github.com/StepaniaH\n\nimport os\nimport sys\nimport datetime\nimport argparse\nimport re\n\nclass RenameFilesAsDate:\n    def __init__(self, root_directory):\n        self.root_directory = os.path.expanduser(root_directory)\n        self.error_files = {}\n        self.video_extensions = ('.mp4', '.avi', '.mov', '.mkv', '.wmv', '.flv', '.webm', '.m4v', '.3gp')\n        self.image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.tiff', '.svg', '.heic')\n\n    def rename_files(self, file_type='all', dry_run=False):\n        current_date = datetime.datetime.now().strftime(\"%m%d\")\n        self._process_directory(self.root_directory, current_date, file_type, dry_run)\n\n        if self.error_files:\n            print(\"\\nThe following files could not be renamed:\")\n            for original_path, error in self.error_files.items():\n                print(f\"{original_path}: {error}\")\n\n    def _is_already_renamed(self, filename, current_date):\n        \"\"\"Check if the file has been named according to the target format\"\"\"\n        base_name = os.path.splitext(filename)[0]\n        pattern = re.compile(f'^.*-{current_date}-\\\\d+$')\n        return bool(pattern.match(base_name))\n\n    def _get_max_sequence_number(self, directory, current_date):\n        \"\"\"Get the largest serial number existing in the current directory\"\"\"\n        max_seq = 0\n        pattern = re.compile(f'^.*-{current_date}-(\\\\d+)$')\n        \n        for entry in os.listdir(directory):\n            match = pattern.match(os.path.splitext(entry)[0])\n            if match:\n                seq_num = int(match.group(1))\n                max_seq = max(max_seq, seq_num)\n        return max_seq\n\n    def _process_directory(self, directory, current_date, file_type, dry_run):\n        folder_name = os.path.basename(directory)\n        supported_extensions = self._get_supported_extensions(file_type)\n        \n        # First collect the files that need to be renamed\n        files_to_rename = []\n        for entry in os.listdir(directory):\n            entry_path = os.path.join(directory, entry)\n\n            if os.path.isfile(entry_path):\n                if entry.lower().endswith(supported_extensions):\n                    if not self._is_already_renamed(entry, current_date):\n                        files_to_rename.append(entry)\n            elif os.path.isdir(entry_path):\n                self._process_directory(entry_path, current_date, file_type, dry_run)\n\n        if files_to_rename:\n            # Get the largest serial number existing in the current directory\n            count = self._get_max_sequence_number(directory, current_date) + 1\n            total_files = len(files_to_rename)\n            num_digits = len(str(total_files + count - 1))\n\n            # Rename collected files\n            for entry in sorted(files_to_rename):  # Sort to ensure consistent rename order\n                entry_path = os.path.join(directory, entry)\n                new_name = f\"{folder_name}-{current_date}-{count:0{num_digits}d}{os.path.splitext(entry)[1].lower()}\"\n                new_path = os.path.join(directory, new_name)\n\n                if dry_run:\n                    print(f\"Would rename: {entry} -> {new_name}\")\n                else:\n                    try:\n                        os.rename(entry_path, new_path)\n                        print(f\"Renamed: {entry} -> {new_name}\")\n                    except OSError as e:\n                        self.error_files[entry_path] = f\"Rename failed: {str(e)}\"\n                        continue\n                count += 1\n\n    def _get_supported_extensions(self, file_type):\n        if file_type == 'video':\n            return self.video_extensions\n        elif file_type == 'image':\n            return self.image_extensions\n        return self.video_extensions + self.image_extensions\n\ndef main():\n    args = sys.argv[1:] \n\n    directory = None\n    file_type = 'all'\n    dry_run = False\n\n    if len(args) >= 1:\n        directory = args[0]\n    if len(args) >= 2 and args[1]:\n        file_type = args[1]\n    if len(args) >= 3 and args[2]:\n        dry_run = args[2].lower() == 'true'\n\n    if not directory:\n        print(\"Error: Directory argument is required.\")\n        sys.exit(1)\n\n    renamer = RenameFilesAsDate(directory)\n    renamer.rename_files(file_type, dry_run)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "commands/system/reset-launchpad.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Reset Launchpad\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🚀\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Resets the macOS Launchpad to its default state\n# @raycast.author Zach Dawson\n# @raycast.authorURL https://raycast.com/zdawz\n\ndefaults write com.apple.dock ResetLaunchPad -bool true\nkillall Dock\n"
  },
  {
    "path": "commands/system/restart-dock.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart the Dock\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 💀\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n\n# Documentation:\n# @raycast.description Restart the Dock\n\nkillall Dock\n\necho \"Restarted the Dock\"\n"
  },
  {
    "path": "commands/system/restart-finder.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart the Finder\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 💀\n# @raycast.author Jordi Clement\n# @raycast.authorURL https://github.com/jordicl\n\n# Documentation:\n# @raycast.description Restart the Finder\n\nkillall Finder\n\necho \"Restarted the Finder\"\n"
  },
  {
    "path": "commands/system/restart.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Restart\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon ♻️\n\n# Documentation:\n# @raycast.description Restarts computer.\n\ntell application \"Finder\" to restart\n"
  },
  {
    "path": "commands/system/sample-color.swift",
    "content": "#!/usr/bin/swift\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Sample Color\n// @raycast.mode silent\n// @raycast.packageName System\n//\n// Optional parameters:\n// @raycast.icon 🎨\n//\n// Documentation:\n// @raycast.description Sample a color from anywhere on your screen.\n// @raycast.author Jesse Claven\n// @raycast.authorURL https://github.com/jesse-c\n\nimport AppKit\n\nguard #available(OSX 10.15, *) else {\n  print(\"macOS 10.15 or greater required\")\n  exit(1)\n}\n\nextension NSColor {\n  var hexAlphaString: String {\n    let r = lroundf(Float(redComponent) * 0xFF)\n    let g = lroundf(Float(greenComponent) * 0xFF)\n    let b = lroundf(Float(blueComponent) * 0xFF)\n    return String(format: \"#%02lX%02lX%02lX\", r, g, b)\n  }\n}\n\nfunc copyToPasteboard(_ color: String) {\n  NSPasteboard.general.clearContents()\n  NSPasteboard.general.writeObjects([color as NSPasteboardWriting])\n}\n\nlet sampler = NSColorSampler()\n\nsampler.show { selectedColor in\n  if let selectedColor = selectedColor {\n    let hexTuple = selectedColor.hexAlphaString\n    copyToPasteboard(hexTuple)\n    print(\"Sampled color: \\(hexTuple)\")\n    exit(0)\n  } else {\n    print(\"Sampled color: none\")\n    exit(0)\n  }\n}\n\nRunLoop.main.run()\n"
  },
  {
    "path": "commands/system/save-image-from-clipboard.py",
    "content": "#!/usr/bin/env python3\n\n# Dependency: This script requires Pillow Python module\n# Install via Python: python3 -m pip install Pillow\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Save Image From Clipboard\n# @raycast.mode silent\n# @raycast.packageName Clipboard\n\n# Optional parameters:\n# @raycast.icon 🤖\n\n# Documentation:\n# @raycast.description Save Image From Clipboard\n# @raycast.author Yufei Kang\n# @raycast.authorURL kangyufei.net\n# @raycast.author LanikSJ\n# @raycast.authorURL https://github.com/LanikSJ\n\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom PIL import ImageGrab\n\nhome = Path.home()\n\n\ndef save_image():\n    im = ImageGrab.grabclipboard()\n    if im != None:\n        filepath = home / \"Downloads/ScreenShot-{}.png\".format(\n            datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n        )\n        im.save(filepath.as_posix())\n        print(f\"OK Saved In: {filepath}\")\n    else:\n        print(\"No Image in Clipboard\")\n\n\nif __name__ == \"__main__\":\n    save_image()\n\n"
  },
  {
    "path": "commands/system/screensaver.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Screen Saver\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🌀\n# @raycast.author Valentin Chrétien\n# @raycast.authorURL https://twitter.com/valentinchrt\n# @raycast.description A script command to start your current screen saver.\n\ntell application \"System Events\" \n    start current screen saver\nend tell"
  },
  {
    "path": "commands/system/shutdown.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Shut Down\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🛌\n\n# Documentation:\n# @raycast.description Shuts down computer.\n\ntell application \"Finder\" to shut down\n"
  },
  {
    "path": "commands/system/sleep-timer.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Sleep Timer\n# @raycast.mode silent\n# @raycast.description Put your Mac to sleep (in X minutes).\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 😴\n# @raycast.argument1 { \"optional\": true, \"type\": \"text\", \"placeholder\": \"(in) minutes\" }\n\n# Documentation:\n# @raycast.author AndriiBarabash\n# @raycast.authorURL https://github.com/AndriiBarabash\n\non run argv\n  delay (item 1 of argv) * 60\n  tell application \"Finder\" to sleep\nend run\n\n"
  },
  {
    "path": "commands/system/sleep.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Sleep\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 😴\n\n# Documentation:\n# @raycast.description Puts computer to sleep.\n\ntell application \"Finder\" to sleep\n"
  },
  {
    "path": "commands/system/toggle-battery-charging.sh",
    "content": "#!/bin/bash\n\n# Note: You must do two steps for this script to work.\n# 1- run \"curl https://raw.githubusercontent.com/actuallymentor/battery/main/setup.sh | sudo bash\" to install smc and battery script\n# 2- run \"battery visudo\" to add battery command to sudoers\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Battery Charging\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔋\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Toggle charging the battery when it is plugged in. When turned off, it will always use the charger instead of the battery; when turned on, it will go to automatic mode (decide based on your settings and daily charging routine).\n# @raycast.author Amir Hossein SamadiPour\n# @raycast.authorURL https://github.com/SamadiPour\n\nhex_status=$( smc -k CH0B -r | awk '{print $4}' | sed s:\\):: )\nif [[ \"$hex_status\" == \"00\" ]]; then\n    battery charging off\n    echo \"Charging OFF\"\nelse\n    battery charging on\n    echo \"Charging ON\"\nfi\n"
  },
  {
    "path": "commands/system/toggle-desktop-icons.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Desktop Icons\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🖥\n# @raycast.author Raycast\n# @raycast.authorURL https://raycast.com\n# @raycast.description A script command to show and hide icons of Desktop folder\n\ntry\n  set CurSet to do shell script \"defaults read com.apple.finder CreateDesktop\"\non error\n  set CurSet to \"1\"\nend try\n\nif CurSet is \"1\" then\n  set NewSet to false\nelse\n  set NewSet to true\nend if\n\ndo shell script \"defaults write com.apple.finder CreateDesktop -bool \" & NewSet\n\ntell application \"Finder\" to quit\n\nset inTime to current date\nrepeat\n    -- check Finder process not exist\n    tell application \"System Events\"\n        if \"Finder\" is not in (get name of processes) then exit repeat\n    end tell\n    -- if repeat run for 10s, exit repeat\n    if (current date) - inTime is greater than 10 then exit repeat\n    delay 0.2\nend repeat\n\ntell application \"Finder\" \n  try\n    activate\n  end try\nend tell"
  },
  {
    "path": "commands/system/toggle-desktop-widget.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Desktop Widgets\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🔄\n\n# Documentation:\n# @raycast.author Federico Zivolo\n# @raycast.authorURL https://github.com/FezVrasta\n\n# Get the current value of the preference\ncurrent_value=$(defaults read com.apple.WindowManager StandardHideWidgets)\n\n# Toggle the value\nif [[ $current_value == 1 ]]; then\n  new_value=0\nelse\n  new_value=1\nfi\n\n# Write the new value to the preference\ndefaults write com.apple.WindowManager StandardHideWidgets -int $new_value\n"
  },
  {
    "path": "commands/system/toggle-ds-store.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle .DS_Store\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🧬\n# @raycast.author Astrit\n# @raycast.authorURL https://github.com/astrit\n# @raycast.description A script command to enable and disable .DS_Store\n\n\ntry\n\tset ToggleDSStore to do shell script \"defaults read com.apple.desktopservices\"\non error\n\tset ToggleDSStore to \"1\"\nend try\n\nif ToggleDSStore is \"1\" then\n\tdo shell script \"defaults write com.apple.desktopservices DSDontWriteNetworkStores true\"\n  set DSStoreStatus to \".DS_Store Deactivated\"\nelse\n  do shell script \"defaults delete com.apple.desktopservices DSDontWriteNetworkStores\"\n  set DSStoreStatus to \".DS_Store Activated\"\nend if\n\nDSStoreStatus\n"
  },
  {
    "path": "commands/system/toggle-filename-extensions.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Filename Extensions\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 👓\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Show or hide all filename extensions (like .txt, .png)\n# @raycast.author Senthil Prabhu\n# @raycast.authorURL https://github.com/senthilprabhut\n\n# Get the current setting value\ntry\n\tset CurSet to do shell script \"defaults read NSGlobalDomain AppleShowAllExtensions\"\non error\n\tset CurSet to \"1\"\nend try\n\nif CurSet is \"1\" then\n\tset NewSet to false\nelse\n\tset NewSet to true\nend if\n\ndo shell script \"defaults write NSGlobalDomain AppleShowAllExtensions -bool \" & NewSet\n\n# Restart Finder\ndo shell script \"killall Finder\"\n\n# Show message\nif CurSet is \"1\" then\n\tlog \"Show all filename extensions disabled\"\nelse\n\tlog \"Show all filename extensions enabled\"\nend if\n"
  },
  {
    "path": "commands/system/toggle-flip-screen.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename,\n# Replace all instances of <display> with the name of your monitor.\n#     Monitor name can be seen by open System Preferences → Display,\n#         and look at the window's title name. example: DELL P2212H.\n# Replace all instances of <degree> to 90, 180 or 270\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Flip Screen <display> to <degree>°\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🖥\n\n# @Documentation:\n# @raycast.description Toggle flip (rotate) or revert the <display> to <degree>°\n# @raycast.author Yohanes Bandung Bondowoso\n# @raycast.authorURL https://github.com/ybbond\n\nuse scripting additions\n\nset displayName to \"<display>\"\nset targetDegree to \"<degree>°\"\n\nif running of application \"System Preferences\" then\n  quit application \"System Preferences\"\nend if\n\ntell application \"System Preferences\"\n  activate\n  reveal anchor \"displaysDisplayTab\" of pane id \"com.apple.preference.displays\"\nend tell\n\ntell application \"System Events\" to tell process \"System Preferences\"\n  set currentCount to 0\n  repeat while currentCount < 5\n    if exists tab group 1 of window displayName then\n      set currentCount to 5\n    else\n      delay 0.5\n      set currentCount to currentCount + 1\n    end if\n  end repeat\n\n  try\n    tell window displayName\n      if exists pop up button 2 of tab group 1 then\n        tell pop up button 2 of tab group 1\n          if (value) contains \"Standard\" then\n            set currentAction to \"Flipping\"\n            click\n            click menu item targetDegree of menu 1\n          else\n            set currentAction to \"Reverting\"\n            click\n            click menu item \"Standard\" of menu 1\n          end if\n        end tell\n      else\n        tell pop up button 1 of tab group 1\n          if (value) contains \"Standard\" then\n            set currentAction to \"Flipping\"\n            click\n            click menu item targetDegree of menu 1\n          else\n            set currentAction to \"Reverting\"\n            click\n            click menu item \"Standard\" of menu 1\n          end if\n        end tell\n      end if\n    end tell\n  on error errString\n    log \"Some error, please contact me so I can try to fix :)\"\n  end try\nend tell\n\nlog currentAction & space & \"display succeed\"\n\ntell application \"System Preferences\"\n  quit\nend tell\n\ntell application \"System Events\"\n  quit\nend tell"
  },
  {
    "path": "commands/system/toggle-hidden-files.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Hidden Files\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 👓\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n# @raycast.description Show and hide hidden files/folders which starts with \".\" (dot), i.e: .bash_rc, .ssh\n\ntry\n\tset VisibleFiles to do shell script \"defaults read com.apple.finder AppleShowAllFiles\"\non error\n\tset VisibleFiles to \"1\"\nend try\n\nif VisibleFiles is \"1\" then\n\tset NewSet to false\nelse\n\tset NewSet to true\nend if\n\ndo shell script \"defaults write com.apple.finder AppleShowAllFiles -bool \" & NewSet\n\ndo shell script \"killall Finder\""
  },
  {
    "path": "commands/system/toggle-lid-sleep.sh",
    "content": "#!/bin/bash\n\n# Note: You must add pmset to sudoers for this script to work.\n# 1- run to create file and open editor:\n# sudo visudo -f /etc/sudoers.d/pmset\n# 2- press 'i' to enter input mode\n# 3- paste this line into the editor:\n# ALL ALL=NOPASSWD: /usr/bin/pmset\n# 4- press 'esc' to exit input mode\n# 5- type this to exit and save file:\n# :wq\n\n# Note: this will not prevent laptop sleep from timeout.\n# Refer to System Settings and search for 'sleep' there for\n# things like 'Turn display off on battery when inactive' and\n# 'Prevent automatic sleeping on power adapter when the display is off'\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Lid Sleep\n# @raycast.mode inline\n\n# Optional parameters:\n# @raycast.icon 🐚\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Prevent sleep from closing laptop lid (clamshell mode)\n# @raycast.author Ivan Rybalko\n# @raycast.authorURL https://github.com/ivribalko\n\nvalidate_exit_code()\n{\n    if [ $? -ne 0 ]; then\n        echo \"probably missing sudoers, see sources for how-to.\"\n        exit 1\n    fi\n}\n\nif [[ $(pmset -g | grep SleepDisabled | cut -f3) -eq '1' ]]; then\n    sudo pmset disablesleep 0 2> /dev/null\n    validate_exit_code\n    echo now on 💤\nelse\n    sudo pmset disablesleep 1 2> /dev/null\n    validate_exit_code\n    echo now off ☕\nfi\n"
  },
  {
    "path": "commands/system/toggle-natural-scrolling-macos15.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Natural Scrolling (macOS 15+)\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🖱\n# @raycast.author Raphael-KR\n# @raycast.authorURL https://github.com/Raphael-KR\n# @raycast.description Toggle natural trackpad/mouse scrolling setting for macOS 15.6.1+\n\nset macVersion to system version of (system info)\n\nif macVersion is greater than or equal to \"15\" then\n\ttry\n\t\tset isNaturalScrolling to (do shell script \"defaults read .GlobalPreferences 'com.apple.swipescrolldirection' 2>/dev/null || echo '1'\")\n\t\t\n\t\tif isNaturalScrolling is \"1\" then\n\t\t\tdo shell script \"defaults write .GlobalPreferences 'com.apple.swipescrolldirection' -bool NO\"\n\t\t\tdisplay notification \"Natural Scrolling: OFF\" with title \"Trackpad Settings\"\n\t\telse\n\t\t\tdo shell script \"defaults write .GlobalPreferences 'com.apple.swipescrolldirection' -bool YES\"\n\t\t\tdisplay notification \"Natural Scrolling: ON\" with title \"Trackpad Settings\"\n\t\tend if\n\t\t\n\t\tdo shell script \"/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u\"\n\t\t\n\ton error e\n\t\tdisplay notification \"Using GUI method as fallback\" with title \"Trackpad Settings\"\n\t\t\n\t\ttell application \"System Settings\"\n\t\t\tactivate\n\t\t\tset current pane to pane \"com.apple.preference.trackpad\"\n\t\tend tell\n\t\t\n\t\tdelay 0.6\n\t\t\n\t\ttell application \"System Events\"\n\t\t\ttell process \"System Settings\"\n\t\t\t\tclick radio button 2 of tab group 1 of window \"Trackpad\"\n\t\t\t\tclick checkbox 1 of tab group 1 of window \"Trackpad\"\n\t\t\tend tell\n\t\tend tell\n\t\t\n\t\ttell application \"System Settings\" to quit\n\tend try\n\t\nelse\n\tdisplay notification \"For macOS 14 and earlier, use the original script\" with title \"Compatibility Note\"\n\t\n\ttell application \"System Settings\"\n\t\tactivate\n\t\tset current pane to pane \"com.apple.preference.trackpad\"\n\tend tell\n\t\n\tdelay 0.6\n\t\n\ttell application \"System Events\"\n\t\ttell process \"System Settings\"\n\t\t\tclick radio button 2 of tab group 1 of window \"Trackpad\"\n\t\t\tclick checkbox 1 of tab group 1 of window \"Trackpad\"\n\t\tend tell\n\tend tell\n\t\n\ttell application \"System Settings\" to quit\nend if\n"
  },
  {
    "path": "commands/system/toggle-natural-scrolling.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Natural Scrolling\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🖱\n# @raycast.author Wiley Marques\n# @raycast.authorURL https://twitter.com/wileymarques\n# @raycast.description Script Command to change natural trackpad/mouse scrolling setting. Reverting the setting value each time.\n\nset macVersion to system version of (system info)\n\nif macVersion is greater than or equal to \"14\" then\n\tset isNaturalScrolling to (do shell script \"defaults -currentHost read NSGlobalDomain com.apple.swipescrolldirection\")\n\t\n\tif isNaturalScrolling is \"1\" then\n\t\tdo shell script \"defaults -currentHost write NSGlobalDomain com.apple.swipescrolldirection -bool NO\"\n\telse\n\t\tdo shell script \"defaults -currentHost write NSGlobalDomain com.apple.swipescrolldirection -bool YES\"\n\tend if\n\t\n\tdo shell script \"/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u\"\nelse\n\ttell application \"System Settings\"\n\t\tactivate\n\t\tset current pane to pane \"com.apple.preference.trackpad\"\n\tend tell\n\t\n\tdelay 0.6\n\t\n\ttell application \"System Events\"\n\t\ttell process \"System Preferences\"\n\t\t\tclick radio button 2 of tab group 1 of window \"Trackpad\"\n\t\t\tclick checkbox 1 of tab group 1 of window \"Trackpad\"\n\t\tend tell\n\tend tell\n\t\n\ttell application \"System Settings\" to quit\nend if\n"
  },
  {
    "path": "commands/system/toggle-sidecar.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle Sidecar\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/apple_sidecar.png\n# @raycast.packageName System\n\n# Documentation:\n# @raycast.description Toggles on/off a Sidecar screen.\n# @raycast.author Marcos Snchez-Dehesa\n# @raycast.authorURL https://www.github.com/dehesa\n\n# The name of the device to be connected as a sidecar screen (e.g. the name of your iPad).\n# You can figure out the exact device's name by going to System Preferences > Displays > Add Display.\nset displayName to \"Honiara\"\n# If your system is not in English, you should change this text to text display in the pop up menu item in System Preferences > Displays > Add Display.\nset menuItemName to \"Add Display\"\n# The System Preferences > Displays screen takes a long time to load (I don't know why). This delay waits for the screen to properly load. Your system may need less or more seconds. Do some trial and errors.\nset delayInSeconds to 1.8\n\ntell application \"System Preferences\"\n\tactivate\n\tset current pane to pane id \"com.apple.preference.displays\"\n\t\n\tdelay delayInSeconds\n\t\n\ttell application \"System Events\"\n\t\ttell first window of application process \"System Preferences\"\n\t\t\ttell pop up button menuItemName\n\t\t\t\tclick\n\t\t\t\tclick menu item displayName of menu menuItemName\n\t\t\tend tell\n\t\tend tell\n\tend tell\n\t\n\tquit\nend tell\n"
  },
  {
    "path": "commands/system/toggle-system-appearance.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle System Appearance\n# @raycast.mode silent\n# @raycast.packageName System\n\n# Optional parameters:\n# @raycast.icon 🌗\n# @raycast.author Thiago Holanda\n# @raycast.authorURL https://twitter.com/tholanda\n# @raycast.description Script Command to switch between the system appearance, light and dark mode.\n\ntell application \"System Events\" to tell appearance preferences to set dark mode to not dark mode\n"
  },
  {
    "path": "commands/system/uninstall-with-appcleaner.applescript",
    "content": "#!/usr/bin/osascript\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Uninstall with AppCleaner\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Application\", \"optional\": false }\n#\n# Optional parameters:\n# @raycast.icon 🗑\n#\n# Documentation:\n# @raycast.description Uninstall applications with AppCleaner\n# @raycast.author Felipe Turcheti\n# @raycast.authorURL https://felipeturcheti.com\n\non run {appName}\n  set bundleId to id of application appName\n  tell application \"Finder\"\n    set appPath to (POSIX path of (application file id bundleId as alias))\n    do shell script \"open -a AppCleaner \\\"\" & appPath & \"\\\"\"\n    log \"Opening \\\"\" & appName & \"\\\" in AppCleaner…\"\n  end tell\nend run\n"
  },
  {
    "path": "commands/system/update-scripts-command.template.py",
    "content": "#!/usr/bin/env python3\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set `path_to_scripts` and\n# ignored_files vars.\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Update Community Scripts\n# @raycast.description Updates community Script Commands to their last available version from the GitHub repository.\n# @raycast.mode compact\n# @raycast.refreshTime 1d\n\n# Optional parameters:\n# @raycast.icon ♻️\n# @raycast.packageName Utilities\n\n# Documentation:\n# @raycast.author Quentin Eude\n# @raycast.authorURL https://www.github.com/qeude\nimport os\nimport json\nfrom glob import glob\nfrom shutil import copyfile, rmtree\nfrom datetime import datetime\nfrom dataclasses import dataclass\n\n\n# 🚨 SHOULD BE CHANGED ACCORDING TO YOUR NEEDS\n# This should be changed with the path to your root Raycast scripts folder.\n# eg: path_to_scripts = \"/Users/quentin/Raycast Scripts\"\npath_to_scripts = \"/PATH/TO/ROOT/SCRIPTS/FOLDER/\"\n\n# 🚨 SHOULD BE CHANGED ACCORDING TO YOUR NEEDS\n# Keep it unchanged if you don't want to ignore scripts.\n# Here you can ignore some files if you don't want to sync some of those.\n# eg: [\"toggle-airpods.swift\", \"airpodsbattery.sh\"]\nignored_files = []\n\n\n@dataclass\nclass RepoScriptFile:\n    filename: str\n    updated_at: datetime\n\n@dataclass\nclass LocalScriptFile:\n    filename: str\n    full_path: str\n\ndef get_files(root_path, extensions):\n    all_files = []\n    for ext in extensions:\n        all_files.extend([LocalScriptFile(filename=os.path.basename(x), full_path=os.path.abspath(x)) for x in glob(f\"{root_path}/**/*{ext}\", recursive=True)])\n    return all_files\n\ndef save_last_update_date():\n    with open(f\"{os.path.dirname(__file__)}/.update-scripts-command\", \"w\") as file:\n        file.write(datetime.now().astimezone().isoformat())\n\ndef read_last_update_date():\n    try:\n        with open(f\"{os.path.dirname(__file__)}/.update-scripts-command\", \"r\") as file:\n            return datetime.fromisoformat(file.read())\n    except:\n        return None\n\nrepo_path = \"/tmp/script-commands\"\nscripts_path = f\"{repo_path}/commands/\"\n\ndef get_files_to_update(base_date=None, base_local_files=None):\n    flatten = lambda t: [item for sublist in t for item in sublist]\n\n    def find(key, dictionary):\n        for k, v in dictionary.items():\n            if k == key:\n                yield v\n            elif isinstance(v, dict):\n                for result in find(key, v):\n                    yield result\n            elif isinstance(v, list):\n                for d in v:\n                    for result in find(key, d):\n                        yield result\n\n    with open(f\"{repo_path}/commands/extensions.json\") as json_file:\n        data = json.load(json_file)\n        script_files = [RepoScriptFile(updated_at=datetime.fromisoformat(file.get(\"updatedAt\")), filename=file.get(\"filename\"))\n            for file in flatten(find(\"scriptCommands\", data))]\n        if base_date is not None:\n            script_files = [f for f in script_files if f.updated_at > base_date]\n        base_filenames = [f.filename for f in base_local_files]\n        return [f.filename for f in script_files if f.filename in base_filenames]\n\nif not os.path.exists(path_to_scripts) and not os.path.isdir(path_to_scripts):\n    print(f\"🚨 Invalid path to scripts. Please change it in the script file here: {__file__}\")\n    exit()\n\nrmtree(repo_path, ignore_errors=True)\n# Doing this here to avoid problems with updated scripts during the process.\nnow = datetime.now()\nos.system(f\"git clone -q https://github.com/raycast/script-commands.git {repo_path} > /dev/null\")\nlocal_scripts_files = get_files(path_to_scripts, (\".py\", \".swift\", \".sh\", \".js\", \".applescript\", \".rb\"))\nlast_updated_date = read_last_update_date()\nfiles_to_update = get_files_to_update(last_updated_date, local_scripts_files)\n\nfor file in files_to_update:\n    file_basename = os.path.basename(file)\n    # We are ignoring current file to avoid weird behavior.\n    if file == __file__ or file_basename in ignored_files:\n        continue\n    repo_files = [os.path.abspath(x) for x in glob(f\"{repo_path}/**/{file_basename}\", recursive=True)]\n    if repo_files:\n        copyfile(repo_files[0], file)\n\nrmtree(repo_path, ignore_errors=True)\n\nsave_last_update_date()\n\nif not files_to_update:\n    print(\"🙌 Everything is up to date.\")\nelif len(files_to_update) == 1:\n    print(\"♻️ Updated 1 script.\")\nelse:\n    print(f\"♻️ Updated {len(files_to_update)} scripts.\")\nexit()\n"
  },
  {
    "path": "commands/system/vpn/vpn-config.sh",
    "content": "#!/usr/bin/env bash\n\n# Name of your VPN Config from System Preferences\nexport VPN_NAME=\"\"\n\nif [ -z \"$VPN_NAME\" ]; then\n  echo \"\\$VPN_NAME is empty\";\n  echo \"Please, rename it in \\\"vpn-config.sh\\\".\";\n  exit 1;\nfi\n"
  },
  {
    "path": "commands/system/vpn/vpn-start.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Connect\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Start VPN connection.\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\n\nsource vpn-config.sh\nVPN=$VPN_NAME\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    scutil --nc status \"$VPN\" | sed -n 1p | grep -qv Connected\n}\n\nfunction poll_until_connected () {\n    let loops=0 || true\n    let max_loops=200 # 200 * 0.1 is 20 seconds. Bash doesn't support floats\n\n    while isnt_connected \"$VPN\"; do\n        sleep 0.1 # can't use a variable here, bash doesn't have floats\n        let loops=$loops+1\n        [ $loops -gt $max_loops ] && break\n    done\n\n    [ $loops -le $max_loops ]\n}\n\nnetworksetup -connectpppoeservice \"$VPN\"\n\nif poll_until_connected \"$VPN\"; then\n    echo \"Connected to $VPN!\"\nelse\n    echo \"Couldn't connect to $VPN\"\n    scutil --nc stop \"$VPN\"\n    exit 1;\nfi\n"
  },
  {
    "path": "commands/system/vpn/vpn-status.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title VPN Status\n# @raycast.mode inline\n# @raycast.refreshTime 1m\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Stop VPN connection.\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\n\nsource vpn-config.sh\nVPN=$VPN_NAME\n\nstatus=$(scutil --nc status \"$VPN\" | sed -n 1p)\n\nif [ \"$status\" == \"Connected\" ]; then\n  echo \"$status to $VPN\"\n  exit 0\nfi\n\necho \"$status\"\n"
  },
  {
    "path": "commands/system/vpn/vpn-stop.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Disconnect\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Stop VPN connection.\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\n\nsource vpn-config.sh\nVPN=$VPN_NAME\n\nnetworksetup -disconnectpppoeservice \"$VPN\"\n\necho \"Disconnected from $VPN!\"\n"
  },
  {
    "path": "commands/system/vpnutil/vpnutil-config.template.sh",
    "content": "#!/usr/bin/env bash\n# Based on https://github.com/raycast/script-commands/tree/master/commands/system/vpn\n\n# Dependency: vpnutil https://github.com/Timac/VPNStatus/releases/latest\n# Installation:\n#   1. Download vpnutil.zip\n#   2. Uncompress\n#   3. Move vpnutil to /usr/local/bin\n#   4. Run manually once to bypass GateKeeper protection:\n#      - Right-click the app in the Finder\n#      - Select Open\n#      - Click on the Open button\n\n# How to use this script?\n# It's a template which needs further setup. Duplicate the file,\n# remove `.template.` from the filename and set `VPN_NAME` variable.\n\n# 🚨 Set name of your VPN Config from System Preferences\nexport VPN_NAME=\"VPN_NAME_FROM_SYSTEM_PREFERENCES\"\n\nif [ -z \"$VPN_NAME\" ]; then\n  echo \"\\$VPN_NAME is empty\";\n  echo \"Please, rename it in \\\"vpn-config.sh\\\".\";\n  exit 1;\nfi\n\nif ! command -v vpnutil &> /dev/null; then\n  echo \"vpnutil is required (https://github.com/Timac/VPNStatus/releases/latest).\";\n  exit 1;\nfi\n"
  },
  {
    "path": "commands/system/vpnutil/vpnutil-start.sh",
    "content": "#!/bin/bash\n# Based on https://github.com/raycast/script-commands/tree/master/commands/system/vpn\n\n# Depends on vpnutil: https://github.com/Timac/VPNStatus/releases/latest\n# Installation:\n#   1. Download vpnutil.zip\n#   2. Uncompress\n#   3. Move vpnutil to /usr/local/bin\n#   4. Run manually once to bypass GateKeeper protection:\n#      - Right-click the app in the Finder\n#      - Select Open\n#      - Click on the Open button\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Start VPN\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Start VPN connection.\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\nCONFIG=vpnutil-config.sh\n\nif [ ! -f $CONFIG ]; then\n    echo \"Create a vpn-config.sh from template!\"\n    exit 1\nfi\n\n# shellcheck source=/dev/null\nsource $CONFIG\nVPN=$VPN_NAME\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    vpnutil status \"$VPN\" | sed -n 1p | grep -qv Connected\n}\n\nfunction poll_until_connected () {\n    (( loops=0 ))\n    (( max_loops=200 )) # 200 * 0.1 is 20 seconds. Bash doesn't support floats\n\n    while isnt_connected \"$VPN\"; do\n        sleep 0.1 # can't use a variable here, bash doesn't have floats\n        (( loops=loops+1 ))\n        [ \"$loops\" -gt \"$max_loops\" ] && break\n    done\n\n    [ \"$loops\" -le \"$max_loops\" ]\n}\n\nvpnutil start \"$VPN\"\n\nif poll_until_connected \"$VPN\"; then\n    echo \"Connected to $VPN!\"\nelse\n    echo \"Couldn't connect to $VPN\"\n    vpnutil stop \"$VPN\"\n    exit 1;\nfi\n"
  },
  {
    "path": "commands/system/vpnutil/vpnutil-status.sh",
    "content": "#!/bin/bash\n# Based on https://github.com/raycast/script-commands/tree/master/commands/system/vpn\n\n# Dependency: vpnutil https://github.com/Timac/VPNStatus/releases/latest\n# Installation:\n#   1. Download vpnutil.zip\n#   2. Uncompress\n#   3. Move vpnutil to /usr/local/bin\n#   4. Run manually once to bypass GateKeeper protection:\n#      - Right-click the app in the Finder\n#      - Select Open\n#      - Click on the Open button\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title VPN Status\n# @raycast.mode inline\n# @raycast.refreshTime 30s\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Check VPN connection\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\n\nCONFIG=vpnutil-config.sh\n\nif [ ! -f $CONFIG ]; then\n    echo \"Create a vpn-config.sh from template!\"\n    exit 1\nfi\n\n# shellcheck source=/dev/null\nsource $CONFIG\nVPN=$VPN_NAME\n\nstatus=$(vpnutil status \"$VPN\" | sed -n 1p | awk 'NF>1{print $NF}')\n\nif [ \"$status\" == \"Connected\" ]; then\n  echo \"$status to $VPN\"\n  exit 0\nfi\n\necho \"$status\"\n"
  },
  {
    "path": "commands/system/vpnutil/vpnutil-stop.sh",
    "content": "#!/bin/bash\n# Based on https://github.com/raycast/script-commands/tree/master/commands/system/vpn\n\n# Dependency: vpnutil https://github.com/Timac/VPNStatus/releases/latest\n# Installation:\n#   1. Download vpnutil.zip\n#   2. Uncompress\n#   3. Move vpnutil to /usr/local/bin\n#   4. Run manually once to bypass GateKeeper protection:\n#      - Right-click the app in the Finder\n#      - Select Open\n#      - Click on the Open button\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Stop VPN\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Stop VPN connection\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\n\nCONFIG=vpnutil-config.sh\n\nif [ ! -f $CONFIG ]; then\n    echo \"Create a vpn-config.sh from template!\"\n    exit 1\nfi\n\n# shellcheck source=/dev/null\nsource $CONFIG\nVPN=$VPN_NAME\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    vpnutil status \"$VPN\" | sed -n 1p | grep -qv Connected\n}\n\nif isnt_connected \"$VPN\"; then\n    echo \"$VPN isn't connected\"\n    exit 1\nelse\n    vpnutil stop \"$VPN\"\n    echo \"Disconnected from $VPN\"\nfi\n"
  },
  {
    "path": "commands/system/vpnutil/vpnutil-toggle.sh",
    "content": "#!/bin/bash\n# Based on https://github.com/raycast/script-commands/tree/master/commands/system/vpn\n\n# Dependency: vpnutil https://github.com/Timac/VPNStatus/releases/latest\n# Installation:\n#   1. Download vpnutil.zip\n#   2. Uncompress\n#   3. Move vpnutil to /usr/local/bin\n#   4. Run manually once to bypass GateKeeper protection:\n#      - Right-click the app in the Finder\n#      - Select Open\n#      - Click on the Open button\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Toggle VPN\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 📡\n\n# @Documentation:\n# @raycast.packageName VPN\n# @raycast.description Toggle VPN connection\n# @raycast.author Sergey Fuksman\n# @raycast.authorURL https://github.com/fuksman\n\n\nCONFIG=vpnutil-config.sh\n\nif [ ! -f $CONFIG ]; then\n    echo \"Create a vpn-config.sh from template!\"\n    exit 1\nfi\n\n# shellcheck source=/dev/null\nsource $CONFIG\nVPN=$VPN_NAME\n\n# Source: https://superuser.com/a/736859\nfunction isnt_connected () {\n    vpnutil status \"$VPN\" | sed -n 1p | grep -qv Connected\n}\n\nfunction poll_until_connected () {\n    (( loops=0 ))\n    (( max_loops=200 )) # 200 * 0.1 is 20 seconds. Bash doesn't support floats\n\n    while isnt_connected \"$VPN\"; do\n        sleep 0.1 # can't use a variable here, bash doesn't have floats\n        (( loops=loops+1 ))\n        [ \"$loops\" -gt \"$max_loops\" ] && break\n    done\n\n    [ \"$loops\" -le \"$max_loops\" ]\n}\n\nif isnt_connected \"$VPN\"; then\n    vpnutil start \"$VPN\"\n    if poll_until_connected \"$VPN\"; then\n        echo \"Connected to $VPN!\"\n    else\n        echo \"Couldn't connect to $VPN\"\n        vpnutil stop \"$VPN\"\n        exit 1\n    fi\nelse\n    vpnutil stop \"$VPN\"\n    echo \"Disconnected from $VPN\"\nfi\n"
  },
  {
    "path": "commands/system/wallpaper-refresh.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Refresh Wallpaper\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Apply a random image from the [wallpaper directory](https://support.apple.com/guide/mac-help/change-your-desktop-picture-mchlp3013/mac) for the main display's current [Space](https://support.apple.com/guide/mac-help/work-in-multiple-spaces-mh14112/mac).\n\n# @raycast.icon 🖼️\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.schemaVersion 1\n\ntell application \"System Events\"\n\tset rotinterval to change interval of current desktop\n\tset change interval of current desktop to rotinterval\nend tell\n\ndo shell script \"echo Refreshed wallpaper\"\n"
  },
  {
    "path": "commands/system/wifi-password.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Copy Wi-Fi Password\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📟\n\n# Documentation:\n# @raycast.description Copy Wi-Fi password from current session\n# @raycast.author Astrit Malsia\n# @raycast.authorURL https://github.com/astrit\n# @raycast.packageName System\n\nairport=\"/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport\"\n\n# get current ssid\nssid=\"`$airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'`\"\n\n# get keychain access\npwd=\"`security find-generic-password -D 'AirPort network password' -ga \\\"$ssid\\\" 2>&1 >/dev/null`\"\n\n# password cleanup\npwd=$(echo \"$pwd\" | sed -e \"s/^.*\\\"\\(.*\\)\\\".*$/\\1/\")\n\n# copy the password\necho $pwd | pbcopy\n\n# print\necho \"Password $pwd is copied!\"\n"
  },
  {
    "path": "commands/system/wifi.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# @raycast.title Toggle Wi-Fi\n# @raycast.author Vincent Dörig\n# @raycast.authorURL https://github.com/vincentdoerig\n# @raycast.description Toggle your Wi-Fi connection.\n\n# @raycast.icon images/wifi-dark.png\n# @raycast.iconDark images/wifi.png\n# @raycast.mode silent\n# @raycast.packageName System\n# @raycast.schemaVersion 1\n\n# Wi-Fi interface, should normally be either `en0` or `en1`\n# ⌥ + click the wifi icon in your menu bar to display the Wi-Fi interface name\nset Interface to \"en0\"\n\nset NetworkStatus to (do shell script \"networksetup -getairportnetwork \" & Interface)\nif (NetworkStatus contains \"off\") then\n  # turn Wi-Fi on\n  do shell script \"networksetup -setairportpower Interface on\"\n  do shell script \"echo Wi-Fi turned on\"\nelse\n  # turn Wi-Fi off\n  do shell script \"networksetup -setairportpower Interface off\"\n  do shell script \"echo Wi-Fi turned off\"\nend if\n"
  },
  {
    "path": "commands/web-searches/amazon.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Amazon\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/amazon.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://www.amazon.com/s?k=$1\"\n"
  },
  {
    "path": "commands/web-searches/app-store.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in App Store\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/app-store.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\n# Documentation\n# @raycast.author Andrei Borisov\n# @raycast.authorURL https://github.com/andreiborisov\n# @raycast.description Search in App Store app\n\nopen \"macappstore://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/search?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/arxiv.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in arXiv\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/arxiv.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Field (default: all)\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.author Marco Varisco\n# @raycast.authorURL https://github.com/mava\n\narchive=\"\" # Leave empty to search in all archives, or use one of the available archives:\n#   physics astro-ph cond-mat gr-qc hep-ex hep-lat hep-ph hep-th math-ph nlin nucl-ex nucl-th quant-ph\n#   cs econ eess math q-bio q-fin stat\n# For example, uncomment the following line to search only in archive math:\n# archive=\"math\"\n\ncase $(tr \"[:upper:]\" \"[:lower:]\" <<< $2) in\n  \"\"|\"al\"|\"all\")\n    searchtype=\"all\"\n    ;;\n  \"ti\"|\"tit\"|\"titl\"|\"title\"|\"titles\")\n    searchtype=\"title\"\n    ;;\n  \"au\"|\"aut\"|\"auth\"|\"autho\"|\"author\"|\"authors\")\n    searchtype=\"author\"\n    ;;\n  \"ab\"|\"abs\"|\"abst\"|\"abstr\"|\"abstra\"|\"abstrac\"|\"abstract\"|\"abstracts\")\n    searchtype=\"abstract\"\n    ;;\n  \"co\"|\"com\"|\"comm\"|\"comme\"|\"commen\"|\"comment\"|\"comments\")\n    searchtype=\"comments\"\n    ;;\n  *)\n    searchtype=$2\n    ;;\nesac\n\nopen \"https://arxiv.org/search/$archive?query=$1&searchtype=$searchtype\"\n"
  },
  {
    "path": "commands/web-searches/bnf-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title BNF Search\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 💊\n# @raycast.packageName Medical\n# @raycast.argument1 { \"type\": \"dropdown\", \"placeholder\": \"Source\", \"data\": [{\"title\": \"BNF (Adults)\", \"value\": \"bnf\"}, {\"title\": \"BNFC (Children)\", \"value\": \"bnfc\"}] }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Medication (e.g. Paracetamol)\" }\n\n# Documentation:\n# @raycast.description Search the British National Formulary (BNF) or BNFC directly.\n# @raycast.author Jack Smith\n# @raycast.authorURL https://github.com/myusualonewastaken\n\nSOURCE=\"$1\"\nINPUT=\"$2\"\n\nif [ \"$SOURCE\" == \"bnfc\" ]; then\n    BASE_DOMAIN=\"bnfc.nice.org.uk\"\nelse\n    BASE_DOMAIN=\"bnf.nice.org.uk\"\nfi\n\n# Clean up input: Lowercase, replace spaces with dashes\nSLUG=$(echo \"$INPUT\" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')\n\nDIRECT_URL=\"https://$BASE_DOMAIN/drugs/$SLUG/\"\nSEARCH_URL=\"https://$BASE_DOMAIN/search?q=$INPUT\"\n\n# Check URL with a fake User-Agent to avoid being blocked\n# -o /dev/null: Ignore the page content\n# --silent: Don't show loading bars\n# --head: Only check the headers\n# --write-out '%{http_code}': Tell us the status code (e.g., 200 or 404)\nSTATUS=$(curl -o /dev/null --silent --head --write-out '%{http_code}' -A \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\" \"$DIRECT_URL\")\n\n# If the status is 200 (OK), open the direct page. Otherwise, search.\nif [ \"$STATUS\" -eq 200 ]; then\n  open \"$DIRECT_URL\"\nelse\n  open \"$SEARCH_URL\"\nfi\n"
  },
  {
    "path": "commands/web-searches/bundlephobia.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Bundlephobia cost\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon 📦\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"package name\", \"percentEncoded\": true }\n\nopen \"https://bundlephobia.com/result?p=${1}\"\n"
  },
  {
    "path": "commands/web-searches/caniuse.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Caniuse.com search\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon ❓\n# @raycast.packageName Web searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"feature\", \"percentEncoded\": true }\n\nopen \"https://caniuse.com/#search=${1}\"\n"
  },
  {
    "path": "commands/web-searches/check-weather.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Check Weather\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🌦\n# @raycast.packageName wttr.in\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Location\", \"optional\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Options\", \"optional\": true}\n\n# Documentation:\n# @raycast.author Jakub Lanski\n# @raycast.authorURL https://github.com/jaklan\n\n# $1 (Location) - e.g. \"warsaw\", \"warsaw poland\", \"warsaw usa\"; default: current location\n# $2 (Options) - e.g. \"0\", \"1\", \"0q\", \"format=v2\"; more info:\n# https://wttr.in/:help\n# https://github.com/chubin/wttr.in\nopen \"https://wttr.in/$1?$2\"\n"
  },
  {
    "path": "commands/web-searches/clipboard-to-17track.js",
    "content": "#!/usr/bin/env node\n\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title Clipboard to 17TRACK\n// @raycast.mode silent\n// @raycast.packageName Web Searches\n\n// Optional parameters:\n// @raycast.icon 🚚\n\n// Documentation:\n// @raycast.description Open 17TRACK with the tracking code found in the clipboard\n// @raycast.author Alessandra Pereyra\n// @raycast.authorURL https://github.com/alessandrapereyra\n\nconst child_process = require(\"child_process\");\nconst trackingCode = child_process.execSync(\"pbpaste\").toString();\n\nconst url = `https://t.17track.net/en#nums=${trackingCode}`;\nchild_process.execSync(`open \"${url}\"`);\n"
  },
  {
    "path": "commands/web-searches/crunchbase.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Crunchbase\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/crunchbase.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://www.crunchbase.com/textsearch?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/doi-clipboard.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Find Paper\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📖\n# @raycast.packageName DOI\n\n# Documentation:\n# @raycast.description Scans clipboard and opens DOI links in your browser\n# @raycast.author Razvan Azamfirei\n# @raycast.authorURL https://github.com/razvanazamfirei\nLINK=\"$(pbpaste)\"\nREGEX=\"^doi: 10.\"\nif [[ \"$LINK\" =~ ^doi:10. ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi:/}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ^doi/10. ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi///}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ${REGEX} ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi: //}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ^10. ]]; then\n    URL=\"https://doi.org/${LINK}\"\n    open \"$URL\"\nelse\n    echo \"Please specify a DOI\"\n    exit 1\nfi\n"
  },
  {
    "path": "commands/web-searches/doi.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Find Paper\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 📖\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"DOI\" }\n# @raycast.packageName DOI\n\n# Documentation:\n# @raycast.description Parses and opens DOI links in your browser\n# @raycast.author Razvan Azamfirei\n# @raycast.authorURL https://github.com/razvanazamfirei\nLINK=\"$1\"\nREGEX=\"^doi: 10.\"\nif [[ \"$LINK\" =~ ^doi:10. ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi:/}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ^doi/10. ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi///}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ${REGEX} ]]; then\n    IN=\"$LINK\"\n    arrIN=(\"${IN//doi: //}\")\n    URL=\"https://doi.org/${arrIN[0]}\"\n    open \"$URL\"\nelif [[ \"$LINK\" =~ ^10. ]]; then\n    URL=\"https://doi.org/${LINK}\"\n    open \"$URL\"\nelse\n    echo \"Please specify a DOI\"\n    exit 1\nfi\n"
  },
  {
    "path": "commands/web-searches/duck-duck-go.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in DuckDuckGo\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/duck-duck-go.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true}\n\nopen \"https://duckduckgo.com/?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/ecosia.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Ecosia\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/ecosia.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.author Sasivarnan R\n# @raycast.authorURL https://github.com/sasivarnan\n\n\nopen \"https://www.ecosia.org/search?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/figma.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Figma\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/figma.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\n# Documentation:\n# @raycast.description Search files in Figma\n# @raycast.author Tanguy Le Stradic\n# @raycast.authorURL https://github.com/tanguyls\n\n# Configuration\n\n# To retrieve your Figma team_id, do the following:\n# 1. Go to https://www.figma.com/files\n# 2. Click on \"Search\"\n# 3. The current URL should now have an 18-digit id, that's your team_id. If you're using a personal workspace, leave the below variable blank.\nTEAM_ID=\"\"\n\nopen \"https://www.figma.com/files/$TEAM_ID/search?model_type=files&q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/giphy.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Giphy search\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon images/giphy.png\n# @raycast.packageName Web searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"search\", \"percentEncoded\": true }\n\nopen \"https://giphy.com/search/${1}\"\n"
  },
  {
    "path": "commands/web-searches/google-maps.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Google Maps\n# @raycast.mode silent\n# @raycast.packageName Google Maps\n\n# Optional parameters:\n# @raycast.icon images/google-map.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Location\", \"optional\": true}\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Destination\", \"optional\": true}\n\nfirst_argument=${1// /+}\nsecond_argument=${2// /+}\n\nif [ \"$1\" != \"\" ]; then\n        if [ \"$2\" = \"\" ]; then\n                open \"https://www.google.com/maps/dir/?api=1&origin=$first_argument\"\n        else\n                open \"https://www.google.com/maps/dir/?api=1&origin=$first_argument&destination=$second_argument\"\n        fi\nelif [ \"$1\" = \"\" ] && [ \"$2\" != \"\" ]; then\n        open \"https://www.google.com/maps/dir/?api=1&origin=Current+Location&destination=$second_argument\"\nelse\n        open \"https://www.google.com/maps\"\nfi\n"
  },
  {
    "path": "commands/web-searches/google-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Google\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/google.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true}\n\nopen \"https://www.google.com/search?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/google-translate.rb",
    "content": "#!/usr/bin/ruby\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Google Translate\n# @raycast.mode compact\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon 🌍\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"From\", \"optional\": true }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"To\", \"optional\": true }\n\n# Documentation:\n# @raycast.description Translates via Google Translate\n# @raycast.author Roland Leth\n# @raycast.authorURL https://runtimesharks.com\n\n# Usually translations are short enough, which is why this uses a `compact` mode,\n# but if you'll be using it for longer translations, change line 6 to `fullOutput`.\n# If you do change to `fullOutput`, you might also want to change the last line\n# of the script to `.join(\"\\n\\n\")`, so each result appears on its own line.\n\nrequire 'net/http'\nrequire 'json'\nrequire 'open-uri'\n\nq = ARGV[0]\nsl = ARGV[1].nil? || ARGV[1].empty? ? \"en\" : ARGV[1] # Source language\ntl = ARGV[2].nil? || ARGV[2].empty? ? \"ro\" : ARGV[2] # Target language\n\n# If the length of the query is less than 2, it won't return anything valid.\nif q.length < 2\n    exit 1\nend\n\nuri = URI('https://translate.googleapis.com/translate_a/single')\nuri.query = URI::encode_www_form(\n  'client' => 'gtx',\n  'sl' => sl,\n  'tl' => tl,\n  'dt' => 't',\n  'q' => q\n)\n\nhttp = Net::HTTP.new(uri.host, 80)\nrequest = Net::HTTP::Get.new(uri, initheader = {'Content-Type' => 'application/json', 'Accept' => 'application/json'})\nresults = http.request(request).read_body.force_encoding('UTF-8')\n\nputs JSON.parse(results)[0][0]\n    .filter { |r| r.is_a? String and r != q }\n    .uniq\n    .join(\", \")\n"
  },
  {
    "path": "commands/web-searches/grep-app-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in grep.app\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon https://grep.app/favicon.ico\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://grep.app/search?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/hunter.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Find Email Address With Hunter\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/hunter.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"First Name\", \"percentEncoded\": true, \"optional\": false }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Last Name\", \"percentEncoded\": true, \"optional\": false }\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Domain\", \"percentEncoded\": true, \"optional\": false }\n# @raycast.packageName Web Searches\n\n# Documentation:\n# @raycast.description Find emails using hunter.io\n# @raycast.author Tanguy Le Stradic\n# @raycast.authorURL https://github.com/tanguyls\n\nfirst_name=$1\nlast_name=$2\ndomain=$3\n\nopen https://hunter.io/find/$domain/$first_name%20$last_name\n"
  },
  {
    "path": "commands/web-searches/im-feeling-ducky.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title I'm Feeling Ducky\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon ./images/duck-duck-go.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n# @raycast.packageName Web Searches\n\n# Documentation:\n# @raycast.description Open the first DuckDuckGo search result page for your query (also supports bang!)\n# @raycast.author Achille Lacoin\n# @raycast.authorURL https://github.com/pomdtr\n\n# region-specific search e.g. 'us-en' for US (default);\n# visit https://duckduckgo.com/params\nREGION=us-en\n\nif ! command -v tldr &>/dev/null; then\n    echo \"ddgr is not installed.\"\n    echo \"Installation instructions: https://github.com/jarun/ddgr#installation\"\n    exit 1\nfi\n\nquery=$1\nddgr --ducky --noprompt \"$query\" --reg \"$REGION\" &> /dev/null\n"
  },
  {
    "path": "commands/web-searches/kinopoisk.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Kinopoisk\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/kinopoisk.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\n# Documentation\n# @raycast.author Andrei Borisov\n# @raycast.authorURL https://github.com/andreiborisov\n\nopen \"https://www.kinopoisk.ru/index.php?kp_query=$1\"\n"
  },
  {
    "path": "commands/web-searches/mdn.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in MDN (Mozilla) Docs by Topic\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/mdn_light.png\n# @raycast.iconDark images/mdn_dark.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"js, css, html\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n#\n# Documentation:\n# @raycast.author Jesse Traynham\n# @raycast.authorURL https://github.com/traynham\n# @raycast.description Search in MDN (Mozilla) Docs by topic\n\nopen \"https://developer.mozilla.org/search?topic=${1}&q=${2}\"\n"
  },
  {
    "path": "commands/web-searches/mozilla-developer-network.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search MDN (Mozilla Developer Network)\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.author Jon Callahan\n# @raycast.authorURL https://www.joncallahan.com\n\n# Optional parameters:\n# @raycast.icon images/mozilla-developer-network.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://developer.mozilla.org/search?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/njt.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title njt\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon 🐸\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"package-name [destination]\", \"percentEncoded\": true }\n\nopen \"https://njt.now.sh/jump?from=raycast&to=${1}\"\n"
  },
  {
    "path": "commands/web-searches/npmjs.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search npm Packages\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/npmjs.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"package name\", \"percentEncoded\": true }\n\nopen \"https://www.npmjs.com/search?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/npms.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title npms\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon images/npms.png\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"package name\", \"percentEncoded\": true }\n\nopen \"https://npms.io/search?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/opensecrets.sh",
    "content": "#!/bin/bash\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search OpenSecrets.org\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/opensecrets.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Type (default: donor)\", \"optional\": true, \"percentEncoded\": true }\n# @raycast.author Daniel Sieradski\n# @raycast.authorURL https://github.com/selfagency\n\ncase $(tr \"[:upper:]\" \"[:lower:]\" <<<$2) in\n\"\" | \"d\" | \"donor\" | \"donors\")\n  searchtype=\"donors\"\n  ;;\n\"p\" | \"pol\" | \"pols\" | \"politician\" | \"politicians\" | \"l\" | \"lob\" | \"lobbyist\" | \"lobbyists\")\n  searchtype=\"indiv\"\n  ;;\n\"o\" | \"org\" | \"orgs\" | \"organization\" | \"organizations\")\n  searchtype=\"orgs\"\n  ;;\n\"n\" | \"news\")\n  searchtype=\"news\"\n  ;;\n\"s\" | \"site\")\n  searchtype=\"site\"\n  ;;\n*)\n  searchtype=$2\n  ;;\nesac\n\nopen \"https://www.opensecrets.org/search?q=$1&type=$searchtype\"\n"
  },
  {
    "path": "commands/web-searches/pkg-go-dev.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Go Package Documentation\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/go.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Package\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Version (default: latest)\", \"optional\": true }\n#   Note: For standard library packages, prefix the version with 'go'. For others, prefix with 'v'.\n#   Ex: To search for documentation on the 'time' package from Go version 1.12.3, pass 'go1.12.3'.\n#       To search for documentation on the 'github.com/gorilla/mux' package from version 1.7.0, pass 'v1.7.0'.\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Search pkg.go.dev for package documentation\n\nversion=\"\"\nif [ -n \"$2\" ]; then\n  version=\"@$2\"\nfi\n\nopen \"https://pkg.go.dev/$1$version\"\n"
  },
  {
    "path": "commands/web-searches/postgresql.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title PostgreSQL Documentation\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/psql.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n#\n# Documentation:\n# @raycast.author Phil Salant\n# @raycast.authorURL https://github.com/PSalant726\n# @raycast.description Search PostgreSQL documentation\n\nopen \"https://www.postgresql.org/search/?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/pub-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Pub.dev Search\n# @raycast.description Search [pub.dev](https://pub.dev/) for packages to build Dart and Flutter apps.\n# @raycast.mode silent\n# @raycast.author Wade Garrett\n# @raycast.authorURL https://wadegarrett.com\n\n# Optional parameters:\n# @raycast.icon images/dart-logo.png\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"search\", \"percentEncoded\": true }\n\nopen \"https://pub.dev/packages?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/repo.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Open npm Package Repo\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon 📦\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"package name\", \"percentEncoded\": true }\n\nopen \"http://ghub.io/${1}\"\n"
  },
  {
    "path": "commands/web-searches/rust-crate.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search for Crate\n# @raycast.mode silent\n# @raycast.packageName Web Search\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"percentEncoded\": true }\n#\n# Optional parameters:\n# @raycast.icon ./images/cargo-logo.png\n#\n# Documentation:\n# @raycast.description Search for a rust crate on crates.io\n# @raycast.author Matthew Gleich\n# @raycast.authorURL https://mattglei.ch\n\nopen \"https://crates.io/search?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-cdnjs.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search cdnjs\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [cdnjs.com](https://cdnjs.com/) for library.\n\n# @raycast.icon images/cloudflare-logo.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Library\", \"percentEncoded\": true }\n\nopen \"https://cdnjs.com/libraries?q=${1}\""
  },
  {
    "path": "commands/web-searches/search-coinmarketcap.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title CoinMarketCap Search\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon 🪙\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Placeholder\" }\n\n# Documentation:\n# @raycast.description Searches coinmarketcap currencies.\n# @raycast.author Benedict Neo\n# @raycast.authorURL https://github.com/benthecoder\n\nopen \"https://coinmarketcap.com/currencies/$1\"\n"
  },
  {
    "path": "commands/web-searches/search-emojipedia.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Emojipedia\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon 🔎\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true}\n\n# Documentation:\n# @raycast.description Search for emojis at emojipedia.\n# @raycast.author Benedict Neo\n# @raycast.authorURL https://github.com/benthecoder\n\nopen \"https://emojipedia.org/search/?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-gender-in-chosic.applescript",
    "content": "#!/usr/bin/osascript\n\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Genre in Chosic\n# @raycast.mode inline\n\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/chosic.png\n\n# Documentation:\n# @raycast.description Find the current Spotify track's gender in Chosic\n# @raycast.author quelhasu\n# @raycast.authorURL https://github.com/quelhasu\n\ntell application \"Spotify\"\n\ttry\n\t\tset spotifyURI to spotify url of the current track\n\t\tset trackName to name of the current track\n\t\tset trackArtist to artist of the current track\n\tend try\nend tell\n\nset AppleScript's text item delimiters to \":\"\nset trackID to third text item of spotifyURI\n\nlog trackName & \" ~ \" & trackArtist\nopen location \"https://www.chosic.com/music-genre-finder/?track=\" & trackID\n"
  },
  {
    "path": "commands/web-searches/search-github.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search GitHub\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [GitHub](https://github.com).\n\n# @raycast.icon images/github-logo.png\n# @raycast.iconDark images/github-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n\nopen \"https://github.com/search?q=${1}\""
  },
  {
    "path": "commands/web-searches/search-hacker-news.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Hacker News\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/hacker-news.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n# @raycast.packageName Web Searches\n\n# Documentation:\n# @raycast.description Search Hacker News\n# @raycast.authorURL https://github.com/s-oram\n# @raycast.author Shannon Matthews\n\nopen -n \"https://hn.algolia.com/?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/search-imdb.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search IMDB\n# @raycast.author Lucas Costa\n# @raycast.authorURL https://github.com/lucasrcosta\n# @raycast.description Search IMDB.\n\n# @raycast.icon images/imdb.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n\nopen \"https://www.imdb.com/find?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/search-in-baidu.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Baidu\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/baidu.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"关键词...\", \"percentEncoded\": true }\n\nopen \"https://www.baidu.com/s?wd=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-in-bilibili.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Bilibili\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/bilibili.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"关键词...\", \"percentEncoded\": true }\n\nopen \"https://search.bilibili.com/all?keyword=$1\""
  },
  {
    "path": "commands/web-searches/search-in-devhints.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Francois\n# @raycast.authorURL https://github.com/AsterYujano\n# @raycast.schemaVersion 1\n# @raycast.title Search in devhints.io\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/devhints.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search term...\", \"percentEncoded\": true }\n\nopen \"https://devhints.io/?q=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-in-dndbeyond.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in DnDBeyond.com\n# @raycast.mode silent\n# @raycast.author Chris Koerner Zeller\n# @raycast.authorURL https://github.com/ChessMess\n\n# Optional parameters:\n# @raycast.icon ./images/ddbicon.png\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Searching for\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"Category\", \"optional\": true}\n# @raycast.argument3 { \"type\": \"text\", \"placeholder\": \"Subcategory\", \"optional\": true}\n\ncase ${2} in\n  'c'|'ch'|'cha'|'char'|'character'|'characters')\n     c='characters'\n     f='spells,backgrounds,classes,feats,races'\n     ;;\n  'cl'|'class'|'classes')\n     c='characters'\n     f='classes'\n     ;;\n  'com'|'compendium')\n     c='compendium'\n     f='actions,compendium,conditions,skills,rules,weapon-property'\n     ;;\n   'e'|'eq'|'equip'|'equipment')\n     c='equipment'\n     f='equipment,magic-items'\n     ;;\n   'f'|'fe'|'ft'|'feat'|'feats')\n      c='characters'\n      f='feats'\n      ;;\n   'i'|'it'|'ite'|'itm'|'item'|'items')\n      c='items'\n      f='equipment,magic-items'\n      ;;\n    'm'|'mag'|'magic'|'magical')\n      c='items'\n      f='spells,magic-items'\n      ;;\n    'mi'|'magicitems'|'magic items'|'magic-items')\n      c='items'\n      f='magic-items'\n      ;;\n    'r'|'ra'|'rac'|'race'|'races')\n        c='characters'\n        f='races'\n        ;;\n    'r'|'rule'|'rules')\n        c='rules'\n        f='rules'\n        ;;\n    's'|'sp'|'spell'|'spells')\n      c='spells'\n      f='spells'\n      ;;\n    'sk'|'skill'|'skills')\n        c='skills'\n        f='skills'\n        ;;\n    'v'|'vehicle')\n        c='vehicle'\n        f='vehicle'\n        ;;\n    'w'|'weap'|'weapon')\n      c='equipment'\n      f='equipment,magic-items'\n      ;;\n\n   *)\n      c=${2}\n      f=${3}\n     ;;\nesac\n\nopen \"https://dndbeyond.com/search?q=${1}&c=${c}&f=${f}\"\n"
  },
  {
    "path": "commands/web-searches/search-in-jingdong.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author sunbufu\n# @raycast.authorURL https://sunbufu.github.io/\n# @raycast.schemaVersion 1\n# @raycast.title Search in Jingdong\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/jingdong.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"keyword\", \"percentEncoded\": true }\n\nopen \"https://search.jd.com/Search?keyword=$1\""
  },
  {
    "path": "commands/web-searches/search-in-taobao.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Taobao\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/taobao.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Placeholder\", \"percentEncoded\": true }\n\nopen \"https://s.taobao.com/search?q=$1\""
  },
  {
    "path": "commands/web-searches/search-in-wikipedia.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Wikipedia\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/wikipedia.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search term...\", \"percentEncoded\": true }\n\ndomain=\"zh\"\n\nopen \"https://$domain.wikipedia.org/w/index.php?search=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-in-zhihu.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author Jax0rz\n# @authorURL https://github.com/Jax0rz\n# @raycast.schemaVersion 1\n# @raycast.title Search in Zhihu\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/zhihu.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"关键词...\", \"percentEncoded\": true}\n\nopen \"https://www.zhihu.com/search?type=content&q=$1\"\n"
  },
  {
    "path": "commands/web-searches/search-linkedin.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search LinkedIn\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/linkedin.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Search for?\", \"percentEncoded\": true}\n\n# Documentation:\n# @raycast.author Nitin Gupta\n# @raycast.authorURL https://twitter.com/gniting\n# @raycast.description Search LinkedIn\n\nopen \"https://www.linkedin.com/search/results/all/?keywords=${1}\"\n"
  },
  {
    "path": "commands/web-searches/search-netflix.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search Netflix\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search Netflix.\n\n# @raycast.icon images/netflix-logo.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n\nopen \"https://www.netflix.com/search?q=${1}\""
  },
  {
    "path": "commands/web-searches/search-php-docs.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search PHP Docs\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [PHP official documentation](https://www.php.net/docs.php).\n\n# @raycast.icon images/php-logo.png\n# @raycast.iconDark images/php-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n\nopen \"https://www.php.net/manual-lookup.php?pattern=${1}&scope=quickref\""
  },
  {
    "path": "commands/web-searches/search-pypi.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search Python Package Index (PyPI)\n# @raycast.author Lucas Costa\n# @raycast.authorURL https://github.com/lucasrcosta\n# @raycast.description Search Python Package Index (PyPI)\n\n# @raycast.icon images/pip.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n\nopen \"https://pypi.org/search/?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/search-python3-docs.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search Python 3 Documentation\n# @raycast.author Lucas Costa\n# @raycast.authorURL https://github.com/lucasrcosta\n# @raycast.description Search Python 3 Documentation\n\n# @raycast.icon images/python.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Title\", \"percentEncoded\": true }\n\nopen \"https://docs.python.org/3/search.html?q=${1}\"\n"
  },
  {
    "path": "commands/web-searches/search-rust-docs.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Rust Documentation\n# @raycast.mode silent\n#\n# Optional parameters:\n# @raycast.packageName Web Searches\n# @raycast.icon images/rust.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Name\", \"percentEncoded\": true }\n# \n# Example query:  \n#   Searching for `expect` will open this link in your browser:  \n#     `https://doc.rust-lang.org/std/?search=expect`.\n# \n# Documentation:\n# @raycast.author lemorage\n# @raycast.authorURL https://raycast.com/lemorage\n# @raycast.description Search Rust documentation\n\nquery=$(echo \"$1\" | sed 's/ /%20/g')\n\nopen \"https://doc.rust-lang.org/std/?search=$query\"\n"
  },
  {
    "path": "commands/web-searches/search-script-command-marketplace.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Script Command\n# @raycast.mode compact\n\n# Optional parameters:\n# @raycast.icon images/marketplace-logo.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\"}\n# @raycast.packageName Web Searches\n# @raycast.description Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https://scriptcommands.alexandru.so).\n\n# Documentation:\n# @raycast.author Alexandru Turcanu\n# @raycast.authorURL https://github.com/Pondorasti\n\nopen \"https://scriptcommands.alexandru.so/?search=$1\"\n\n"
  },
  {
    "path": "commands/web-searches/search-swift-github.sh",
    "content": "#!/bin/bash\n\n# @raycast.schemaVersion 1\n# @raycast.title Search Swift Code\n# @raycast.mode silent\n\n# @raycast.icon ./images/swift.png\n# @raycast.packageName Web Searches\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"urlencoded\": true, \"optional\": true }\n\nif [[ -z \"$1\" ]]\nthen \n  QUERY=$(pbpaste)\nelse\n  QUERY=$1\nfi\n\nopen \"https://github.com/search?q=$QUERY&l=Swift&type=code\""
  },
  {
    "path": "commands/web-searches/search-unsplash.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search Unsplash\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [Unsplash](https://unsplash.com).\n\n# @raycast.icon images/unsplash-logo.png\n# @raycast.iconDark images/unsplash-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\" }\n\nopen \"https://unsplash.com/s/photos/${1// /-}\""
  },
  {
    "path": "commands/web-searches/search-wpengine-installs.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search WP Engine Installs\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [WP Engine](https://wpengine.com) installs.\n\n# @raycast.icon images/wpengine-logo.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n\nopen \"https://my.wpengine.com/omni_search?q=${1}\""
  },
  {
    "path": "commands/web-searches/swift-package-index.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Swift Package Index\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/spi.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true, \"optional\": true }\n\n# Documentation\n# @raycast.author The Swift Package Index\n# @raycast.authorURL https://swiftpackageindex.com\n# @raycast.description Search for Swift packages in the Swift Package Index.\n\nif [[ -z \"$1\" ]]\nthen \n  open \"https://swiftpackageindex.com/\"\nelse\n  open \"https://swiftpackageindex.com/search?query=$1\"\nfi\n"
  },
  {
    "path": "commands/web-searches/translate-with-baidu.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author sunbufu\n# @raycast.authorURL https://sunbufu.github.io/\n# @raycast.schemaVersion 1\n# @raycast.title Translate with Baidu\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/baidu-translate.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"keyword\", \"percentEncoded\": true }\n\n# Most common acronyms\n# en = English\n# spa = Spanish\n# fra = French\n# pt = Portuguese\n# zh = Chinese\n# more to come\n# For the source language, you can also use \"auto\", for automatic detection\nsource=\"\" # Source language acronym\ndestination=\"\" # Destination language acronym \n\nopen \"https://fanyi.baidu.com/#$source/$destination/$1\""
  },
  {
    "path": "commands/web-searches/translate-with-google.template.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.author sunbufu\n# @raycast.authorURL https://sunbufu.github.io/\n# @raycast.schemaVersion 1\n# @raycast.title Translate with Google\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/google-translate.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"keyword\", \"percentEncoded\": true }\n\n# Most common acronyms\n# en = English\n# es = Spanish\n# fr = French\n# pt = Portuguese\n# zh-CN = Chinese\n# more to come\n# For the source language, you can also use \"auto\", for automatic detection\nsource=\"\" # Source language acronym\ndestination=\"\" # Destination language acronym \n\n# You can use \"translate.google.cn\" in China.\ndomain=\"translate.google.com\"\n\nopen \"https://$domain/?sl=$source&tl=$destination&text=$1&op=translate\""
  },
  {
    "path": "commands/web-searches/twitter-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Twitter\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/twitter.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://twitter.com/search?q=${1}&src=typed_query\"\n"
  },
  {
    "path": "commands/web-searches/unfurl.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Unfurl URL\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon 🔗\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"url\", \"percentEncoded\": true }\n\nopen \"https://unfurler.com/?url=${1}\"\n"
  },
  {
    "path": "commands/web-searches/wayback-machine.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Wayback Machine Search\n# @raycast.mode silent\n# @raycast.author Zander Martineau\n# @raycast.authorURL https://zander.wtf\n\n# Optional parameters:\n# @raycast.icon images/ia-logo.jpg\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"url\", \"percentEncoded\": true }\n\nopen \"https://web.archive.org/web/*/${1}\"\n"
  },
  {
    "path": "commands/web-searches/wordpress/search-wordpress-docs.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Search WordPress Docs\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Search [WordPress Developer documentation](https://developer.wordpress.org/reference/).\n\n# @raycast.icon images/wordpress-logo.png\n# @raycast.iconDark images/wordpress-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName WordPress\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Query\", \"percentEncoded\": true }\n\nopen \"https://wordpress.org/search/${1}?in=developer_documentation\""
  },
  {
    "path": "commands/web-searches/wordpress/wordpress-classes-reference.sh",
    "content": "#!/bin/bash\n\n# @raycast.title WordPress Classes Reference\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open [WordPress classes reference](https://developer.wordpress.org/reference/classes/) for specified class.\n\n# @raycast.icon images/wordpress-logo.png\n# @raycast.iconDark images/wordpress-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName WordPress\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Class name\", \"percentEncoded\": true }\n\nopen \"https://developer.wordpress.org/reference/classes/${1}/\""
  },
  {
    "path": "commands/web-searches/wordpress/wordpress-cli-command.sh",
    "content": "#!/bin/bash\n\n# @raycast.title WordPress CLI Command\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open [WordPress CLI command reference](https://developer.wordpress.org/cli/commands/) for specified command.\n\n# @raycast.icon images/wordpress-logo.png\n# @raycast.iconDark images/wordpress-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName WordPress\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Command\" }\n\nopen \"https://developer.wordpress.org/cli/commands/${1// //}/\""
  },
  {
    "path": "commands/web-searches/wordpress/wordpress-functions-reference.sh",
    "content": "#!/bin/bash\n\n# @raycast.title WordPress Functions Reference\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open [WordPress functions reference](https://developer.wordpress.org/reference/functions/) for specified function.\n\n# @raycast.icon images/wordpress-logo.png\n# @raycast.iconDark images/wordpress-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName WordPress\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Function name\", \"percentEncoded\": true }\n\nopen \"https://developer.wordpress.org/reference/functions/${1}/\""
  },
  {
    "path": "commands/web-searches/wordpress/wordpress-hooks-reference.sh",
    "content": "#!/bin/bash\n\n# @raycast.title WordPress Hooks Reference\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open [WordPress hooks reference](https://developer.wordpress.org/reference/hooks/) for specified hook.\n\n# @raycast.icon images/wordpress-logo.png\n# @raycast.iconDark images/wordpress-logo-iconDark.png\n# @raycast.mode silent\n# @raycast.packageName WordPress\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Hook name\", \"percentEncoded\": true }\n\nopen \"https://developer.wordpress.org/reference/hooks/${1}/\""
  },
  {
    "path": "commands/web-searches/wpengine-install.sh",
    "content": "#!/bin/bash\n\n# @raycast.title Open WP Engine Install\n# @raycast.author Caleb Stauffer\n# @raycast.authorURL https://github.com/crstauf\n# @raycast.description Open specified [WP Engine](https://wpengine.com) install.\n\n# @raycast.icon images/wpengine-logo.png\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n# @raycast.schemaVersion 1\n\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Install\" }\n\nopen \"https://my.wpengine.com/installs/${1// /}\"\n"
  },
  {
    "path": "commands/web-searches/yandex-search.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in Yandex\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon images/yandex.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true}\n# @raycast.packageName Web Searches\n\nopen \"https://yandex.com/search/?text=$1\"\n"
  },
  {
    "path": "commands/web-searches/youtube.sh",
    "content": "#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search in YouTube\n# @raycast.mode silent\n# @raycast.packageName Web Searches\n\n# Optional parameters:\n# @raycast.icon images/youtube.png\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"query\", \"percentEncoded\": true }\n\nopen \"https://www.youtube.com/results?search_query=$1\""
  },
  {
    "path": "documentation/ARGUMENTS.md",
    "content": "## Arguments\n\nRaycast allows you to set arguments for your script to enable you to do things like set items on a todo list or search Google for specified terms.\n\nUse `argument[1..3]` metadata to specify custom arguments that will be displayed as inputs in the search bar when the script is selected.\n\n![Custom arguments](/images/screenshots/custom-arguments.png)\nThe value of the argument metadata parameter should be valid json with these fields:\n| Field | Description | Required | App Version |\n| ----- | ----------- | -------- | ----------- |\n| type | The argument type. We currently support `\"text\"`, `\"password\"` (for secure entry), and `\"dropdown\"`. When the type is `password`, entered text will be replaced with asterisks. Most common use case – passing passwords or secrets to commands. | ✅ | 1.64.0+ |\n| placeholder | Placeholder for the input field. | ✅ | 1.2.0+ |\n| optional | Set to `true` if you want to mark the argument as optional. When not provided, the argument is considered to be required (Raycast will not allow executing the script if the argument input is empty) | | 1.3.0+ |\n| percentEncoded | Set to `true` if you want Raycast to perform percent-encoding on the argument value before passing it to the script. Can be handy for scripts that pass the argument directly to URL query | | 1.4.0+ |\n| data | An array of objects with `title` and `value` properties, e.g.: `[{\"title\": \"Item 1\", \"value\": \"1\"}]` | ✅ when `type` is `dropdown`. | 1.64.0+ |\n| ~~secure~~ | Deprecated in favor of `\"type\" = \"password\"` | | 1.18.0+ |\n\n💡 **Maximum number of arguments:** 3 (if you have a use case that requires more, please let us know via feedback or in the [Slack community](https://www.raycast.com/community))\n\nHere's an example of a simple web search script with two arguments:\n\n```\n#!/bin/bash\n\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title Search Flights\n# @raycast.mode silent\n\n# Optional parameters:\n# @raycast.icon 🛩\n# @raycast.packageName Web Searches\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"from city\", \"percentEncoded\": true }\n# @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"to city\", \"optional\": true, \"percentEncoded\": true }\n\nopen \"https://www.google.com/search?q=flights%20from%20$1%20to%20$2\"\n\n```\n\n💡**Pro tip:** When typing alias + space, Raycast will automatically move focus to the first input field.\n"
  },
  {
    "path": "documentation/OUTPUTMODES.md",
    "content": "## Output modes\n\nHere, you can browse the range of ways that Raycast lets you view your data, whether you need to display a range of items such as open pull requests, or whether you just need confirmation that your script has run successfully.\n\nIn `fullOutput` the entire output is presented on a separate view, similar to a terminal window. This is handy when your script generates output to consume.\n\n![fullOutput mode](/images/screenshots/fulloutput-mode.png)\n\nIn `compact` mode the last line of the standard output is shown in the toast\n\n![compact mode](/images/screenshots/compact-mode.png)\n\nIn `silent` mode the last line (if exists) will be shown in overlaying HUD toast after Raycast window is closed.\n\n![silent mode](/images/screenshots/silent-mode.png)\n\nIn `inline` mode, the first line of output will be directly shown in the command item and automatically refresh according to the specified `refreshTime`. Tip: Set your dashboard items as favorites via the action menu in Raycast.\n**NOTE:** `refreshTime` parameter is required for `inline` mode. When not specified, `compact` mode will be used instead.\n\n![inline mode](/images/screenshots/inline-mode.png)\n\n**🚨 Hint:** use `cmd k` to access extra functionality such as adding to favorites or reordering the root search preferences.\n\nPlease note that long-running tasks generating a lot of partial data are not supported for `compact`, `silent`, and `inline` modes. For example, the `zip` command generates a lot of partial logs when compressing folders with many files. Scripts using `zip` won't work on `compact`, `silent`, and `inline`; but they will work in `fullOutput`. To make it work in the other modes you need to use the `zip -q` flag.\n\n# ANSI Supported Colors 🎨\n\nWe support colors for `inline` and `fullOutput` mode scripts for you to customize generated output by changing its background and foreground color.\n\n![colors inline mode](/images/screenshots/inline-colours.png)\n\nEscape code is in linux format: `0x1B`\n\nColors are adapted to current users appearance settings (light and dark themes)\n| Color | # Foreground | # Background | Light | Dark |\n| ------ | ------------ | ------------ | ----- | ---- |\n| Black | 30 | 40 | #000000 | #000000 |\n| Red | 31 | 41 | #B12424 | #FF6363 |\n| Green | 32 | 42 | #006B4F | #59D499 |\n| Yellow | 33 | 43 | #F8A300 | #FFC531 |\n| Blue | 34 | 44 | #138AF2 | #56C2FF |\n| Magenta | 35 | 45 | #9A1B6E | #CF2F98 |\n| Cyan | 36 | 46 | #3EB8BF | #52EEE5 |\n| White | 97 | 107 | #FFFFFF | #FFFFFF |\n\n## Other colors\n\nWe also support [8-bit](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) and [24-bit](https://en.wikipedia.org/wiki/ANSI_escape_code#24-bit) color codes if you need a wider range of colors.\n\n**Other supported codes:**\n\n| Code | Name |\n| ---- | ---- |\n| 0 | Reset (normal) |\n| 4 | Underline |\n| 9 | Crossed out |\n| 24 | Not underlined |\n| 29 | Not crossed out |\n\n**💡Hint:** Unsupported terminal codes will be stripped out from output and ignored.\n\n**Example:**\n\n![colors inline mode](/images/screenshots/colour-example.png)\n| Script | Code |\n| ------ | ---- |\n| bash | `echo -e '\\033[31;42mred text on green background\\033[0m'` |\n| bash tput | `export TERM=linux; echo \"$(tput setaf 1)$(tput setab 2)red text on green background$(tput sgr0)\";` |\n| swift | `print(\"\\\\u{001B}[31;42mred text on green background\\\\u{001B}[0m\")` |\n| osascript | `do shell script \"echo '\\\\033[31;42mred text on green background\\\\033[0m'\"`|\n| node.js | `console.log('\\x1b[31;42mred text on green background\\x1b[0m')`\n"
  },
  {
    "path": "templates/script-command.template.applescript",
    "content": "#!/usr/bin/osascript\n\n# Raycast Script Command Template\n#\n# Duplicate this file and remove \".template\" from the filename to get started.\n# See full documentation here: https://github.com/raycast/script-commands\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title My First Script\n# @raycast.mode fullOutput\n# @raycast.packageName Raycast Scripts\n#\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Arg1\" }\n#\n# Documentation:\n# @raycast.description Write a nice and descriptive summary about your script command here \n# @raycast.author Your name\n# @raycast.authorURL An URL for one of your social medias\n\non run argv\n  log \"Hello from My First Script: \" & ( item 1 of argv )\nend run\n"
  },
  {
    "path": "templates/script-command.template.cs",
    "content": "#!/usr/bin/env dotnet\n\n// Raycast Script Command Template\n//\n// Dependency: This script requires .NET 10\n// Install .NET: https://dotnet.microsoft.com/\n//\n// Duplicate this file and remove \".template\" from the filename to get started.\n// See full documentation here: https://github.com/raycast/script-commands\n//\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title My First Script\n// @raycast.mode fullOutput\n// @raycast.packageName Raycast Scripts\n//\n// Optional parameters:\n// @raycast.icon 🤖\n// @raycast.currentDirectoryPath ~\n// @raycast.needsConfirmation false\n//\n// Documentation:\n// @raycast.description Write a nice and descriptive summary about your script command here\n// @raycast.author Your name\n// @raycast.authorURL An URL for one of your social medias\n\nConsole.WriteLine(\"Hello World!\");\n"
  },
  {
    "path": "templates/script-command.template.js",
    "content": "#!/usr/bin/env node\n\n// Raycast Script Command Template\n//\n// Dependency: This script requires Nodejs.\n// Install Node: https://nodejs.org/en/download/\n//\n// Duplicate this file and remove \".template\" from the filename to get started.\n// See full documentation here: https://github.com/raycast/script-commands\n//\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title My First Script\n// @raycast.mode fullOutput\n// @raycast.packageName Raycast Scripts\n//\n// Optional parameters:\n// @raycast.icon 🤖\n// @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"js, css, html\", \"optional\": true}\n// @raycast.argument2 { \"type\": \"text\", \"placeholder\": \"query\" }\n//\n// Documentation:\n// @raycast.description Write a nice and descriptive summary about your script command here \n// @raycast.author Your name\n// @raycast.authorURL An URL for one of your social medias\n\n/*\n\n\tABOUT THIS TEMPLATE:\n\t\n\tThis template is meant to be a quick starting point for creating a script command using Nodejs.\n\t\n\tThis template demonstrates the following ideas:\n\t\n\t* Extracting passed arguments.\n\t* Using both required and optional arguments\n\t* URI Encoding\n\t* Outputting result to Raycast\n\t* Opening a url using exec and the unix open command\n\t* Use of destructuring\n\t* Use of template literals\n\n*/\n\nconst { exec } = require('child_process')\n\n// Use destructuring to grab arguments.\n// Use slice to start from position 3.\nlet [topic, query] = process.argv.slice(2)\nlet uri = `https://developer.mozilla.org/search?topic=${topic}&q=${encodeURIComponent(query)}`\n\n// console.log() displays output in fullOutput mode.\nconsole.log(`The arguments are: \\n   ${process.argv.join('\\n   ')}\\n`)\nconsole.log(`Your topic is \"${topic}\"`)\nconsole.log(`Your query is \"${query}\"`)\nconsole.log(`Your query uri encoded is \"${encodeURIComponent(query)}\"`)\nconsole.log(`The uri is \"${uri}\"`)\n\n// Uncomment the exec line below to open this query in your web browser.\n// Use double quotes around the uri to avoid processing issues.\n//exec(`open \"${uri}\"`)"
  },
  {
    "path": "templates/script-command.template.php",
    "content": "#!/usr/bin/env php\n\n# Raycast Script Command Template\n#\n# Dependency: This script requires PHP\n# Install PHP: http://www.https://www.php.net/\n#\n# Duplicate this file and remove \".template\" from the filename to get started.\n# See full documentation here: https://github.com/raycast/script-commands\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title My First Script\n# @raycast.mode fullOutput\n# @raycast.packageName Raycast Scripts\n#\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Write a nice and descriptive summary about your script command here \n# @raycast.author Your name\n# @raycast.authorURL An URL for one of your social medias\n\n<?php\n\nprint(\"Hello World!\");\n"
  },
  {
    "path": "templates/script-command.template.py",
    "content": "#!/usr/bin/env python3\n\n# Raycast Script Command Template\n#\n# Dependency: This script requires Python 3\n# Install Python 3: https://www.python.org/downloads/release\n#\n# Duplicate this file and remove \".template\" from the filename to get started.\n# See full documentation here: https://github.com/raycast/script-commands\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title My First Script\n# @raycast.mode fullOutput\n# @raycast.packageName Raycast Scripts\n#\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Write a nice and descriptive summary about your script command here \n# @raycast.author Your name\n# @raycast.authorURL An URL for one of your social medias\n\nprint(\"Hello World!\")\n"
  },
  {
    "path": "templates/script-command.template.rb",
    "content": "#!/usr/bin/env ruby\n\n# Raycast Script Command Template\n#\n# Dependency: This script requires Ruby\n# Install Ruby: http://www.ruby-lang.org/\n#\n# Duplicate this file and remove \".template\" from the filename to get started.\n# See full documentation here: https://github.com/raycast/script-commands\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title My First Script\n# @raycast.mode fullOutput\n# @raycast.packageName Raycast Scripts\n#\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n# @raycast.argument1 { \"type\": \"text\", \"placeholder\": \"Placeholder text\" }\n#\n# Documentation:\n# @raycast.description Write a nice and descriptive summary about your script command here \n# @raycast.author Your name\n# @raycast.authorURL An URL for one of your social medias\n\n# If accepting an argument:\n# arg1 = ARGV[0]\n\nputs \"Hello World!\"\n"
  },
  {
    "path": "templates/script-command.template.sh",
    "content": "#!/bin/bash\n\n# Raycast Script Command Template\n#\n# Duplicate this file and remove \".template\" from the filename to get started.\n# See full documentation here: https://github.com/raycast/script-commands\n#\n# Required parameters:\n# @raycast.schemaVersion 1\n# @raycast.title My First Script\n# @raycast.mode fullOutput\n# @raycast.packageName Raycast Scripts\n#\n# Optional parameters:\n# @raycast.icon 🤖\n# @raycast.currentDirectoryPath ~\n# @raycast.needsConfirmation false\n#\n# Documentation:\n# @raycast.description Write a nice and descriptive summary about your script command here \n# @raycast.author Your name\n# @raycast.authorURL An URL for one of your social medias\n\necho \"Hello from My First Script\"\n"
  },
  {
    "path": "templates/script-command.template.swift",
    "content": "#!/usr/bin/swift\n\n// Raycast Script Command Template\n// \n// Duplicate this file and remove \".template\" from the filename to get started.\n// See full documentation here: https://github.com/raycast/script-commands\n//\n// Required parameters:\n// @raycast.schemaVersion 1\n// @raycast.title My First Script\n// @raycast.mode fullOutput\n// @raycast.packageName Raycast Scripts\n//\n// Optional parameters:\n// @raycast.icon 🤖\n// @raycast.currentDirectoryPath ~\n// @raycast.needsConfirmation false\n//\n// Documentation:\n// @raycast.description Write a nice and descriptive summary about your script command here\n// @raycast.author Your name\n// @raycast.authorURL An URL for one of your social medias\n\nprint(\"Hello from My First Script\")\n"
  }
]