diff --git a/.github/workflows/script-commands.yml b/.github/workflows/script-commands.yml index 4b139025e..cd5dea05f 100644 --- a/.github/workflows/script-commands.yml +++ b/.github/workflows/script-commands.yml @@ -3,20 +3,22 @@ name: Set as Executable and Generate Documentation on: push: branches: [master] + paths-ignore: + - commands/README.md + - commands/extensions.json jobs: scriptCommands: - runs-on: macos-12 + runs-on: macos-15 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - name: Setup Xcode - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: 13.4.1 + uses: raycast/github-actions/setup-xcode@xcode-16.1.x - name: Setup GIT uses: raycast/github-actions/setup-git@v1.1.0 @@ -42,7 +44,7 @@ jobs: uses: ad-m/github-push-action@master with: branch: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} + github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - name: Notify Failure if: failure() diff --git a/README.md b/README.md index a1a82d593..fcccd6f14 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@
- GitHub contributors + GitHub contributors - Twitter Follow + Twitter Follow
diff --git a/commands/README.md b/commands/README.md index 509395197..88289b6ac 100644 --- a/commands/README.md +++ b/commands/README.md @@ -25,13 +25,17 @@ This repository contains sample commands and documentation to write your own one ### Categories +- [Ai](#ai) + - [Gemini](#gemini) - [Apps](#apps) - [Agenda](#agenda) - [Amphetamine](#amphetamine) - [Baremetrics](#baremetrics) - [Bartender](#bartender) - [Bear](#bear) + - [BusyCal](#busycal) - [Chatgpt](#chatgpt) + - [Claude](#claude) - [Cleanshot](#cleanshot) - [Craft](#craft) - [DND Me](#dnd-me) @@ -45,6 +49,7 @@ This repository contains sample commands and documentation to write your own one - [ExpressVPN](#expressvpn) - [Fantastical](#fantastical) - [Ferdi](#ferdi) + - [Find My](#find-my) - [Focus](#focus) - [GoodLinks](#goodlinks) - [HazeOver](#hazeover) @@ -72,6 +77,7 @@ This repository contains sample commands and documentation to write your own one - [Session](#session) - [SideNotes](#sidenotes) - [Sip](#sip) + - [Stickies](#stickies) - [Sublime](#sublime) - [Surfshark](#surfshark) - [Tailscale](#tailscale) @@ -108,6 +114,7 @@ This repository contains sample commands and documentation to write your own one - [Firebase](#firebase) - [Mood Meter](#mood-meter) - [Open Weather](#open-weather) +- [Dashboards](#dashboards) - [Developer Utils](#developer-utils) - [Aws](#aws) - [Brew](#brew) @@ -131,7 +138,9 @@ This repository contains sample commands and documentation to write your own one - [Apple Tv](#apple-tv) - [Cmus](#cmus) - [Endel](#endel) + - [Lowfi](#lowfi) - [Sonos](#sonos) + - [Speaker Setup](#speaker-setup) - [Spotify](#spotify) - [Tidal](#tidal) - [foobar2000](#foobar2000) @@ -153,11 +162,20 @@ This repository contains sample commands and documentation to write your own one - [Samsung TV](#samsung-tv) - [System](#system) - [Audio](#audio) + - [Magic Keyboard Switcher](#magic-keyboard-switcher) - [VPN](#vpn) - [Vpnutil](#vpnutil) - [Web Searches](#web-searches) - [WordPress](#wordpress) +## Ai + +#### Gemini + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [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) | ✅ | | | + ## Apps #### Agenda @@ -202,12 +220,24 @@ This repository contains sample commands and documentation to write your own one | | [Open Todos](apps/bear/bear-todo.sh) | Open the Todo section in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ | | | | | [Search](apps/bear/bear-search.sh) | Search notes by keyword and/or tag in Bear. | [Tanay Nistala](https://github.com/tanaynistala) | ✅ | | | +#### BusyCal + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [Create Event/Task](apps/busycal/new-busycal-event-or-task.applescript) | Creates new events or tasks in BusyCal. | [Annie Ma](www.anniema.co) | ✅ | | | + #### Chatgpt | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | | | [chatgpt](apps/chatgpt/chatgpt-open-safari.applescript) | Open chatgpt in safari | [gintonyc](https://raycast.com/gintonyc) | | | | +#### Claude + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | ✨ | [Ask Claude](apps/claude/claude.js) | Open Claude in Chrome browser and submit a prompt | [Nimo Beeren](https://github.com/nimobeeren) | ✅ | | | + #### Cleanshot | Icon | Title | Description | Author | Args | Templ | Lang | @@ -346,6 +376,12 @@ This repository contains sample commands and documentation to write your own one | | [Open Service by Index](apps/ferdi/ferdi-open-service-by-index.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | | | [Open Service by Name](apps/ferdi/ferdi-open-service-by-name.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | +#### Find My + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [Find My Phone (Auto Sound)](apps/find-my/fmp.js) | N/A | Raycast | | | | + #### Focus | Icon | Title | Description | Author | Args | Templ | Lang | @@ -399,6 +435,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [CaptchaFromMail](apps/mail/copy-captcha-from-mail.py) | Copy the captcha from the emlx file. | [RealTong](https://raycast.com/RealTong) | | | | | 📧 | [Copy Foreground Mail Deeplink](apps/mail/copy-foreground-mail-deeplink.applescript) | Copies the foreground Mail deeplink | [Jesse Claven](https://github.com/jesse-c) | | | | #### Medo @@ -544,6 +581,7 @@ This repository contains sample commands and documentation to write your own one | | [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) | | | | | | [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) | | | | | | [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) | | | | + | | [Download Current URL](apps/safari/safari-download-url.applescript) | Download the currently active tab's URL. | [Michael Bianco](https://github.com/iloveitaly) | | | | | | [Duplicate Tab](apps/safari/safari-duplicate-tab.applescript) | Duplicates and opens the currently active tab. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | | | | | | [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) | | | | | | [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) | | | | @@ -574,6 +612,12 @@ This repository contains sample commands and documentation to write your own one | | [Open Contrast Checker](apps/sip/sip-open-check-contrast.sh) | Open Sip Contrast Checker. | [Sip](https://twitter.com/sip_app/) | | | | | | [Show Color Picker](apps/sip/sip-show-picker.sh) | Pick a color value from your screen. | [Sip](https://twitter.com/sip_app/) | | | | +#### Stickies + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [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/) | | | | + #### Sublime | Icon | Title | Description | Author | Args | Templ | Lang | @@ -595,7 +639,7 @@ This repository contains sample commands and documentation to write your own one | | [Connect](apps/tailscale/tailscale-connect.sh) | Connects to Tailscale | [Ross Zurowski](https://github.com/rosszurowski) | | | | | | [Disconnect](apps/tailscale/tailscale-disconnect.sh) | Disconnects from Tailscale | [Ross Zurowski](https://github.com/rosszurowski) | | | | | | [Get IP](apps/tailscale/tailscale-ip.sh) | Gets your private Tailscale IP | [Ross Zurowski](https://github.com/rosszurowski) | | | | - | | [Switch Account](apps/tailscale/tailscale-switch.sh) | Switches Tailscale networks | [Ross Zurowski](https://github.com/rosszurowski) | | | | + | | [Switch Account](apps/tailscale/tailscale-switch.sh) | Switches Tailscale networks | [Ross Zurowski](https://github.com/rosszurowski) and [Daniel Schoemer](https://github.com/quatauta) | | | | #### Terminal Translate @@ -694,6 +738,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | 🤖 | [Open profile](apps/iterm/iterm-open-profile-in-new-window.applescript) | N/A | [sunrisewestern](https://github.com/sunrisewestern) | ✅ | | | | | [Run Shell Command](apps/iterm/iterm-run-shell-command.applescript) | N/A | [Andrei Borisov](https://github.com/andreiborisov) | ✅ | | | #### iconsur @@ -714,6 +759,7 @@ This repository contains sample commands and documentation to write your own one | 🥽 | [Current Website to Private Browser](browsing/to-private-browsing.sh) | Open the current site in a private browser | [raulanatol](https://github.com/raulanatol) | | | | | | [Go to Outline](browsing/go-to-outine.sh) | Open the website at Outline | [Ronan Rodrigo Nunes](https://ronanrodrigo.dev) | ✅ | | | | 🌐 | [New Browser Window](browsing/new-browser-window.sh) | Open new window in default browser | [Levi Nelson](https://github.com/LeviticusNelson) | | | | + | 📚 | [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) | | ✅ | | | 🤖 | [Open in guest profile](browsing/open-in-guest-profile.sh) | Open current website in guest profile/mode | [JD Solanki](https://github.com/jd-solanki) | | | | | | [Open without CORS](browsing/open-chrome-without-cors.sh) | Open chrome with web security option disabled. | [Tahsin Yazkan](https://github.com/thsnyzkn) | | | | | | [Peek a link](browsing/peekalink.template.sh) | Use [Peekalink.io](https://peekalink.io) API to peek specified URL. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | ✅ | | @@ -754,6 +800,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | 🎲 | [Random Emoji](communication/emojis/random-emoji.sh) | Copy a random emoji to the clipboard. | [Tomohiro Nishimura](https://github.com/Sixeight) | | | | | 📙 | [Search Emojis](communication/emojis/emojis-search.sh) | Search for emojis related to input. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | | | | 📙 | [Search and Copy First Related Emoji](communication/emojis/emoji-copy.sh) | Copy first emoji related to input. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | | | @@ -789,6 +836,7 @@ This repository contains sample commands and documentation to write your own one | | [Clear Slack DND](communication/slack/clear-slack-DND-status.sh) | Clear DND Status in Slack | [Sam Ching](https://github.com/samching) | | | | | 🧼 | [Clear Status](communication/slack/clear-slack-status.template.sh) | Clear your status in Slack. | [Thomas Paul Mann](https://github.com/thomaspaulmann) | | ✅ | | | | [Jump to...](communication/slack/slack-jump-to.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | + | | [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) | | | | | | [Open Workspace by Index](communication/slack/slack-open-workspace-by-index.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | | | [Open Workspace by Name](communication/slack/slack-open-workspace-by-name.applescript) | N/A | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | | | [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) | ✅ | | | @@ -816,6 +864,7 @@ This repository contains sample commands and documentation to write your own one | ⏱ | [Convert Epoch to Human-Readable Date](conversions/epoch-to-human-date.sh) | Convert epoch to human-readable date. | [Siyuan Zhang](https://github.com/kastnerorz) | ✅ | | | | 📋 | [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) | | | | | ⏱ | [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) | ✅ | | | + | 🔄 | [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) | | | | | 📋 | [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) | | | | | 📹 | [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) | ✅ | | | | 🎨 | [Hex to RGB](conversions/hex-to-rgb.sh) | Convert hexadecimal color value to RGB value. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | | | @@ -827,6 +876,7 @@ This repository contains sample commands and documentation to write your own one | 📝 | [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) | | | | | | [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) | | | | | 🔗 | [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) | ✅ | | | + | 📝 | [Space Fixer](conversions/space-fixer.sh) | Add spaces between Chinese and English, number or symbols. | [RealTong](https://raycast.com/RealTong) | | | | | 🔠 | [Strikethrough Text](conversions/strikethrough.sh) | Converts given text (or clipboard if no argument) to t̶e̶x̶t̶ | [Jakub Lanski](https://github.com/jaklan) | ✅ | | | | ✂️ | [Trim Newlines and Tabs](conversions/trim-newlines-tabs.sh) | Trim newlines and tabs from clipboard content. | [Caleb Stauffer](https://github.com/crstauf) | | | | | 🦸‍♀️ | [Unicode Superscript](conversions/unicode-superscript.sh) | Convert clipboards text to fake unicode superscript | [Adam Zethraeus](https://github.com/adam-zethraeus) | ✅ | | | @@ -850,7 +900,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | - | 🕌 | [Prayer Times (Diyanet)](culture/prayer-times-diyanet.sh) | Prayer Times grabbed from the Diyanet's Official Website for people located in Türkiye. | [Emircan Erkul](https://emircanerkul.com) | | | | + | 🕌 | [Prayer Times](culture/prayer-times.sh) | Prayer Times grabbed from the aladhan.com. | [Emircan Erkul](https://emircanerkul.com) | | | | ## Dashboard @@ -905,6 +955,12 @@ This repository contains sample commands and documentation to write your own one | ⛅️ | [Current Weather](dashboard/open-weather/weather-current.template.sh) | Get current weather from OpenWeather | [Marek Mašek](https://github.com/marekmasek) | | ✅ | | | ⛅️ | [Weather Forecast](dashboard/open-weather/weather-forecast.template.sh) | Get weather forecast from OpenWeather | [Marek Mašek](https://github.com/marekmasek) | | ✅ | | +## Dashboards + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | 💾 | [Speed Test](dashboards/iperf-speed-test.template.sh) | Runs an iPerf Speed Test. | [Sam Wright](https://raycast.com/samywamy10) | | ✅ | | + ## Developer Utils | Icon | Title | Description | Author | Args | Templ | Lang | @@ -926,6 +982,7 @@ This repository contains sample commands and documentation to write your own one | 💻 | [Decode Base64](developer-utils/decode-base64.sh) | Decodes clipboard content to Base64 and copies it again. | Raycast | | | | | | [Decode JWT](developer-utils/decode-jwt.sh) | Decodes JSON web token from the clipboard. | Raycast | | | | | 💻 | [Decode URL](developer-utils/decode-url.sh) | Decodes clipboard content url and copies it again. | Raycast | | | | + | ⌨️ | [Delete Current Line](developer-utils/delete-current-line.applescript) | This script deletes the line at cursor position. | [Annie Ma](http://www.anniema.co/) | | | | | 🌍 | [Dig](developer-utils/dig.sh) | Perform a dig command with the specified options | Tommaso Panozzo | ✅ | | | | 💻 | [Encode Base64](developer-utils/encode-base64.sh) | Encodes clipboard content to Base64 and copies it again. | Raycast | | | | | 💻 | [Encode URL](developer-utils/encode-url.sh) | Encodes clipboard content url and copies it again. | Raycast | | | | @@ -961,6 +1018,7 @@ This repository contains sample commands and documentation to write your own one | 🔐 | [Strong Password Generator](developer-utils/strong-password-generator.sh) | Generate a strong password of requested character length | [Nitin Gupta](https://twitter.com/gniting) | ✅ | | | | 🕒 | [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) | ✅ | | | | 🕒 | [Time Calculator](developer-utils/time-calculator.js) | Add or Subtract specified amount of time from given date. | [Federico Miraglia](https://github.com/Mitra98t) | ✅ | | | + | 🔒 | [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) | | ✅ | | | 🔠 | [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) | ✅ | | | | ✂ | [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) | ✅ | | | | 🔗 | [Unshorten URL](developer-utils/unshorten-url.sh) | Unshortens clipboard content url and copies the result again. | [Nikita Galaiko](https://github.com/ngalaiko) | | | | @@ -972,6 +1030,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | | 🤖 | [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) | | | | + | | [S3 Download](developer-utils/aws/amazon-s3-download.sh) | Download from Amazon S3 via URL | [Chris Cook](https://github.com/zirkelc) | ✅ | | | | | [Single Sign-On](developer-utils/aws/aws-sso-util.sh) | Login to AWS using aws-sso-util | [David Molinero](https://github.com/doktor500) | | | | #### Brew @@ -1119,6 +1178,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [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) | ✅ | | | | 📈 | [Calculate Growth %](math/calculate-growth.sh) | Calculate percentage increase between "from" and "to" values. | [Petr Nikolaev](https://github.com/pitnikola) | ✅ | | | | 🔢 | [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) | ✅ | | | | 🧮 | [LaTeX Calculator](math/latex-calculator.py) | Evaluate LaTeX expressions and get the product copied to your clipboard | [Matt Gleich](https://mattglei.ch) | ✅ | | | @@ -1192,6 +1252,12 @@ This repository contains sample commands and documentation to write your own one | | [Workout](media/endel/endel-scenarios-workout.sh) | Run Workout scenario at Endel | [Sergey Korobyin](https://github.com/huangsemao) | ✅ | | | | | [Yoga](media/endel/endel-scenarios-yoga.sh) | Run Yoga scenario at Endel | [Sergey Korobyin](https://github.com/huangsemao) | ✅ | | | +#### Lowfi + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [Lowfi](media/lowfi/lowfi.sh) | N/A | Raycast | | | | + #### Sonos | Icon | Title | Description | Author | Args | Templ | Lang | @@ -1201,6 +1267,12 @@ This repository contains sample commands and documentation to write your own one | | [Volume Down](media/sonos/sonos-volume-down.sh) | Raises volume of Sonos. | [David Blackman](https://github.com/whizziwig) | | | | | | [Volume Up](media/sonos/sonos-volume-up.sh) | Raises volume of Sonos. | [David Blackman](https://github.com/whizziwig) | | | | +#### Speaker Setup + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | 🔊 | [Speaker Setup](media/speaker-setup/speaker-setup.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) | | | | + #### Spotify | Icon | Title | Description | Author | Args | Templ | Lang | @@ -1237,6 +1309,7 @@ This repository contains sample commands and documentation to write your own one | Icon | Title | Description | Author | Args | Templ | Lang | | :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | 🫥 | [Hide Current Application](navigation/hide-application.applescript) | Easily hide your foremost application | [Chris Bailey](https://raycast.com/that70schris) | | | | | | [JustFocus](navigation/justfocus.applescript) | N/A | Jax0rz | ✅ | | | | 📂 | [Open Applications](navigation/open-applications.sh) | Opens the Applications folder in the Finder. | Raycast | | | | | 🖥 | [Open Clipboard URL on Desktop](navigation/open-desktop-url-from-clipboard.swift) | Opens the URL from the clipboard in the desktop app. | Raycast | | | | @@ -1415,6 +1488,7 @@ This repository contains sample commands and documentation to write your own one | 💻 | [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) | | | | | 🔋 | [Battery Info](system/battery-info.sh) | Get Battery percentage, time remaining, charge status, charger wattage, total cycles etc. | [Fahim Faisal](https://github.com/i3p9) | | | | | ☀️ | [Brightness](system/brightness.sh) | Set system brightness | [Antonio Dal Sie](https://github.com/exodusanto) | ✅ | | | + | 🖥️ | [CPU Usage](system/inline-cpu-usage-percent.sh) | Display CPU usage percent | [Juan Luis Romero](https://github.com/JuanluR8) | | | | | ☕️ | [Caffeinate](system/caffeinate-status.swift) | Shows caffeinate status and time left if it's running | [Yan Smaliak](https://github.com/ysmaliak) | | | | | ☕️ | [Caffeinate](system/caffeinate-status.sh) | Shows caffeinate status | [Yan Smaliak](https://github.com/ysmaliak) | | | | | 💻 | [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) | | | | @@ -1423,8 +1497,10 @@ This repository contains sample commands and documentation to write your own one | 💻 | [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) | | | | | 🔪 | [Close All Finder Windows](system/close-finder-windows.applescript) | Close all open Finder windows. | [Alexander Steffen](https://github.com/alexjsteffen) | | | | | 📅 | [Copy Availability](system/copy-availability.swift) | Copies the calendar availability of today. | Raycast | ✅ | | | + | | [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) | | | | | 💁 | [Copy Last Download](system/copy-last-download.swift) | Copy the last downloaded file to the clipboard. | Raycast | | | | | 📸 | [Copy Last Screenshot](system/copy-last-screenshot.swift) | Copies the last screenshot to the clipboard. | Raycast | | | | + | 📝 | [Copy Meeting Summary](system/meeting_summary_script.swift) | Copies a summary of today's meetings to the clipboard. | Raycast | | | | | 📟 | [Copy Wi-Fi Password](system/wifi-password.sh) | Copy Wi-Fi password from current session | [Astrit Malsia](https://github.com/astrit) | | | | | 📧 | [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) | ✅ | | | | 📄 | [Create New File](system/create-new-file.applescript) | Create files in the front window or desktop of the visit | [LokHsu](https://github.com/lokhsu) | | | | @@ -1440,6 +1516,8 @@ This repository contains sample commands and documentation to write your own one | 💿 | [Disk Usage](system/disk-usage.sh) | Show disk usage for / (root) | [Jesse Claven](https://github.com/jesse-c) | | | | | 🔕 | [Dismiss Notifications](system/dismiss-notifications.applescript) | Close all notification alerts staying on screen, e.g., Calendar notifications. | [benyn](github.com/benyn) | | | | | 🔕 | [Do Not Disturb](system/do-not-disturb.sh) | Do Not Disturb | [Antonio Dal Sie](https://github.com/exodusanto) | ✅ | | | + | 🤖 | [Dock Position](system/dock-set-position.sh) | Set the position of the Dock in the screen | [Jelte Lagendijk](https://raycast.com/j3lte) | ✅ | | | + | 🤖 | [Dock Set Autohide](system/dock-set-autohide.sh) | Set the Dock autohide | [Jelte Lagendijk](https://raycast.com/j3lte) | ✅ | | | | 📀 | [Eject All Disks](system/eject-all-disks.applescript) | Ejects all mounted disk images. | Raycast | | | | | 📋 | [Empty Clipboard](system/empty-clipboard.sh) | Empty Clipboard | Raycast | | | | | 🗑 | [Empty Trash](system/empty-trash.applescript) | Empty the trash. | Raycast | | | | @@ -1447,6 +1525,7 @@ This repository contains sample commands and documentation to write your own one | 💨 | [Flush DNS](system/flush-dns.sh) | Flush DNS cache | [Felipe Turcheti](https://felipeturcheti.com) | | | | | 🔫 | [Kill AirDrop Processes](system/kill-airdrop.processes.sh) | Force kill all AirDrop processes | [Linus Salzmann](https://github.com/linus569) | | | | | ⚠️ | [Kill Running Process](system/kill-process.sh) | Force kill a running process | [Gustavo Santana](https://github.com/gumadeiras) | ✅ | | | + | 🚫 | [Kill a process on PORT](system/kill-a-process-on-port.sh) | Kill running processes on the given ports | [aaqifshafi](https://github.com/aaqifshafi) | ✅ | | | | 📈 | [Largest CPU Process](system/largest-cpu-process.sh) | Report process with largest system CPU usage. | [Caleb Stauffer](https://github.com/crstauf) | | | | | 📈 | [Largest RAM Process](system/largest-ram-process.sh) | Report process with largest system RAM usage. | [Caleb Stauffer](https://github.com/crstauf) | | | | | 🔋 | [Low Power Mode](system/Low Power Mode.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) | | | | @@ -1454,10 +1533,11 @@ This repository contains sample commands and documentation to write your own one | 🌵 | [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) | ✅ | | | | 🗑 | [Move Desktop to Trash](system/move-desktop-to-trash.applescript) | Empty the desktop. | [Seypopi](https://github.com/Seypopi) | | | | | | [Move Downloads to Trash](system/move-downloads-to-trash.applescript) | N/A | Jax0rz | | | | - | | [Network Info](system/Network Info.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) | | | | + | 🛜 | [Network Info](system/Network Info.sh) | N/A | [Kailash Yellareddy](https://github.com/kyellareddy) | | | | | 🌐 | [Network Quality](system/network-quality.sh) | N/A | [Archie Lacoin](https://github.com/pomdtr) and [LanikSJ](https://github.com/LanikSJ) | | | | | 📶 | [Network Status](system/network-status.sh) | Get current network connections. | [Alexandru Turcanu](https://github.com/Pondorasti) | | | | | 🖼 | [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) | | | | + | 🔑 | [One-Time Password](system/otp.sh) | Get One-Time Password (OTP) from Apple Password Manager | Angelos Michalopoulos | ✅ | | | | 📁 | [Open Folder](system/open-folder.sh) | Open a folder on macOS | [Bin Hua](https://github.com/hzb) | ✅ | | | | 📋 | [Open Image](system/open-image-from-clipboard.sh) | Open Image from Clipboard in Preview for OCR or other purposes. | [xxchan](https://github.com/xxchan) | | | | | 💁‍♂️ | [Open Last Download](system/open-last-download.swift) | Opens the last downloaded file. | Raycast | | | | @@ -1465,6 +1545,8 @@ This repository contains sample commands and documentation to write your own one | 💥 | [Quit All Applications](system/quit-all-apps.swift) | Quits all running applications except Finder and Raycast. | Raycast | | | | | 💥 | [Quit app](system/quit-app.swift) | Quits an app, by name or process id. | [Roland Leth](https://runtimesharks.com) | ✅ | | | | 🖼️ | [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) | | | | + | 📂 | [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 `--`. | [StepaniaH](https://github.com/StepaniaH) | ✅ | | | + | 🚀 | [Reset Launchpad](system/reset-launchpad.sh) | Resets the macOS Launchpad to its default state | [Zach Dawson](https://raycast.com/zdawz) | | | | | ♻️ | [Restart](system/restart.applescript) | Restarts computer. | Raycast | | | | | 💀 | [Restart the Dock](system/restart-dock.sh) | Restart the Dock | [Jordi Clement](https://github.com/jordicl) | | | | | 💀 | [Restart the Finder](system/restart-finder.sh) | Restart the Finder | [Jordi Clement](https://github.com/jordicl) | | | | @@ -1475,20 +1557,25 @@ This repository contains sample commands and documentation to write your own one | 🧭 | [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) | ✅ | | | | 🛌 | [Shut Down](system/shutdown.applescript) | Shuts down computer. | Raycast | | | | | 😴 | [Sleep](system/sleep.applescript) | Puts computer to sleep. | Raycast | | | | + | 😴 | [Sleep Timer](system/sleep-timer.applescript) | Put your Mac to sleep (in X minutes). | [AndriiBarabash](https://github.com/AndriiBarabash) | ✅ | | | | 🧬 | [Toggle .DS_Store](system/toggle-ds-store.applescript) | A script command to enable and disable .DS_Store | [Astrit](https://github.com/astrit) | | | | | 🔋 | [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) | | | | | | [Toggle Bluetooth](system/bluetooth.template.applescript) | Toggle your Bluetooth connection. | [Vincent Dörig](https://github.com/vincentdoerig) | | ✅ | | | 🖥 | [Toggle Desktop Icons](system/toggle-desktop-icons.applescript) | A script command to show and hide icons of Desktop folder | [Raycast](https://raycast.com) | | | | + | 🔄 | [Toggle Desktop Widgets](system/toggle-desktop-widget.sh) | N/A | [Federico Zivolo](https://github.com/FezVrasta) | | | | + | 🤖 | [Toggle Dock Autohide](system/dock-autohide-toggle.sh) | Toggle the Dock Autohide | [Jelte Lagendijk](https://raycast.com/j3lte) | | | | | 👓 | [Toggle Filename Extensions](system/toggle-filename-extensions.applescript) | Show or hide all filename extensions (like .txt, .png) | [Senthil Prabhu](https://github.com/senthilprabhut) | | | | | 🖥 | [Toggle Flip Screen to °](system/toggle-flip-screen.template.applescript) | Toggle flip (rotate) or revert the to ° | [Yohanes Bandung Bondowoso](https://github.com/ybbond) | | ✅ | | | 👓 | [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) | | | | | 🐚 | [Toggle Lid Sleep](system/toggle-lid-sleep.sh) | Prevent sleep from closing laptop lid (clamshell mode) | [Ivan Rybalko](https://github.com/ivribalko) | | | | | 🖱 | [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) | | | | + | 🖱 | [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) | | | | | 🌘 | [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) | | | | | 🌗 | [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) | | | | | | [Toggle Wi-Fi](system/wifi.template.applescript) | Toggle your Wi-Fi connection. | [Vincent Dörig](https://github.com/vincentdoerig) | | ✅ | | | 😴 | [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) | | | | | 😴 | [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) | | | | + | 📋 | [Type Clipboard](system/paste-clipboard.sh) | Takes your clipboard then types each character in the clipboard | [AlexGadd](https://raycast.com/AlexGadd) | | | | | 🗑 | [Uninstall with AppCleaner](system/uninstall-with-appcleaner.applescript) | Uninstall applications with AppCleaner | [Felipe Turcheti](https://felipeturcheti.com) | ✅ | | | | ♻️ | [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) | | ✅ | | @@ -1505,6 +1592,13 @@ This repository contains sample commands and documentation to write your own one | 🔊 | [Switch Audio to ](system/audio/audio-output-switch.template.applescript) | Switch audio output to desired device. | [mmerle](https://github.com/mmerle) | | ✅ | | | | [Toggle AirPods](system/audio/toggle-airpods.template.swift) | Toggle AirPods bluetooth device | [Nichlas W. Andersen](https://github.com/itsnwa) | | ✅ | | | 🎙 | [Toggle Microphone](system/audio/toggle-mic.applescript) | Toggles microphone. | [Matthew Morek](https://github.com/matthewmorek) | | | | + | 🔔 | [Toggle Mute Notifcation Sounds](system/audio/toggle-mute-notification-sounds.applescript) | Toggles notification sounds. | [Annie Ma](http://www.anniema.co/) | | | | + +#### Magic Keyboard Switcher + +| Icon | Title | Description | Author | Args | Templ | Lang | +| :--: | ----- | ----------- | :----: | :--: | :---: | :--: | + | | [Magic Keyboard switcher](system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh) | Switch a single magic keyboard between computers | [blastik](https://github.com/blastik) | | ✅ | | #### VPN @@ -1555,7 +1649,8 @@ This repository contains sample commands and documentation to write your own one | | [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) | ✅ | | | | | [Search Python 3 Documentation](web-searches/search-python3-docs.sh) | Search Python 3 Documentation | [Lucas Costa](https://github.com/lucasrcosta) | ✅ | | | | | [Search Python Package Index (PyPI)](web-searches/search-pypi.sh) | Search Python Package Index (PyPI) | [Lucas Costa](https://github.com/lucasrcosta) | ✅ | | | - | | [Search Script Command](web-searches/search-script-command-marketplace.sh) | Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https://scriptcommands.com). | [Alexandru Turcanu](https://github.com/Pondorasti) | ✅ | | | + | | [Search Rust Documentation](web-searches/search-rust-docs.sh) | Search Rust documentation | [lemorage](https://raycast.com/lemorage) | ✅ | | | + | | [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) | ✅ | | | | | [Search Swift Code](web-searches/search-swift-github.sh) | N/A | Raycast | ✅ | | | | | [Search Unsplash](web-searches/search-unsplash.sh) | Search [Unsplash](https://unsplash.com). | [Caleb Stauffer](https://github.com/crstauf) | ✅ | | | | | [Search WP Engine Installs](web-searches/search-wpengine-installs.sh) | Search [WP Engine](https://wpengine.com) installs. | [Caleb Stauffer](https://github.com/crstauf) | ✅ | | | diff --git a/commands/ai/gemini/gemini.js b/commands/ai/gemini/gemini.js new file mode 100755 index 000000000..20eaa42d8 --- /dev/null +++ b/commands/ai/gemini/gemini.js @@ -0,0 +1,231 @@ +#!/usr/bin/env node + +// Dependencies: +// This script requires the following software to be installed: +// - `node` https://nodejs.org +// - `chrome-cli` https://github.com/prasmussen/chrome-cli +// Install via homebrew: `brew install node chrome-cli` + +// This script needs to run JavaScript in your browser, which requires your permission. +// To do so, open Chrome and find the menu bar item: +// View > Developer > Allow JavaScript from Apple Events + +// Required parameters: +// @raycast.schemaVersion 1 +// @raycast.title Ask Gemini +// @raycast.mode silent +// @raycast.packageName Gemini + +// Optional parameters: +// @raycast.icon ./images/icon-gemini.svg +// @raycast.argument1 { "type": "text", "placeholder": "Selected Text", "optional": true } +// @raycast.argument2 { "type": "text", "placeholder": "Prompt"} + +// Documentation: +// @raycast.description Open Gemini in Chrome browser and submit a prompt with optional selected text as context +// @raycast.author Est7 +// @raycast.authorURL https://github.com/est7 + +// @raycast.author Nimo Beeren +// @raycast.authorURL https://github.com/nimobeeren + +const { execSync } = require("child_process"); + +const selectedText = process.argv[2] || ""; // Get the text from "Selected Text" argument, or use an empty string if argument is empty. +const prompt = process.argv[3]; + +process.env.OUTPUT_FORMAT = "json"; + +/** Escape a string so that it can be used in JavaScript code when wrapped in double quotes. */ +function escapeJsString(str) { + return str.replaceAll(`\\`, `\\\\`).replaceAll(`"`, `\\"`); +} + +/** Escape a string so that it can be used in a shell command when wrapped in single quotes. */ +function escapeShellString(str) { + return str.replaceAll(`'`, `'"'"'`); +} + +// used to wait for Chrome to activate. +function sleep(ms) { + const start = Date.now(); + while (Date.now() - start < ms) {} +} + +/** + * Verifies that all required dependencies are installed. + * Exits the process with an error message if any dependency is missing. + */ +function checkDependencies() { + // Check if Google Chrome is installed + try { + execSync("osascript -e 'tell application \"Google Chrome\" to get version'" , { stdio: "ignore" }); + } catch { + try { + execSync("osascript -e 'tell application \"Chrome\" to get version'" , { stdio: "ignore" }); + } catch { + console.error("Google Chrome is required to run this script"); + process.exit(1); + } + } + + // Check if chrome-cli is installed + try { + execSync("which chrome-cli"); + } catch { + console.error( + "chrome-cli is required to run this script (https://github.com/prasmussen/chrome-cli)" + ); + process.exit(1); + } +} + +// Verify all dependencies are installed +checkDependencies(); + +// Bring Chrome to the foreground first. +try { + // Try to activate Chrome through AppleScript, supporting different possible application names. + execSync("osascript -e 'tell application \"Google Chrome\" to activate'", { + stdio: "ignore", + }); +} catch (e) { + try { + // If the first naming method fails, try possible alternatives. + execSync("osascript -e 'tell application \"Chrome\" to activate'", { + stdio: "ignore", + }); + } catch (err) { + console.error( + "Unable to activate Chrome browser, continue with other operations", + ); + } +} + +// Give Chrome a little time to make sure it is activated +sleep(300); + +// Find the Gemini tab if one is already open +let tabs = JSON.parse(execSync("chrome-cli list tabs")).tabs; +let geminiTab = tabs.find((tab) => + tab.url.startsWith("https://gemini.google.com/"), +); + +// If there is a Gemini tab open, get its info. Otherwise, open Gemini in a new window. +let geminiTabInfo; +if (geminiTab) { + // Focus on existing tags, do not refresh the page + execSync(`chrome-cli activate -t ${geminiTab.id}`); + // Get tab info + geminiTabInfo = JSON.parse(execSync(`chrome-cli info -t ${geminiTab.id}`)); +} else { + // Open a Gemini session in a new tab, focus it and return the tab info + geminiTabInfo = JSON.parse( + execSync("chrome-cli open 'https://gemini.google.com/app'"), + ); +} + +// Wait for the tab to be loaded, then execute the script +let interval = setInterval(() => { + if (geminiTabInfo.loading) { + geminiTabInfo = JSON.parse( + execSync(`chrome-cli info -t ${geminiTabInfo.id}`), + ); + } else { + clearInterval(interval); + executeScript(); + } +}, 100); + +function executeScript() { + const script = async function (selectedText, prompt) { + // Wait for prompt element to be on the page + let promptElement; + await new Promise((resolve) => { + let interval = setInterval(() => { + promptElement = document.querySelector( + 'div[aria-label="Enter a prompt here"]', + ); + if (promptElement) { + clearInterval(interval); + resolve(); + } + }, 100); + }); + + // Prepare the final text + let finalText = ""; + if (selectedText && selectedText.trim() !== "") { + finalText += `${selectedText}\n\n${prompt}`; + } else { + finalText = prompt; + } + + // Focus the input element first + promptElement.focus(); + + // Check if there's existing content + const hasExistingContent = promptElement.textContent.trim() !== ""; + + // Clear existing content if needed - safely without innerHTML + if (!hasExistingContent) { + // If empty, we'll just add our content + // No need to clear anything + } else { + // If we want to append to existing content, add a newline + // Create a new paragraph for separation + const selection = window.getSelection(); + const range = document.createRange(); + + // Move cursor to the end of existing content + range.selectNodeContents(promptElement); + range.collapse(false); // false means collapse to end + selection.removeAllRanges(); + selection.addRange(range); + + // Insert two newlines to separate content + document.execCommand("insertText", false, "\n\n"); + } + + // Insert the content using execCommand which is safer than innerHTML + // Split by newlines and insert with proper paragraph formatting + const paragraphs = finalText.split("\n"); + paragraphs.forEach((paragraph, index) => { + if (index > 0) { + // Insert newline between paragraphs (not before the first one) + document.execCommand("insertText", false, "\n"); + } + + // Insert the paragraph text + document.execCommand("insertText", false, paragraph || "\u200B"); + }); + + // Trigger input event to notify Gemini of changes + const inputEvent = new Event("input", { bubbles: true }); + promptElement.dispatchEvent(inputEvent); + + // Ensure cursor is at the end and visible + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(promptElement); + range.collapse(false); // false means collapse to end + selection.removeAllRanges(); + selection.addRange(range); + + // Scroll to make cursor visible + promptElement.scrollTop = promptElement.scrollHeight; + + // Additional scroll after a short delay to ensure visibility + setTimeout(() => { + promptElement.scrollTop = promptElement.scrollHeight; + }, 100); + }; + + const functionString = escapeShellString(script.toString()); + const selectedTextString = escapeShellString(escapeJsString(selectedText)); + const promptString = escapeShellString(escapeJsString(prompt)); + + execSync( + `chrome-cli execute '(${functionString})(\"${selectedTextString}\", \"${promptString}\")' -t ${geminiTabInfo.id}`, + ); +} diff --git a/commands/ai/gemini/images/icon-gemini.svg b/commands/ai/gemini/images/icon-gemini.svg new file mode 100644 index 000000000..4545c8331 --- /dev/null +++ b/commands/ai/gemini/images/icon-gemini.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/commands/apps/busycal/images/busycal.png b/commands/apps/busycal/images/busycal.png new file mode 100644 index 000000000..8671a4bf0 Binary files /dev/null and b/commands/apps/busycal/images/busycal.png differ diff --git a/commands/apps/busycal/new-busycal-event-or-task.applescript b/commands/apps/busycal/new-busycal-event-or-task.applescript new file mode 100755 index 000000000..05627da0c --- /dev/null +++ b/commands/apps/busycal/new-busycal-event-or-task.applescript @@ -0,0 +1,28 @@ +#!/usr/bin/osascript + +# Dependency: This script requires `BusyCal` installed: https://www.busymac.com/busycal/ + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Create Event/Task +# @raycast.mode compact +# @raycast.packageName BusyCal + +# Optional parameters: +# @raycast.icon images/busycal.png +# @raycast.argument1 { "type": "dropdown", "placeholder": "type", "data" : [{"title" : "event", "value": "event"}, {"title" : "task", "value": "task"}], "optional": true} +# @raycast.argument2 { "type": "text", "placeholder": "entry", "percentEncoded": true} + +# Documentation: +# @raycast.description Creates new events or tasks in BusyCal. +# @raycast.author Annie Ma +# @raycast.authorURL www.anniema.co + +on run argv + set query2 to (item 2 of argv) + tell application "BusyCal" + activate + if (item 1 of argv = "event") then open location "busycalevent://new/" & query2 + if (item 1 of argv = "task") then open location "busycalevent://new/-" & query2 + end tell +end run \ No newline at end of file diff --git a/commands/apps/claude/claude.js b/commands/apps/claude/claude.js new file mode 100755 index 000000000..f9adb66c8 --- /dev/null +++ b/commands/apps/claude/claude.js @@ -0,0 +1,127 @@ +#!/usr/bin/env node + +// Dependencies: +// This script requires the following software to be installed: +// - `node` https://nodejs.org +// - `chrome-cli` https://github.com/prasmussen/chrome-cli +// Install via homebrew: `brew install node chrome-cli` + +// This script needs to run JavaScript in your browser, which requires your permission. +// To do so, open Chrome and find the menu bar item: +// View > Developer > Allow JavaScript from Apple Events + +// Required parameters: +// @raycast.schemaVersion 1 +// @raycast.title Ask Claude +// @raycast.mode silent +// @raycast.packageName Claude + +// Optional parameters: +// @raycast.icon ✨ +// @raycast.argument1 { "type": "text", "placeholder": "Prompt"} + +// Documentation: +// @raycast.description Open Claude in Chrome browser and submit a prompt +// @raycast.author Nimo Beeren +// @raycast.authorURL https://github.com/nimobeeren + +const { execSync } = require("child_process"); + +const prompt = process.argv[2]; + +process.env.OUTPUT_FORMAT = "json"; + +/** Escape a string so that it can be used in JavaScript code when wrapped in double quotes. */ +function escapeJsString(str) { + return str.replaceAll(`\\`, `\\\\`).replaceAll(`"`, `\\"`); +} + +/** Escape a string so that it can be used in a shell command when wrapped in single quotes. */ +function escapeShellString(str) { + return str.replaceAll(`'`, `'"'"'`); +} + +try { + execSync("which chrome-cli"); +} catch { + console.error( + "chrome-cli is required to run this script (https://github.com/prasmussen/chrome-cli)" + ); + process.exit(1); +} + +// Find the Claude tab if one is already open +let tabs = JSON.parse(execSync("chrome-cli list tabs")).tabs; +let claudeTab = tabs.find((tab) => tab.url.startsWith("https://claude.ai/")); + +// If there is a Claude tab open, get its info. Otherwise, open Claude in a new +// window. +let claudeTabInfo; +if (claudeTab) { + // Open a new Claude session in the existing tab and focus it + execSync(`chrome-cli open 'https://claude.ai/new' -t ${claudeTab.id}`); + // Get tab info + claudeTabInfo = JSON.parse(execSync(`chrome-cli info -t ${claudeTab.id}`)); +} else { + // Open a Claude session in a new tab, focus it and return the tab info + claudeTabInfo = JSON.parse( + execSync("chrome-cli open 'https://claude.ai/new'") + ); +} + +// Wait for the tab to be loaded, then execute the script +let interval = setInterval(() => { + if (claudeTabInfo.loading) { + claudeTabInfo = JSON.parse( + execSync(`chrome-cli info -t ${claudeTabInfo.id}`) + ); + } else { + clearInterval(interval); + executeScript(); + } +}, 100); + +function executeScript() { + const script = async function (prompt) { + // Wait for prompt element to be on the page + let promptElement; + await new Promise((resolve) => { + let interval = setInterval(() => { + promptElement = document.querySelector( + '[aria-label="Write your prompt to Claude"] > div' + ); + if (promptElement) { + clearInterval(interval); + resolve(); + } + }, 100); + }); + + // Set the prompt + const p = document.createElement("p"); + p.textContent = prompt; + promptElement.replaceChildren(p); + + // Wait for submit button to be on the page + let submitButton; + await new Promise((resolve) => { + let interval = setInterval(() => { + submitButton = document.querySelector('[aria-label="Send Message"]'); + if (submitButton) { + clearInterval(interval); + resolve(); + } + }, 100); + }); + + // Submit the prompt + submitButton.click(); + }; + + const functionString = escapeShellString(script.toString()); + const promptString = escapeShellString(escapeJsString(prompt)); + + execSync( + `chrome-cli execute '(${functionString})("${promptString}")' -t ${claudeTabInfo.id}` + ); +} diff --git a/commands/apps/find-my/.env.example b/commands/apps/find-my/.env.example new file mode 100644 index 000000000..6e3a6c985 --- /dev/null +++ b/commands/apps/find-my/.env.example @@ -0,0 +1,3 @@ +ICLOUD_EMAIL= +ICLOUD_PASSWORD= +DEVICE= \ No newline at end of file diff --git a/commands/apps/find-my/README.md b/commands/apps/find-my/README.md new file mode 100644 index 000000000..55057353e --- /dev/null +++ b/commands/apps/find-my/README.md @@ -0,0 +1,58 @@ +# Find My Phone Raycast + +I lose my phone often, so I made this. + +This 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. + +## Usage + +```sh +git clone https://github.com/vsvaidya27/fmp-raycast +cd fmp-raycast +npm install +cp .env.example .env +# Edit .env with your real credentials +chmod +x fmp.js +``` + +### Add to Raycast + +1. Open Raycast and go to **Extensions**. +2. Click **Add**. +3. Select **Add Script Directory**. +4. Choose the `fmp-raycast` directory you just cloned. +5. Set fmp as your alias for calling the script. + +Now you can trigger the script directly from Raycast! + +## How it works + +- Automates login to iCloud Find My using Playwright +- Selects your device by name +- Triggers the "Play Sound" feature to help you locate your device + +**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). + +--- + +## 🛠 Troubleshooting + +### If you get the error `env: node: No such file or directory` + +Raycast uses a limited shell environment, so it may not find your Node.js install. + +To fix it: + +1. Run this in Terminal to find your full Node path: + ```bash + which node + ``` +2. Edit the top of `fmp.js`: + Replace: + ```sh + #!/usr/bin/env node + ``` + With: + ```sh + #!/full/path/to/node + ``` diff --git a/commands/apps/find-my/fmp.js b/commands/apps/find-my/fmp.js new file mode 100755 index 000000000..e672b032b --- /dev/null +++ b/commands/apps/find-my/fmp.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node + +// Required parameters: +// @raycast.schemaVersion 1 +// @raycast.title Find My Phone (Auto Sound) +// @raycast.mode silent +// @raycast.packageName FindMy +// @raycast.icon images/find-my-icon.png + +require('dotenv').config(); +const { chromium } = require('playwright'); + +(async () => { + const browser = await chromium.launch({ headless: false }); + const page = await browser.newPage(); + + // 1. Go to iCloud Find Devices + await page.goto('https://www.icloud.com/find'); + + // 2. Click "Sign In" + await page.waitForSelector('text=Sign In', { timeout: 20000 }); + await page.click('text=Sign In'); + + // 3. Wait for the Apple login iframe to appear + const frameLocator = page.frameLocator('iframe[name="aid-auth-widget"]'); + + // 4. Wait for the email/phone input inside the iframe + await frameLocator.getByRole('textbox', { name: 'Email or Phone Number' }).waitFor({ timeout: 20000 }); + + // 5. Fill in the email/phone + await frameLocator.getByRole('textbox', { name: 'Email or Phone Number' }).fill(process.env.ICLOUD_EMAIL); + + // 6. Click the right-arrow button + await frameLocator.getByRole('button').first().click(); + + // 7. Wait for the "Continue with Password" button to appear, then click it + await frameLocator.getByRole('button', { name: /Continue with Password/i }).waitFor({ timeout: 20000 }); + await frameLocator.getByRole('button', { name: /Continue with Password/i }).click(); + + // 8. Wait for password input + await frameLocator.getByRole('textbox', { name: 'Password' }).waitFor({ timeout: 20000 }); + await frameLocator.getByRole('textbox', { name: 'Password' }).fill(process.env.ICLOUD_PASSWORD); + + // 9. Click the arrow button to continue + await frameLocator.getByRole('button').first().click(); + + // 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 :( + console.log('If prompted, please complete 2FA in the browser window. :('); + + // 12. Click on your iPhone using the precise selector inside the second iframe + await page.locator('iframe').nth(1).contentFrame().getByTitle(process.env.DEVICE).getByTestId('show-device-name').click(); + + // 13. Wait for the device details panel to load + await page.waitForTimeout(2000); + + // 14. Click the "Play Sound" button + await page.locator('iframe').nth(1).contentFrame().getByRole('button', { name: 'Play Sound' }).click(); + + console.log('✅ Play Sound triggered for ' + process.env.DEVICE + '!'); + await browser.close(); +})(); + diff --git a/commands/apps/find-my/images/find-my-icon.png b/commands/apps/find-my/images/find-my-icon.png new file mode 100644 index 000000000..0862bfec8 Binary files /dev/null and b/commands/apps/find-my/images/find-my-icon.png differ diff --git a/commands/apps/find-my/package.json b/commands/apps/find-my/package.json new file mode 100644 index 000000000..6e278971c --- /dev/null +++ b/commands/apps/find-my/package.json @@ -0,0 +1,16 @@ +{ + "name": "findmyraycast", + "version": "1.0.0", + "main": "fmp.js", + "scripts": { + "start": "node fmp.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "dotenv": "^16.5.0", + "playwright": "^1.52.0" + } +} diff --git a/commands/apps/iterm/iterm-open-profile-in-new-window.applescript b/commands/apps/iterm/iterm-open-profile-in-new-window.applescript new file mode 100755 index 000000000..6ef8fd3b7 --- /dev/null +++ b/commands/apps/iterm/iterm-open-profile-in-new-window.applescript @@ -0,0 +1,34 @@ +#!/usr/bin/osascript + +# Dependency: requires iTerm (https://iterm2.com) +# Install via Homebrew: `brew install --cask iterm2` + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Open profile +# @raycast.packageName iTerm +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🤖 +# @raycast.argument1 { "type": "text", "placeholder": "Placeholder" } + +# Documentation: +# @raycast.author sunrisewestern +# @raycast.authorURL https://github.com/sunrisewestern + +on is_running(appName) + tell application "System Events" to (name of processes) contains appName +end is_running + +on run {argv} + set iTermRunning to is_running("iTerm2") + tell application "iTerm" + activate + if not (iTermRunning) then + delay 0.5 + close the current window + end if + create window with profile argv + end tell +end run diff --git a/commands/apps/mail/copy-captcha-from-mail.py b/commands/apps/mail/copy-captcha-from-mail.py new file mode 100755 index 000000000..de5cae47b --- /dev/null +++ b/commands/apps/mail/copy-captcha-from-mail.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +# Copy the verification code from Mail. +# +# Dependency: This script requires the `emlx` package. +# Install it via `pip install emlx`. +# +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title CaptchaFromMail +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon ./images/mail.png +# @raycast.packageName Mail + +# Documentation: +# @raycast.description Copy the captcha from the emlx file. +# @raycast.author RealTong +# @raycast.authorURL https://raycast.com/RealTong + +import os +import re +import pyperclip +import emlx + + +def extract_captcha_from_emlx(emlx_path): + if emlx_file is None or os.path.exists(emlx_file) is False: + print("Mail not found") + return + email = emlx.read(emlx_path) + headers = email.headers + content = email.html + subject = headers["Subject"] + captcha_match_keyword = [ + "验证码", + "动态密码", + "代码", + "确认", + "码", + "verification", + "code", + "confirm", + ] + content_pattern = r"\b[0-9]{6}\b" + subject_pattern = r"\b[a-zA-Z0-9]{6}\b" + # 判断内容中是否包含验证码关键字, 只有包含关键字的邮件才会查找验证码 + for keyword in captcha_match_keyword: + if keyword in subject: + if re.search(subject_pattern, subject): + captcha = re.search(subject_pattern, subject).group() + pyperclip.copy(captcha) + print("Verification code successfully copied to clipboard:", captcha) + return + if re.search(content_pattern, content): + captcha = re.search(content_pattern, content).group() + pyperclip.copy(captcha) + print("Verification code successfully copied to clipboard:", captcha) + return + else: + print("Verification code not found") + else: + print("Not a verification code email") + + +def get_latest_emlx_file(folder): + latest_emlx_file = None + latest_mod_time = 0 + for root, dirs, files in os.walk(folder): + for file in files: + if file.endswith(".emlx"): + file_path = os.path.join(root, file) + mod_time = os.path.getmtime(file_path) + if mod_time > latest_mod_time: + latest_mod_time = mod_time + latest_emlx_file = file_path + + return latest_emlx_file + + +if __name__ == "__main__": + try: + import emlx + + os.listdir(f"/") + except ImportError: + print("emlx not installed, please run 'pip install emlx' to install it") + exit(1) + except OSError: + print( + "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." + ) + exit(1) + mail_path = f"{os.path.expanduser('~')}/Library/Mail/V10/" + emlx_file = get_latest_emlx_file(mail_path) + extract_captcha_from_emlx(emlx_file) diff --git a/commands/apps/mail/images/mail.png b/commands/apps/mail/images/mail.png new file mode 100644 index 000000000..0ae662ac3 Binary files /dev/null and b/commands/apps/mail/images/mail.png differ diff --git a/commands/apps/notes/create-note-from-clipboard.applescript b/commands/apps/notes/create-note-from-clipboard.applescript index e54c6bf7b..f131fd31a 100755 --- a/commands/apps/notes/create-note-from-clipboard.applescript +++ b/commands/apps/notes/create-note-from-clipboard.applescript @@ -21,6 +21,6 @@ on run argv " tell application "Notes" activate - make new note at folder "Notes" with properties {name: (item 1 of argv), body:content} + make new note at folder "Notes" with properties {name:"", body:content} end tell end run diff --git a/commands/apps/safari/safari-download-url.applescript b/commands/apps/safari/safari-download-url.applescript new file mode 100755 index 000000000..8fd9a716a --- /dev/null +++ b/commands/apps/safari/safari-download-url.applescript @@ -0,0 +1,28 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Download Current URL +# @raycast.mode silent + +# Optional parameters: +# @raycast.packageName Safari +# @raycast.icon images/safari.png + +# @Documentation: +# @raycast.author Michael Bianco +# @raycast.authorURL https://github.com/iloveitaly +# @raycast.description Download the currently active tab's URL. + +tell application "Safari" + activate + set currentTab to current tab of window 1 + set theURL to URL of currentTab +end tell + +-- Simulate pressing Option key and clicking the link +tell application "System Events" + keystroke "l" using {command down} -- Select the address bar (Cmd + L) + delay 0.5 + keystroke return using {option down} -- Press Option + Return to download the file +end tell diff --git a/commands/apps/stickies/images/stickies.png b/commands/apps/stickies/images/stickies.png new file mode 100644 index 000000000..cd3651bb8 Binary files /dev/null and b/commands/apps/stickies/images/stickies.png differ diff --git a/commands/apps/stickies/new-floating-sticky.applescript b/commands/apps/stickies/new-floating-sticky.applescript new file mode 100755 index 000000000..3f3d2dc21 --- /dev/null +++ b/commands/apps/stickies/new-floating-sticky.applescript @@ -0,0 +1,23 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title New Floating Sticky Note +# @raycast.mode silent +# @raycast.packageName Stickies + +# Optional parameters: +# @raycast.icon images/stickies.png + +# Documentation: +# @raycast.description This script creates a new floating note in the Apple Stickies application +# @raycast.author Annie Ma +# @raycast.authorURL http://www.anniema.co/ + +tell application "Stickies" + activate + tell application "System Events" + keystroke "n" using command down + keystroke "f" using command down & option down + end tell +end tell \ No newline at end of file diff --git a/commands/apps/tailscale/tailscale-switch.sh b/commands/apps/tailscale/tailscale-switch.sh index ad40265e9..e174480c8 100755 --- a/commands/apps/tailscale/tailscale-switch.sh +++ b/commands/apps/tailscale/tailscale-switch.sh @@ -15,9 +15,15 @@ # @Documentation: # @raycast.description Switches Tailscale networks + +# Original author # @raycast.author Ross Zurowski # @raycast.authorURL https://github.com/rosszurowski +# Contributor +# @raycast.author Daniel Schoemer +# @raycast.authorURL https://github.com/quatauta + ts="" if command -v tailscale &> /dev/null; then @@ -29,12 +35,11 @@ else exit 1 fi -$ts logout -$ts up +"${ts}" switch --list | # List all Tailscale accounts " " +grep -vF -e 'ID' -e '*' | # Omit the header line and the current account marked with "*" +awk '{ print $1 }' | # Print only the account ID of not-connected accounts +head -n1 | # Print only the first not-connected account +xargs -r -n1 "${ts}" switch # Switch to the selected account -if command -v jq &> /dev/null; then - account=$($ts status --json | jq -r '.User[(.Self.UserID | tostring)].LoginName') - echo "Connected as $account" -else - echo "Connected" -fi +tailnet="$("${ts}" switch --list | awk '/\*/ { print $2 }')" +echo "Switched to ${tailnet}" diff --git a/commands/browsing/open-multiple-websites-on-safari.template.sh b/commands/browsing/open-multiple-websites-on-safari.template.sh new file mode 100755 index 000000000..0f16d29fe --- /dev/null +++ b/commands/browsing/open-multiple-websites-on-safari.template.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Open Multiple Websites on Safari +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 📚 +# @raycast.packageName Browsing + +# Documentation: +# @raycast.description Open multiple websites on Safari using list of URLs +# @raycast.author Yasutaka Nishii +# @raycast.authorURL https://github.com/ystknsh + +# Set list of URLs +urls=( + "https://example.com/" + "https://example.org/" + "https://example.net/" + "https://example.jp/" + "https://example.io/" + "https://example.ai/" +) + +# Make AppleScript commands +applescript_command="tell application \"Safari\" + make new document with properties {URL:\"${urls[0]}\"} + tell window 1" + +for ((i=1; i<${#urls[@]}; i++)); do + applescript_command+=" + make new tab with properties {URL:\"${urls[$i]}\"}" +done + +applescript_command+=" + end tell +end tell" + +# Execute AppleScript +osascript -e "$applescript_command" + +# Set Safari window to front(Optional) +osascript < /dev/null; then + echo "jq command is required (https://github.com/jqlang/jq)."; + exit 1; +fi + +IFS=$'\n' read -d '' -r -a EMOJIS < <(curl -s https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json | jq -r '.[] | .emoji' && printf '\0') +EMOJI="${EMOJIS[$RANDOM % ${#EMOJIS[@]}]}" +echo -n "$EMOJI" | pbcopy +echo "$EMOJI" diff --git a/commands/communication/slack/slack-dev-mode.sh b/commands/communication/slack/slack-dev-mode.sh new file mode 100755 index 000000000..cd90d1cd5 --- /dev/null +++ b/commands/communication/slack/slack-dev-mode.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Launch Dev Mode +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon images/slack-logo.png +# @raycast.packageName Slack + +# Documentation: +# @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. +# @raycast.author Cody Carrell +# @raycast.authorURL https://raycast.com/sourcecody + +SLACK_DEVELOPER_MENU=true open /Applications/Slack.app diff --git a/commands/conversions/markdown-to-telegram.py b/commands/conversions/markdown-to-telegram.py new file mode 100755 index 000000000..ad61a9811 --- /dev/null +++ b/commands/conversions/markdown-to-telegram.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Convert Markdown to Telegram Format +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🔄 +# @raycast.packageName Conversions +# @raycast.description Convert Markdown formatting to Telegram format, excluding processing inside code blocks or quotes + +# Documentation: +# @raycast.author Maxim Borzov +# @raycast.authorURL https://github.com/borzov + +import re +import subprocess + +# Set environment variables and encoding +env_vars = {'LANG': 'en_US.UTF-8'} +encoding = 'utf-8' + +def paste(): + """Read text from the clipboard.""" + return subprocess.check_output('pbpaste', env=env_vars).decode(encoding) + +def copy(text): + """Write text to the clipboard.""" + process = subprocess.Popen('pbcopy', env=env_vars, stdin=subprocess.PIPE) + process.communicate(text.encode(encoding)) + +def convert_markdown(text): + """Convert Markdown formatting to Telegram format.""" + lines = text.split('\n') + converted_lines = [] + in_code_block = False + + for line in lines: + # Check if the line is a code block delimiter + if line.startswith('```'): + in_code_block = not in_code_block + converted_lines.append(line) + continue + + # Skip quotes and only format if not in a code block + if not in_code_block and not line.startswith('>'): + # Format headers with emojis and bold text + if line.startswith('# '): + line = f"⚫️ **{line[2:].strip()}**\n" + elif line.startswith('## '): + line = f"◾️ **{line[3:].strip()}**\n" + elif line.startswith('### '): + line = f"▪️ **{line[4:].strip()}**\n" + elif line.startswith('#### '): + line = f"🔹 **{line[5:].strip()}**\n" + elif line.startswith('##### '): + line = f"📌 **{line[6:].strip()}**\n" + elif line.startswith('###### '): + line = f"🔰 **{line[7:].strip()}**\n" + else: + # Format bold text + line = re.sub(r'(?')) and not next.startswith(('*', '-', '```', '|', '>')): + result.append('') + + return '\n'.join(result) + +if __name__ == "__main__": + try: + markdown_text = paste() + converted_text = convert_markdown(markdown_text) + copy(converted_text) + print("✅ Markdown converted and copied to clipboard") + except Exception as e: + print(f"❌ Error during conversion: {str(e)}") \ No newline at end of file diff --git a/commands/conversions/rich-text-clipboard-to-markdown.sh b/commands/conversions/rich-text-clipboard-to-markdown.sh index 7cde8493f..5bf7d5d1d 100755 --- a/commands/conversions/rich-text-clipboard-to-markdown.sh +++ b/commands/conversions/rich-text-clipboard-to-markdown.sh @@ -20,4 +20,4 @@ if ! command -v pandoc &> /dev/null; then fi export LC_CTYPE=UTF-8 -osascript -e 'the clipboard as "HTML"'| perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))' | pandoc --from=html --to=gfm | pbcopy +osascript -e 'the clipboard as «class RTF »' | perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))' | pandoc --from=rtf --to=gfm | pbcopy diff --git a/commands/conversions/space-fixer.sh b/commands/conversions/space-fixer.sh new file mode 100755 index 000000000..ef716c82a --- /dev/null +++ b/commands/conversions/space-fixer.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +# Add spaces between Chinese and English, number or symbols. +# +# Dependency: This script requires the `https://www.npmjs.com/package/pangu` package. +# Install it via `pip install pangu` or `pnpm install -g pangu` or `npm install -g pangu`. +# +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Space Fixer +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 📝 +# @raycast.packageName Conversions + +# Documentation: +# @raycast.description Add spaces between Chinese and English, number or symbols. +# @raycast.author RealTong +# @raycast.authorURL https://raycast.com/RealTong + +# pip, pnp paths +export PATH="$HOME/.pyenv/shims:$HOME/Library/pnpm:$PATH" +# nvm paths +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +# npm paths +NPM_BIN_PATH=$(which npm) +if [[ -n "$NPM_BIN_PATH" ]]; then + NPM_DIR=$(dirname "$NPM_BIN_PATH") + export PATH="$NPM_DIR:$PATH" +fi + +pangu_path=$(which pangu) + +if [ -z "$pangu_path" ]; then + echo "Error: pangu not found in PATH" + exit 1 +fi + +input=$(pbpaste) + +if [ -z "$input" ]; then + echo "Input is empty" + exit 1 +fi + +# Call pangu : pangu -t "text" + +output=$($pangu_path -t "$input") +if [ -z "$output" ]; then + echo "Output is empty" + exit 1 +fi + +echo $output | pbcopy +echo "Fixed Chinese text has been copied to the clipboard" diff --git a/commands/culture/prayer-times-diyanet.sh b/commands/culture/prayer-times.sh similarity index 71% rename from commands/culture/prayer-times-diyanet.sh rename to commands/culture/prayer-times.sh index d1e608120..09655832e 100755 --- a/commands/culture/prayer-times-diyanet.sh +++ b/commands/culture/prayer-times.sh @@ -7,7 +7,7 @@ # Required parameters: # @raycast.schemaVersion 1 -# @raycast.title Prayer Times (Diyanet) +# @raycast.title Prayer Times # @raycast.mode inline # @raycast.packageName Culture @@ -17,16 +17,16 @@ # Documentation # @raycast.author Emircan Erkul # @raycast.authorURL https://emircanerkul.com -# @raycast.description Prayer Times grabbed from the Diyanet's Official Website for people located in Türkiye. +# @raycast.description Prayer Times grabbed from the aladhan.com. -data=$(curl -s https://namazvakitleri.diyanet.gov.tr/tr-TR/9654/kocaeli-icin-namaz-vakti) - -imsak=$(echo "$data" | pcregrep -o1 '_imsakTime = "(.*)"') -gunes=$(echo "$data" | pcregrep -o1 '_gunesTime = "(.*)"') -ogle=$(echo "$data" | pcregrep -o1 '_ogleTime = "(.*)"') -ikindi=$(echo "$data" | pcregrep -o1 '_ikindiTime = "(.*)"') -aksam=$(echo "$data" | pcregrep -o1 '_aksamTime = "(.*)"') -yatsi=$(echo "$data" | pcregrep -o1 '_yatsiTime = "(.*)"') +data=$(curl -s -L 'http://api.aladhan.com/v1/timingsByCity?city=derince&country=turkey&method=13') + +imsak=$(echo "$data" | jq --raw-output '.data.timings.Imsak') +gunes=$(echo $data | jq --raw-output '.data.timings.Sunrise') +ogle=$(echo "$data" | jq --raw-output '.data.timings.Dhuhr') +ikindi=$(echo "$data" | jq --raw-output '.data.timings.Asr') +aksam=$(echo "$data" | jq --raw-output '.data.timings.Maghrib') +yatsi=$(echo "$data" | jq --raw-output '.data.timings.Isha') NOW=$(gdate +%s) @@ -59,5 +59,4 @@ fi output="$REMANINING $imsak ⚙︎ $gunes ⚙︎ $ogle ⚙︎ $ikindi ⚙︎ $aksam ⚙︎ $yatsi" -echo $output | tr -d '\n' | LANG=tr_TR.UTF-8 pbcopy echo $output diff --git a/commands/dashboards/iperf-speed-test.template.sh b/commands/dashboards/iperf-speed-test.template.sh new file mode 100755 index 000000000..1e5f7d759 --- /dev/null +++ b/commands/dashboards/iperf-speed-test.template.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Dependency: This script requires `iPerf` to be installed: https://iperf.fr/iperf-download.php +# Install via homebrew: `brew install iperf` + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Speed Test +# @raycast.mode inline +# @raycast.refreshTime 1h +# @raycast.packageName iPerf + +# Optional parameters: +# @raycast.icon 💾 + +# Documentation: +# @raycast.description Runs an iPerf Speed Test. +# @raycast.author Sam Wright +# @raycast.authorURL https://raycast.com/samywamy10 + +# Add the IP address of your iPerf server here +ip_address='192.168.86.44' + +if ! command -v iperf &> /dev/null; then + echo "iperf command is required ('brew install iperf' or https://iperf.fr/iperf-download.php)."; + exit 1; +fi + +{ iperf3 -c $ip_address | grep 'sender' | tail -n 1 | awk '{print $7 " " $8}' && date +'%-I:%M%p'; } | tr '\n' ' ' | awk '{$3="@ "$3; print $0}' + diff --git a/commands/developer-utils/aws/amazon-s3-download.sh b/commands/developer-utils/aws/amazon-s3-download.sh new file mode 100755 index 000000000..fcd54b887 --- /dev/null +++ b/commands/developer-utils/aws/amazon-s3-download.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title S3 Download +# @raycast.mode fullOutput + +# Optional parameters: +# @raycast.icon images/amazon-s3.png +# @raycast.packageName AWS + +# Documentation: +# @raycast.description Download from Amazon S3 via URL +# @raycast.argument1 { "type": "text", "placeholder": "s3://bucket/key" } +# @raycast.author Chris Cook +# @raycast.authorURL https://github.com/zirkelc + +URL=$1 + +# Ensure AWS CLI is installed +if ! command -v aws &> /dev/null; then + echo "AWS CLI not found. Please install AWS CLI." + echo "Installation instructions: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html" + exit 1 +fi + +# Try matching different S3 URL patterns +# https://dev.to/aws-builders/format-and-parse-amazon-s3-url-5e10 +if [[ $URL =~ ^https?://s3\.([a-z0-9-]+)\.amazonaws\.com/([^/]+)(/(.*))?$ ]]; then + # Regional hostname with path-style + # Example: https://s3.us-east-1.amazonaws.com/bucket/key + BUCKET="${BASH_REMATCH[2]}" + KEY="${BASH_REMATCH[4]}" +elif [[ $URL =~ ^https?://([^/]+)\.s3\.([a-z0-9-]+)\.amazonaws\.com(/(.*))?$ ]]; then + # Regional hostname with virtual-hosted-style + # Example: https://bucket.s3.us-east-1.amazonaws.com/key + BUCKET="${BASH_REMATCH[1]}" + KEY="${BASH_REMATCH[4]}" +elif [[ $URL =~ ^https?://s3\.amazonaws\.com/([^/]+)(/(.*))?$ ]]; then + # Legacy hostname with path-style + # Example: https://s3.amazonaws.com/bucket/key + BUCKET="${BASH_REMATCH[1]}" + KEY="${BASH_REMATCH[3]}" +elif [[ $URL =~ ^https?://([^/]+)\.s3\.amazonaws\.com(/(.*))?$ ]]; then + # Legacy hostname with virtual-hosted-style + # Example: https://bucket.s3.amazonaws.com/key + BUCKET="${BASH_REMATCH[1]}" + KEY="${BASH_REMATCH[3]}" +elif [[ $URL =~ ^s3://([^/]+)(/(.*))?$ ]]; then + # S3 URI + # Example: s3://bucket/key + BUCKET="${BASH_REMATCH[1]}" + KEY="${BASH_REMATCH[3]}" +else + echo "Invalid URL: $URL" + echo "URL must match recognized S3 patterns." + echo "Patterns:" + echo "- Global S3 URI: s3://bucket/key" + echo "- Regional Path-Style URL: https://s3.region.amazonaws.com/bucket/key" + echo "- Regional Virtual-Hosted-Style URL: https://bucket.s3.region.amazonaws.com/key" + echo "- Legacy Path-Style URL: https://s3.amazonaws.com/bucket/key" + echo "- Legacy Virtual-Hosted-Style URL: https://bucket.s3.amazonaws.com/key" + exit 1 +fi + +# Trim leading slash from KEY if present +KEY="${KEY#/}" + +# Check for empty bucket +if [[ -z "$BUCKET" ]]; then + echo "Error extracting bucket from URL: $URL" + exit 1 +fi + +DOWNLOAD_FOLDER="$HOME/Downloads" + +# Ensure download folder exists +if [ ! -d "$DOWNLOAD_FOLDER" ]; then + echo "Download folder does not exist" + exit 1 +fi + +# Print bucket and key +echo "Bucket: $BUCKET" +echo "Key: ${KEY:-}" +echo "Download: $DOWNLOAD_FOLDER" +echo "" + +if [ -z "$KEY" ]; then + # No key provided, download entire bucket + DOWNLOAD_PATH="$DOWNLOAD_FOLDER/$BUCKET" + echo "Downloading entire bucket s3://$BUCKET to $DOWNLOAD_PATH..." + RECURSIVE="--recursive" +else + # Check if the key ends with a slash, indicating it's likely a directory + if [[ "$KEY" == */ ]]; then + DOWNLOAD_PATH="$DOWNLOAD_FOLDER/$BUCKET/$KEY" + echo "Downloading directory s3://$BUCKET/$KEY to $DOWNLOAD_PATH..." + RECURSIVE="--recursive" + else + # Check if the object exists as a file + if aws s3api head-object --bucket "$BUCKET" --key "$KEY" &>/dev/null; then + # It's a file + FILENAME=$(basename "$KEY") + DOWNLOAD_PATH="$DOWNLOAD_FOLDER/$FILENAME" + echo "Downloading file s3://$BUCKET/$KEY to $DOWNLOAD_PATH..." + RECURSIVE="" + else + # It might be a directory without a trailing slash or it doesn't exist + # Try to list objects with this prefix + if aws s3api list-objects-v2 --bucket "$BUCKET" --prefix "$KEY/" --max-items 1 --query 'Contents[0].Key' --output text &>/dev/null; then + # It's a directory + DOWNLOAD_PATH="$DOWNLOAD_FOLDER/$BUCKET/$KEY" + echo "Downloading directory s3://$BUCKET/$KEY to $DOWNLOAD_PATH..." + RECURSIVE="--recursive" + else + echo "Error: No file or directory found at s3://$BUCKET/$KEY" + exit 1 + fi + fi + fi +fi + +# Perform the download +if aws s3 cp "s3://$BUCKET/${KEY:+$KEY}" "$DOWNLOAD_PATH" $RECURSIVE; then + echo "Downloaded successfully." + if [[ -n "$RECURSIVE" ]]; then + open "$DOWNLOAD_FOLDER/$BUCKET" + else + open "$DOWNLOAD_FOLDER" + fi +else + echo "Download failed. Error code: $?" + exit 1 +fi diff --git a/commands/developer-utils/aws/images/amazon-s3.png b/commands/developer-utils/aws/images/amazon-s3.png new file mode 100644 index 000000000..1dbadf37a Binary files /dev/null and b/commands/developer-utils/aws/images/amazon-s3.png differ diff --git a/commands/developer-utils/create-image-from-code.sh b/commands/developer-utils/create-image-from-code.sh index 8b7e9387a..2a3aa7792 100755 --- a/commands/developer-utils/create-image-from-code.sh +++ b/commands/developer-utils/create-image-from-code.sh @@ -7,7 +7,7 @@ # Optional parameters: # @raycast.icon ./images/ray-so.png -# @raycast.argument1 { "type": "text", "placeholder": "Title", "optional": true } +# @raycast.argument1 { "type": "text", "placeholder": "Title", "optional": true, "percentEncoded": true } # Documentation: # @raycast.description Create beautiful images of your code with https://ray.so @@ -29,16 +29,10 @@ PADDING="64" LANGUAGE="auto" # Main: - -if [[ -z "$1" ]] -then - TITLE="Untitled-1" -else - TITLE=$(php -r "echo urlencode(\"$1\");") -fi +TITLE=${1:-"Untitled"} CODE=$(pbpaste | base64) # Urlencode any + symbols in the base64 encoded string CODE=${CODE//+/%2B} -open "https://ray.so/?colors=$COLORS&background=$BACKGROUND&darkMode=$DARK_MODE&padding=$PADDING&title=$TITLE&code=$CODE&language=$LANGUAGE" +open "https://ray.so/?#title=$TITLE&code=$CODE&colors=$COLORS&background=$BACKGROUND&darkMode=$DARK_MODE&padding=$PADDING&title=$TITLE&code=$CODE&language=$LANGUAGE" diff --git a/commands/developer-utils/delete-current-line.applescript b/commands/developer-utils/delete-current-line.applescript new file mode 100755 index 000000000..b80fce527 --- /dev/null +++ b/commands/developer-utils/delete-current-line.applescript @@ -0,0 +1,20 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Delete Current Line +# @raycast.mode silent +# @raycast.packageName Developer Utilities + +# Optional parameters: +# @raycast.icon ⌨️ + +# Documentation: +# @raycast.description This script deletes the line at cursor position. +# @raycast.author Annie Ma +# @raycast.authorURL http://www.anniema.co/ + +tell application "System Events" + keystroke "k" using control down + keystroke (ASCII character 8) using command down +end tell diff --git a/commands/developer-utils/toggle_ssh_proxy_tunnel.template.sh b/commands/developer-utils/toggle_ssh_proxy_tunnel.template.sh new file mode 100755 index 000000000..80f8e054d --- /dev/null +++ b/commands/developer-utils/toggle_ssh_proxy_tunnel.template.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Raycast Script Command +# +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Toggle SSH SOCKS Tunnel +# @raycast.mode silent +# +# Optional parameters: +# @raycast.icon 🔒 +# @raycast.packageName Developer Utilities +# +# Documentation: +# @raycast.description Toggles an SSH SOCKS proxy tunnel on and off. +# @raycast.author Andrii Barabash +# @raycast.authorURL https://github.com/AndriiBarabash + +# --- Configuration --- +# Replace these with your own values +SSH_USER="" +SSH_HOST="" +SSH_PORT="" +INTERFACE="" # e.g., "Wi-Fi" or "Ethernet" +PROXY_PORT="" # e.g., 1080 +# --- End Configuration --- + +if pgrep -f "ssh -D $PROXY_PORT" >/dev/null; then + echo "SSH SOCKS tunnel is running. Turning it off..." + + # Kill the SSH process + pkill -f "ssh -D $PROXY_PORT" + + # Disable the SOCKS proxy + networksetup -setsocksfirewallproxystate "$INTERFACE" off + + echo "Tunnel and proxy disabled." +else + echo "SSH SOCKS tunnel is not running. Turning it on..." + + # Start the SSH tunnel + ssh -D "$PROXY_PORT" -f -C -q -N -p "$SSH_PORT" "$SSH_USER"@"$SSH_HOST" + + # Enable the SOCKS proxy + networksetup -setsocksfirewallproxy "$INTERFACE" 127.0.0.1 "$PROXY_PORT" + networksetup -setsocksfirewallproxystate "$INTERFACE" on + + echo "Tunnel and proxy enabled." +fi diff --git a/commands/extensions.json b/commands/extensions.json index 48df04c1e..a245b43c1 100644 --- a/commands/extensions.json +++ b/commands/extensions.json @@ -18,7 +18,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-04T18:14:11+00:00", + "createdAt" : "2021-02-04T18:14:11Z", "currentDirectoryPath" : null, "description" : "Increase brightness of Elgato Key Light by 5%.", "filename" : "elgato-key-light-increase-brightness.template.rb", @@ -27,7 +27,7 @@ "dark" : null, "light" : "images\/elgato.png" }, - "identifier" : "1a5ced3b0eed17feb59e06d3b82a3235", + "identifier" : "0efbf0fc0112b8007548e0036851da5a", "isTemplate" : true, "language" : "ruby", "mode" : "silent", @@ -37,7 +37,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Increase Brightness", - "updatedAt" : "2021-02-04T18:14:11+00:00" + "updatedAt" : "2021-02-04T18:14:11Z" }, { "authors" : [ @@ -46,7 +46,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-04T18:14:11+00:00", + "createdAt" : "2021-02-04T18:14:11Z", "currentDirectoryPath" : null, "description" : "Turn on Elgato Key Light.", "filename" : "elgato-key-light-turn-on.template.rb", @@ -55,7 +55,7 @@ "dark" : null, "light" : "images\/elgato.png" }, - "identifier" : "7a42a1bde2de4c6d198d04a2f527ea4a", + "identifier" : "6bded1a4b3b945dff30a380936a1741f", "isTemplate" : true, "language" : "ruby", "mode" : "silent", @@ -65,7 +65,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Turn On", - "updatedAt" : "2021-02-04T18:14:11+00:00" + "updatedAt" : "2021-02-04T18:14:11Z" }, { "authors" : [ @@ -74,7 +74,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-04T18:14:11+00:00", + "createdAt" : "2021-02-04T18:14:11Z", "currentDirectoryPath" : null, "description" : "Turn off Elgato Key Light.", "filename" : "elgato-key-light-turn-off.template.rb", @@ -83,7 +83,7 @@ "dark" : null, "light" : "images\/elgato.png" }, - "identifier" : "ae1a70aec03ee5e74c3b504ab0bd5873", + "identifier" : "d5b4e7d38d50f78801983fed1ab9c710", "isTemplate" : true, "language" : "ruby", "mode" : "silent", @@ -93,7 +93,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Turn Off", - "updatedAt" : "2021-02-04T18:14:11+00:00" + "updatedAt" : "2021-02-04T18:14:11Z" }, { "authors" : [ @@ -102,7 +102,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-04T18:14:11+00:00", + "createdAt" : "2021-02-04T18:14:11Z", "currentDirectoryPath" : null, "description" : "Decrease brightness of Elgato Key Light by 5%.", "filename" : "elgato-key-light-decrease-brightness.template.rb", @@ -111,7 +111,7 @@ "dark" : null, "light" : "images\/elgato.png" }, - "identifier" : "e507bdea0b66b92dfeb1753d50336677", + "identifier" : "6b6890b0f6e356b44fd73d3d7e30c902", "isTemplate" : true, "language" : "ruby", "mode" : "silent", @@ -121,7 +121,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Decrease Brightness", - "updatedAt" : "2021-02-04T21:22:04+00:00" + "updatedAt" : "2021-02-04T21:22:04Z" } ] }, @@ -249,6 +249,34 @@ "name" : "Conversions", "path" : "conversions", "scriptCommands" : [ + { + "authors" : [ + { + "name" : "RealTong", + "url" : "https:\/\/raycast.com\/RealTong" + } + ], + "createdAt" : "2024-03-21T12:03:11+08:00", + "currentDirectoryPath" : null, + "description" : "Add spaces between Chinese and English, number or symbols.", + "filename" : "space-fixer.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "📝" + }, + "identifier" : "01ce6b040aecd6bcd05519b1880154c6", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Conversions", + "path" : "conversions\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Space Fixer", + "updatedAt" : "2024-03-22T18:09:49+08:00" + }, { "authors" : [ { @@ -303,7 +331,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Rich Text to Markdown", - "updatedAt" : "2021-07-23T17:21:58-04:00" + "updatedAt" : "2024-08-28T20:37:53+08:00" }, { "authors" : null, @@ -354,7 +382,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "What Day Is...", - "updatedAt" : "2021-02-21T22:11:45+00:00" + "updatedAt" : "2021-02-21T22:11:45Z" }, { "authors" : [ @@ -438,7 +466,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Trim Newlines and Tabs", - "updatedAt" : "2021-08-23T10:12:46+00:00" + "updatedAt" : "2021-08-23T10:12:46Z" }, { "authors" : [ @@ -552,6 +580,34 @@ "title" : "QR Code Generation", "updatedAt" : "2021-11-04T03:59:40+08:00" }, + { + "authors" : [ + { + "name" : "Maxim Borzov", + "url" : "https:\/\/github.com\/borzov" + } + ], + "createdAt" : "2024-05-21T11:23:12+03:00", + "currentDirectoryPath" : null, + "description" : "Convert Markdown formatting to Telegram format, excluding processing inside code blocks or quotes", + "filename" : "markdown-to-telegram.py", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🔄" + }, + "identifier" : "14c19002feb2ab3f839073ec5eda7c30", + "isTemplate" : false, + "language" : "python", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Conversions", + "path" : "conversions\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Convert Markdown to Telegram Format", + "updatedAt" : "2024-05-21T11:23:12+03:00" + }, { "authors" : [ { @@ -578,7 +634,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Markdown Table", - "updatedAt" : "2021-11-03T20:04:02+00:00" + "updatedAt" : "2021-11-03T20:04:02Z" }, { "authors" : [ @@ -606,7 +662,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Paste and Match Style", - "updatedAt" : "2022-03-31T14:05:46+00:00" + "updatedAt" : "2022-03-31T14:05:46Z" }, { "authors" : [ @@ -662,7 +718,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Unix Time Reader From Clipboard", - "updatedAt" : "2021-03-30T15:34:59+00:00" + "updatedAt" : "2021-03-30T15:34:59Z" }, { "authors" : [ @@ -914,7 +970,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Convert Raw HTML to Rich Text on Clipboard", - "updatedAt" : "2023-07-03T21:06:13+00:00" + "updatedAt" : "2023-07-03T21:06:13Z" } ], "subGroups" : [ @@ -1124,7 +1180,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open in guest profile", - "updatedAt" : "2022-10-31T11:55:21+00:00" + "updatedAt" : "2022-10-31T11:55:21Z" }, { "authors" : [ @@ -1189,7 +1245,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-11-09T17:16:09+00:00", + "createdAt" : "2020-11-09T17:16:09Z", "currentDirectoryPath" : null, "description" : "Shorten the URL in your Clipboard with Tiny URL.", "filename" : "shorten-url.sh", @@ -1198,7 +1254,7 @@ "dark" : null, "light" : "🔗" }, - "identifier" : "3ace97396b27d3677bdd47488bb7c31e", + "identifier" : "87e7fd07ae15344a2c3bbdfa528403ab", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -1238,6 +1294,34 @@ "title" : "Go to Outline", "updatedAt" : "2021-02-19T19:09:37-03:00" }, + { + "authors" : [ + { + "name" : "Yasutaka Nishii", + "url" : "https:\/\/github.com\/ystknsh" + } + ], + "createdAt" : "2024-08-29T16:26:42+09:00", + "currentDirectoryPath" : null, + "description" : "Open multiple websites on Safari using list of URLs", + "filename" : "open-multiple-websites-on-safari.template.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "📚" + }, + "identifier" : "be278c484ca03c82e901a345ff6e6b72", + "isTemplate" : true, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Browsing", + "path" : "browsing\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Open Multiple Websites on Safari", + "updatedAt" : "2024-09-03T11:24:41Z" + }, { "authors" : [ { @@ -1460,7 +1544,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Youtube Shorts in video player", - "updatedAt" : "2023-07-25T16:29:37+00:00" + "updatedAt" : "2023-07-25T16:29:37Z" }, { "authors" : [ @@ -1516,7 +1600,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Current Page URL", - "updatedAt" : "2022-02-22T10:00:48+00:00" + "updatedAt" : "2022-02-22T10:00:48Z" }, { "authors" : [ @@ -1685,7 +1769,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Finder", - "updatedAt" : "2021-05-31T10:08:39+00:00" + "updatedAt" : "2021-05-31T10:08:39Z" }, { "authors" : [ @@ -1713,7 +1797,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Devdocs", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : null, @@ -1736,7 +1820,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Applications", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, @@ -1759,7 +1843,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open URL From Clipboard", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -1899,7 +1983,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Dash", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -1973,7 +2057,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Last Downloaded", - "updatedAt" : "2022-03-30T20:25:55+00:00" + "updatedAt" : "2022-03-30T20:25:55Z" }, { "authors" : null, @@ -2047,7 +2131,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Clipboard URL on Desktop", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, @@ -2094,6 +2178,34 @@ "schemaVersion" : 1, "title" : "Open Downloads", "updatedAt" : "2021-04-28T11:35:25-04:00" + }, + { + "authors" : [ + { + "name" : "Chris Bailey", + "url" : "https:\/\/raycast.com\/that70schris" + } + ], + "createdAt" : "2024-08-13T00:40:38-04:00", + "currentDirectoryPath" : null, + "description" : "Easily hide your foremost application", + "filename" : "hide-application.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🫥" + }, + "identifier" : "47f61692f25fabb33a1748ded306439c", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Navigation", + "path" : "navigation\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Hide Current Application", + "updatedAt" : "2024-08-13T00:40:38-04:00" } ] }, @@ -2134,7 +2246,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Power Off", - "updatedAt" : "2022-02-09T10:16:51+00:00" + "updatedAt" : "2022-02-09T10:16:51Z" }, { "authors" : [ @@ -2162,7 +2274,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Configure", - "updatedAt" : "2022-02-09T10:16:51+00:00" + "updatedAt" : "2022-02-09T10:16:51Z" }, { "authors" : [ @@ -2190,7 +2302,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Volume Up", - "updatedAt" : "2022-02-09T10:16:51+00:00" + "updatedAt" : "2022-02-09T10:16:51Z" }, { "authors" : [ @@ -2218,7 +2330,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Volume Down", - "updatedAt" : "2022-02-09T10:16:51+00:00" + "updatedAt" : "2022-02-09T10:16:51Z" }, { "authors" : [ @@ -2246,7 +2358,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Power On", - "updatedAt" : "2022-02-09T10:16:51+00:00" + "updatedAt" : "2022-02-09T10:16:51Z" } ] }, @@ -2287,7 +2399,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Switch to DP", - "updatedAt" : "2022-02-24T08:21:35+00:00" + "updatedAt" : "2022-02-24T08:21:35Z" }, { "authors" : [ @@ -2315,7 +2427,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Switch to HDMI", - "updatedAt" : "2022-02-24T08:21:35+00:00" + "updatedAt" : "2022-02-24T08:21:35Z" } ] }, @@ -2349,7 +2461,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Switch to DP", - "updatedAt" : "2022-02-24T08:21:35+00:00" + "updatedAt" : "2022-02-24T08:21:35Z" }, { "authors" : [ @@ -2377,7 +2489,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Switch to HDMI", - "updatedAt" : "2022-02-24T08:21:35+00:00" + "updatedAt" : "2022-02-24T08:21:35Z" } ] } @@ -2414,7 +2526,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Turn Off TV", - "updatedAt" : "2021-08-23T10:12:10+00:00" + "updatedAt" : "2021-08-23T10:12:10Z" }, { "authors" : [ @@ -2442,7 +2554,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Turn On TV", - "updatedAt" : "2021-08-23T10:12:10+00:00" + "updatedAt" : "2021-08-23T10:12:10Z" } ] }, @@ -3810,7 +3922,7 @@ "url" : "https:\/\/github.com\/pitnikola" } ], - "createdAt" : "2021-02-05T13:43:54+00:00", + "createdAt" : "2021-02-05T13:43:54Z", "currentDirectoryPath" : null, "description" : "Calculate percentage increase between \"from\" and \"to\" values.", "filename" : "calculate-growth.sh", @@ -3819,7 +3931,7 @@ "dark" : null, "light" : "📈" }, - "identifier" : "43e4892095abfafb6a7ad5bb50c3c602", + "identifier" : "a733748a4340860d44b583174bed4aa8", "isTemplate" : false, "language" : "bash", "mode" : "compact", @@ -3829,7 +3941,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Calculate Growth %", - "updatedAt" : "2021-02-05T13:43:54+00:00" + "updatedAt" : "2021-02-05T13:43:54Z" }, { "authors" : [ @@ -3857,7 +3969,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Wolfram Alpha", - "updatedAt" : "2021-04-28T20:59:27+00:00" + "updatedAt" : "2021-04-28T20:59:27Z" }, { "authors" : [ @@ -3913,7 +4025,32 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "LaTeX Calculator", - "updatedAt" : "2022-02-04T10:14:08+00:00" + "updatedAt" : "2022-02-04T10:14:08Z" + }, + { + "authors" : [ + { + "name" : "Samuel Barton", + "url" : "https:\/\/github.com\/samueldbarton" + } + ], + "createdAt" : "2024-11-18T09:32:56-06:00", + "currentDirectoryPath" : null, + "description" : "Calculate the CAGR between \"from\" and \"to\" values over given \"years,\" then copy the result.", + "filename" : "calculate-CAGR.sh", + "hasArguments" : true, + "icon" : null, + "identifier" : "5acd1b95964396ecfbe1aee4841ddb0a", + "isTemplate" : false, + "language" : "bash", + "mode" : "compact", + "needsConfirmation" : null, + "packageName" : "Math", + "path" : "math\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Calculate CAGR Percentage", + "updatedAt" : "2024-11-18T09:32:56-06:00" }, { "authors" : [ @@ -4096,7 +4233,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-01-27T23:15:56+00:00", + "createdAt" : "2021-01-27T23:15:56Z", "currentDirectoryPath" : null, "description" : "Shows the followers, favorites and friends count of your Twitter account.", "filename" : "twitter-statistics.template.rb", @@ -4105,7 +4242,7 @@ "dark" : null, "light" : "images\/twitter.png" }, - "identifier" : "f1a519a4eafaa91bf8e2179e20acc1f0", + "identifier" : "1bde64c963c2cc5e3ffc510d7568f210", "isTemplate" : true, "language" : "ruby", "mode" : "inline", @@ -4222,7 +4359,7 @@ "refreshTime" : "5m", "schemaVersion" : 1, "title" : "Crypto", - "updatedAt" : "2021-03-01T16:54:23+00:00" + "updatedAt" : "2021-03-01T16:54:23Z" }, { "authors" : [ @@ -4259,7 +4396,7 @@ "url" : "https:\/\/github.com\/designedbyclu" } ], - "createdAt" : "2021-05-10T13:42:50+08:00", + "createdAt" : "2021-02-04T00:45:59-08:00", "currentDirectoryPath" : null, "description" : "Checking DOGE coin price", "filename" : "doge.sh", @@ -4268,7 +4405,7 @@ "dark" : null, "light" : "images\/dogecoin-logo.png" }, - "identifier" : "5ef2d6fa688d7beb5849da1bfcf41b17", + "identifier" : "ef5ccfacde23ff614355afb1f378cc1b", "isTemplate" : false, "language" : "bash", "mode" : "inline", @@ -4306,7 +4443,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "NextDNS Status", - "updatedAt" : "2021-01-26T14:46:55+00:00" + "updatedAt" : "2021-01-26T14:46:55Z" }, { "authors" : [ @@ -4334,7 +4471,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Tesla", - "updatedAt" : "2023-02-06T08:49:49+00:00" + "updatedAt" : "2023-02-06T08:49:49Z" }, { "authors" : [ @@ -4343,7 +4480,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-12-01T15:19:07+00:00", + "createdAt" : "2020-12-01T15:19:07Z", "currentDirectoryPath" : null, "description" : "See the year progress on your desktop.", "filename" : "year-progress.sh", @@ -4352,7 +4489,7 @@ "dark" : null, "light" : "⏱" }, - "identifier" : "b2f18259bc9ceb6889bd3f3c6a6022e1", + "identifier" : "f91b94065511ac6266f5b2499368af3a", "isTemplate" : false, "language" : "bash", "mode" : "inline", @@ -4390,7 +4527,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "YouTube Statistics", - "updatedAt" : "2021-11-09T09:49:02+00:00" + "updatedAt" : "2021-11-09T09:49:02Z" }, { "authors" : [ @@ -4399,7 +4536,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-15T15:57:43+00:00", + "createdAt" : "2021-02-15T15:57:43Z", "currentDirectoryPath" : null, "description" : "Keep track of your stock portfolio.", "filename" : "stock-portfolio.rb", @@ -4408,7 +4545,7 @@ "dark" : null, "light" : "📈" }, - "identifier" : "29df612d786611c3379557e77fdcc787", + "identifier" : "116c44f780e379c97aaa32826ff6dbb8", "isTemplate" : false, "language" : "ruby", "mode" : "inline", @@ -4418,7 +4555,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "Stocks", - "updatedAt" : "2021-02-15T16:05:12+00:00" + "updatedAt" : "2021-02-15T16:05:12Z" }, { "authors" : [ @@ -4427,7 +4564,7 @@ "url" : "https:\/\/github.com\/jesse-c" } ], - "createdAt" : "2021-01-16T14:01:54+00:00", + "createdAt" : "2021-01-16T14:01:54Z", "currentDirectoryPath" : null, "description" : "Show the time from elsewhere in the world", "filename" : "world-time.sh", @@ -4436,7 +4573,7 @@ "dark" : null, "light" : "🕐" }, - "identifier" : "488cb8d0c156cff41b04f10b76d16696", + "identifier" : "0fe9fe7b1ee089f32c2d6fc739e8364b", "isTemplate" : false, "language" : "bash", "mode" : "inline", @@ -4660,7 +4797,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Get Authorization Token", - "updatedAt" : "2022-12-30T17:11:26+00:00" + "updatedAt" : "2022-12-30T17:11:26Z" } ] }, @@ -4786,7 +4923,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Set Frontmost App as Default Browser", - "updatedAt" : "2021-08-06T19:23:46+02:00" + "updatedAt" : "2024-04-22T16:22:28+10:00" }, { "authors" : [ @@ -4844,6 +4981,34 @@ "title" : "Uninstall with AppCleaner", "updatedAt" : "2021-03-18T14:47:46-03:00" }, + { + "authors" : [ + { + "name" : "Raphael-KR", + "url" : "https:\/\/github.com\/Raphael-KR" + } + ], + "createdAt" : "2025-08-23T18:49:50+09:00", + "currentDirectoryPath" : null, + "description" : "Toggle natural trackpad\/mouse scrolling setting for macOS 15.6.1+", + "filename" : "toggle-natural-scrolling-macos15.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🖱" + }, + "identifier" : "3ccaeabe09d36538f01f592bc7b3e51e", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Toggle Natural Scrolling (macOS 15+)", + "updatedAt" : "2025-08-25T09:08:49Z" + }, { "authors" : [ { @@ -4898,7 +5063,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Dismiss Notifications", - "updatedAt" : "2023-05-08T06:42:50+00:00" + "updatedAt" : "2025-05-18T15:56:50-07:00" }, { "authors" : [ @@ -4963,7 +5128,7 @@ "url" : "https:\/\/github.com\/jesse-c" } ], - "createdAt" : "2020-12-18T16:52:19+00:00", + "createdAt" : "2020-12-18T16:52:19Z", "currentDirectoryPath" : null, "description" : "Sample a color from anywhere on your screen.", "filename" : "sample-color.swift", @@ -4972,7 +5137,7 @@ "dark" : null, "light" : "🎨" }, - "identifier" : "3fa985727c54b02c6d0b8d526c4b79ee", + "identifier" : "4600a7cb879326d93a1fa82615819092", "isTemplate" : false, "language" : "swift", "mode" : "silent", @@ -4984,6 +5149,34 @@ "title" : "Sample Color", "updatedAt" : "2021-07-21T10:01:35-04:00" }, + { + "authors" : [ + { + "name" : "Jelte Lagendijk", + "url" : "https:\/\/raycast.com\/j3lte" + } + ], + "createdAt" : "2024-04-22T08:23:05+02:00", + "currentDirectoryPath" : null, + "description" : "Set the position of the Dock in the screen", + "filename" : "dock-set-position.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "🤖" + }, + "identifier" : "4d015ec34744b1b005c63343cace870a", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Dock Position", + "updatedAt" : "2024-04-22T08:23:05+02:00" + }, { "authors" : [ { @@ -5173,7 +5366,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Add Spacer to Dock", - "updatedAt" : "2021-03-08T00:46:38+00:00" + "updatedAt" : "2021-03-08T00:46:38Z" }, { "authors" : [ @@ -5341,7 +5534,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Default to Firefox", - "updatedAt" : "2023-08-31T18:05:16+09:00" + "updatedAt" : "2024-01-05T16:03:05-08:00" }, { "authors" : [ @@ -5481,7 +5674,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Move Desktop to Trash", - "updatedAt" : "2021-07-06T15:39:42+00:00" + "updatedAt" : "2021-07-06T15:39:42Z" }, { "authors" : [ @@ -5509,7 +5702,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Kill AirDrop Processes", - "updatedAt" : "2021-04-06T23:07:39+00:00" + "updatedAt" : "2021-04-06T23:07:39Z" }, { "authors" : [ @@ -5565,7 +5758,35 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Default to Arc", - "updatedAt" : "2023-02-22T16:16:58+11:00" + "updatedAt" : "2024-01-05T16:03:05-08:00" + }, + { + "authors" : [ + { + "name" : "Jelte Lagendijk", + "url" : "https:\/\/raycast.com\/j3lte" + } + ], + "createdAt" : "2024-04-22T08:23:05+02:00", + "currentDirectoryPath" : null, + "description" : "Set the Dock autohide", + "filename" : "dock-set-autohide.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "🤖" + }, + "identifier" : "2e9f26f5c37a3f3c74cae49c82fc0fd5", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Dock Set Autohide", + "updatedAt" : "2024-04-22T08:23:05+02:00" }, { "authors" : [ @@ -5595,6 +5816,34 @@ "title" : "Custom Window Size", "updatedAt" : "2021-11-17T17:41:07+01:00" }, + { + "authors" : [ + { + "name" : "Federico Zivolo", + "url" : "https:\/\/github.com\/FezVrasta" + } + ], + "createdAt" : "2024-01-20T13:56:53+01:00", + "currentDirectoryPath" : null, + "description" : null, + "filename" : "toggle-desktop-widget.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🔄" + }, + "identifier" : "79982c901bf4cd65eda80b5f7039d1d0", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Toggle Desktop Widget", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Toggle Desktop Widgets", + "updatedAt" : "2024-01-22T22:39:53Z" + }, { "authors" : [ { @@ -5784,7 +6033,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "OCR", - "updatedAt" : "2022-07-22T17:53:33+08:00" + "updatedAt" : "2024-06-22T16:19:22+09:00" }, { "authors" : [ @@ -5814,6 +6063,34 @@ "title" : "Capture Screen Selection to Clipboard", "updatedAt" : "2021-08-07T19:28:35-07:00" }, + { + "authors" : [ + { + "name" : "StepaniaH", + "url" : "https:\/\/github.com\/StepaniaH" + } + ], + "createdAt" : "2024-12-16T23:44:40+08:00", + "currentDirectoryPath" : null, + "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 `--`.", + "filename" : "rename-videos-pictures.py", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "📂" + }, + "identifier" : "360d8e4290996f7b2b40dc6e388e30f2", + "isTemplate" : false, + "language" : "python", + "mode" : "fullOutput", + "needsConfirmation" : null, + "packageName" : "Rename Videos Pictures", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Rename Video", + "updatedAt" : "2024-12-18T23:56:00+08:00" + }, { "authors" : [ { @@ -5840,7 +6117,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Default to Safari", - "updatedAt" : "2023-02-22T16:16:58+11:00" + "updatedAt" : "2024-01-05T16:03:05-08:00" }, { "authors" : [ @@ -5926,6 +6203,62 @@ "title" : "Minimize All Windows", "updatedAt" : "2022-02-21T17:47:42+01:00" }, + { + "authors" : [ + { + "name" : "AndriiBarabash", + "url" : "https:\/\/github.com\/AndriiBarabash" + } + ], + "createdAt" : "2025-03-10T00:16:14+01:00", + "currentDirectoryPath" : null, + "description" : "Put your Mac to sleep (in X minutes).", + "filename" : "sleep-timer.applescript", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "😴" + }, + "identifier" : "ff43a32961d94da6001ad37ab79dd032", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Sleep Timer", + "updatedAt" : "2025-03-10T10:57:38+01:00" + }, + { + "authors" : [ + { + "name" : "Jelte Lagendijk", + "url" : "https:\/\/raycast.com\/j3lte" + } + ], + "createdAt" : "2024-04-22T08:23:05+02:00", + "currentDirectoryPath" : null, + "description" : "Toggle the Dock Autohide", + "filename" : "dock-autohide-toggle.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🤖" + }, + "identifier" : "48c4f52d832201490101c47dd2963bbd", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Toggle Dock Autohide", + "updatedAt" : "2024-04-22T08:23:05+02:00" + }, { "authors" : [ { @@ -6063,7 +6396,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Last Download", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -6137,7 +6470,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Eject All Disks", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -6165,7 +6498,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Disk Free", - "updatedAt" : "2021-09-28T06:22:27+00:00" + "updatedAt" : "2021-09-28T06:22:27Z" }, { "authors" : [ @@ -6193,7 +6526,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Wi-Fi Password", - "updatedAt" : "2021-11-03T20:29:35+00:00" + "updatedAt" : "2021-11-03T20:29:35Z" }, { "authors" : [ @@ -6230,7 +6563,7 @@ "url" : "https:\/\/github.com\/jesse-c" } ], - "createdAt" : "2021-04-27T06:02:41+00:00", + "createdAt" : "2021-04-27T06:02:41Z", "currentDirectoryPath" : null, "description" : "Show disk usage for \/ (root)", "filename" : "disk-usage.sh", @@ -6239,7 +6572,7 @@ "dark" : null, "light" : "💿" }, - "identifier" : "8058594c23e845822eadac4bb4c818ab", + "identifier" : "aadf056d506a2abb91cef252e2e7a1f6", "isTemplate" : false, "language" : "bash", "mode" : "inline", @@ -6249,7 +6582,7 @@ "refreshTime" : "1m", "schemaVersion" : 1, "title" : "Disk Usage", - "updatedAt" : "2021-04-27T06:02:41+00:00" + "updatedAt" : "2021-04-27T06:02:41Z" }, { "authors" : [ @@ -6361,7 +6694,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Create Email", - "updatedAt" : "2021-02-25T10:47:45+00:00" + "updatedAt" : "2021-02-25T10:47:45Z" }, { "authors" : [ @@ -6391,6 +6724,34 @@ "title" : "Largest RAM Process", "updatedAt" : "2020-11-28T13:04:44-05:00" }, + { + "authors" : [ + { + "name" : "Zach Dawson", + "url" : "https:\/\/raycast.com\/zdawz" + } + ], + "createdAt" : "2023-12-22T08:19:14-06:00", + "currentDirectoryPath" : null, + "description" : "Resets the macOS Launchpad to its default state", + "filename" : "reset-launchpad.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🚀" + }, + "identifier" : "1c9956877da036e214c52ae82f128cb1", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Reset Launchpad", + "updatedAt" : "2023-12-22T14:21:54Z" + }, { "authors" : [ { @@ -6417,14 +6778,70 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Network Info", - "updatedAt" : "2023-07-04T10:01:20+00:00" + "updatedAt" : "2023-07-04T10:01:20Z" }, { "authors" : [ { - "name" : "Felipe Turcheti", - "url" : "https:\/\/felipeturcheti.com" - } + "name" : "Juan Luis Romero", + "url" : "https:\/\/github.com\/JuanluR8" + } + ], + "createdAt" : "2024-04-22T08:23:25+02:00", + "currentDirectoryPath" : null, + "description" : "Display CPU usage percent", + "filename" : "inline-cpu-usage-percent.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🖥️" + }, + "identifier" : "88b8ff2c77f987a58eadc153ac8e9629", + "isTemplate" : false, + "language" : "bash", + "mode" : "inline", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : "10s", + "schemaVersion" : 1, + "title" : "CPU Usage", + "updatedAt" : "2024-04-22T06:25:56Z" + }, + { + "authors" : [ + { + "name" : "aaqifshafi", + "url" : "https:\/\/github.com\/aaqifshafi" + } + ], + "createdAt" : "2025-10-24T17:32:55+05:30", + "currentDirectoryPath" : null, + "description" : "Kill running processes on the given ports", + "filename" : "kill-a-process-on-port.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "🚫" + }, + "identifier" : "71d24aef7a640392ef09a32800fd05e3", + "isTemplate" : false, + "language" : "bash", + "mode" : "compact", + "needsConfirmation" : null, + "packageName" : "Kill A Process On Port", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Kill a process on PORT", + "updatedAt" : "2025-10-24T17:32:55+05:30" + }, + { + "authors" : [ + { + "name" : "Felipe Turcheti", + "url" : "https:\/\/felipeturcheti.com" + } ], "createdAt" : "2021-06-14T14:36:05-03:00", "currentDirectoryPath" : null, @@ -6447,6 +6864,34 @@ "title" : "Flush DNS", "updatedAt" : "2021-06-14T14:36:05-03:00" }, + { + "authors" : [ + { + "name" : "Angelos Michalopoulos", + "url" : null + } + ], + "createdAt" : "2024-11-18T17:33:08+02:00", + "currentDirectoryPath" : null, + "description" : "Get One-Time Password (OTP) from Apple Password Manager", + "filename" : "otp.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "🔑" + }, + "identifier" : "7115fa08d182688291508d427a6ce246", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "One-Time Password", + "updatedAt" : "2024-11-18T17:33:08+02:00" + }, { "authors" : [ { @@ -6505,7 +6950,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-05T19:09:05+00:00", + "createdAt" : "2020-11-05T19:09:05Z", "currentDirectoryPath" : null, "description" : "Copy the last downloaded file to the clipboard.", "filename" : "copy-last-download.swift", @@ -6514,7 +6959,7 @@ "dark" : null, "light" : "💁" }, - "identifier" : "0ec1db6ff6f6f56e7daba5d6fbd03c75", + "identifier" : "19d49b55a44b69e9229b63c27724c02f", "isTemplate" : false, "language" : "swift", "mode" : "silent", @@ -6524,11 +6969,11 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Last Download", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, - "createdAt" : "2020-11-05T19:08:41+00:00", + "createdAt" : "2020-11-05T19:08:41Z", "currentDirectoryPath" : null, "description" : "Copies the calendar availability of today.", "filename" : "copy-availability.swift", @@ -6537,7 +6982,7 @@ "dark" : null, "light" : "📅" }, - "identifier" : "c54475a390bfef23ea03f2d5e69be018", + "identifier" : "7f78eb54a08af1d516202dd647999a27", "isTemplate" : false, "language" : "swift", "mode" : "silent", @@ -6575,7 +7020,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Toggle Natural Scrolling", - "updatedAt" : "2021-04-29T15:07:57+00:00" + "updatedAt" : "2024-04-25T21:10:36+05:45" }, { "authors" : [ @@ -6603,7 +7048,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Low Power Mode", - "updatedAt" : "2023-07-03T21:06:13+00:00" + "updatedAt" : "2023-07-03T21:06:13Z" }, { "authors" : null, @@ -6626,7 +7071,35 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Last Screenshot", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" + }, + { + "authors" : [ + { + "name" : "Felipe Turcheti", + "url" : "https:\/\/felipeturcheti.com" + } + ], + "createdAt" : "2024-08-05T09:48:29-06:00", + "currentDirectoryPath" : null, + "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.", + "filename" : "copy-selection-to-clipboard.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "??" + }, + "identifier" : "c76e2bb24d45b402577be451771a6171", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Copy Finder Selection to Clipboard", + "updatedAt" : "2024-08-05T09:48:29-06:00" }, { "authors" : [ @@ -6681,7 +7154,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Restart", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -6767,6 +7240,29 @@ "title" : "Network Status", "updatedAt" : "2021-03-11T11:38:48-08:00" }, + { + "authors" : null, + "createdAt" : "2025-09-05T10:08:41-05:00", + "currentDirectoryPath" : null, + "description" : "Copies a summary of today's meetings to the clipboard.", + "filename" : "meeting_summary_script.swift", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "📝" + }, + "identifier" : "3542086084234d14d5e94041c7c2915b", + "isTemplate" : false, + "language" : "swift", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Copy Meeting Summary", + "updatedAt" : "2025-09-05T10:08:41-05:00" + }, { "authors" : null, "createdAt" : "2020-09-30T12:56:01+01:00", @@ -6788,7 +7284,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Shut Down", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -6816,7 +7312,35 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Toggle Battery Charging", - "updatedAt" : "2022-08-18T12:53:36+00:00" + "updatedAt" : "2022-08-18T12:53:36Z" + }, + { + "authors" : [ + { + "name" : "AlexGadd", + "url" : "https:\/\/raycast.com\/AlexGadd" + } + ], + "createdAt" : "2025-10-25T01:03:45+13:00", + "currentDirectoryPath" : null, + "description" : "Takes your clipboard then types each character in the clipboard", + "filename" : "paste-clipboard.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "📋" + }, + "identifier" : "b6b6c23a4d07188552b17cba337131f8", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Type Clipboard in Search", + "path" : "system\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Type Clipboard", + "updatedAt" : "2025-10-24T12:04:57Z" }, { "authors" : null, @@ -6839,7 +7363,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Sleep", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -7017,6 +7541,41 @@ } ] }, + { + "name" : "Magic Keyboard Switcher", + "path" : "magic-keyboard-switcher", + "readme" : "system\/magic-keyboard-switcher\/README.md", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "blastik", + "url" : "https:\/\/github.com\/blastik" + } + ], + "createdAt" : "2025-09-24T17:50:16+02:00", + "currentDirectoryPath" : null, + "description" : "Switch a single magic keyboard between computers", + "filename" : "magic-keyboard-switcher.template.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "images\/logo.png" + }, + "identifier" : "ebd6d04790272dd639e870be745a66db", + "isTemplate" : true, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/magic-keyboard-switcher\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Magic Keyboard switcher", + "updatedAt" : "2025-09-24T17:59:07+02:00" + } + ] + }, { "name" : "Vpnutil", "path" : "vpnutil", @@ -7221,7 +7780,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Headphones Battery Level", - "updatedAt" : "2023-02-03T07:51:37+00:00" + "updatedAt" : "2023-02-03T07:51:37Z" }, { "authors" : [ @@ -7279,6 +7838,34 @@ "title" : "Reload CoreAudio", "updatedAt" : "2021-04-16T19:18:39+03:00" }, + { + "authors" : [ + { + "name" : "Annie Ma", + "url" : "http:\/\/www.anniema.co\/" + } + ], + "createdAt" : "2024-01-26T14:05:08-08:00", + "currentDirectoryPath" : null, + "description" : "Toggles notification sounds.", + "filename" : "toggle-mute-notification-sounds.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🔔" + }, + "identifier" : "a3b32fd55c23706603f24da4c74fd8d0", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "System", + "path" : "system\/audio\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Toggle Mute Notifcation Sounds", + "updatedAt" : "2024-02-01T16:53:25Z" + }, { "authors" : [ { @@ -7370,7 +7957,7 @@ "url" : "https:\/\/github.com\/matthewmorek" } ], - "createdAt" : "2021-02-18T12:31:04+00:00", + "createdAt" : "2021-02-18T12:31:04Z", "currentDirectoryPath" : null, "description" : "Toggles microphone.", "filename" : "toggle-mic.applescript", @@ -7379,7 +7966,7 @@ "dark" : null, "light" : "🎙" }, - "identifier" : "43754d5c0731006f9670e4d26e696fbd", + "identifier" : "f429f9a5cb87014a029d0a64cc5ce0f5", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -7395,6 +7982,87 @@ } ] }, + { + "name" : "Dashboards", + "path" : "dashboards", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Sam Wright", + "url" : "https:\/\/raycast.com\/samywamy10" + } + ], + "createdAt" : "2024-04-11T17:21:31+10:00", + "currentDirectoryPath" : null, + "description" : "Runs an iPerf Speed Test.", + "filename" : "iperf-speed-test.template.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "💾" + }, + "identifier" : "804d7f7d15474c0b6f5798afa59badee", + "isTemplate" : true, + "language" : "bash", + "mode" : "inline", + "needsConfirmation" : null, + "packageName" : "iPerf", + "path" : "dashboards\/", + "refreshTime" : "1h", + "schemaVersion" : 1, + "title" : "Speed Test", + "updatedAt" : "2024-04-11T07:23:05Z" + } + ] + }, + { + "name" : "Ai", + "path" : "ai", + "scriptCommands" : [ + + ], + "subGroups" : [ + { + "name" : "Gemini", + "path" : "gemini", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Est7", + "url" : "https:\/\/github.com\/est7" + }, + { + "name" : "Nimo Beeren", + "url" : "https:\/\/github.com\/nimobeeren" + } + ], + "createdAt" : "2025-04-24T11:38:46+08:00", + "currentDirectoryPath" : null, + "description" : "Open Gemini in Chrome browser and submit a prompt with optional selected text as context", + "filename" : "gemini.js", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : ".\/images\/icon-gemini.svg" + }, + "identifier" : "2a9c8b6698663cc8834ace7501bc9bec", + "isTemplate" : false, + "language" : "node", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Gemini", + "path" : "ai\/gemini\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Ask Gemini", + "updatedAt" : "2025-05-13T08:32:11Z" + } + ] + } + ] + }, { "name" : "Developer Utils", "path" : "developer-utils", @@ -7420,7 +8088,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Escape String for Shell", - "updatedAt" : "2020-12-09T22:19:19+00:00" + "updatedAt" : "2020-12-09T22:19:19Z" }, { "authors" : [ @@ -7476,7 +8144,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Count Characters Bash", - "updatedAt" : "2021-06-23T07:27:53+00:00" + "updatedAt" : "2021-06-23T07:27:53Z" }, { "authors" : [ @@ -7532,7 +8200,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Transform Case", - "updatedAt" : "2021-01-24T20:18:06+00:00" + "updatedAt" : "2021-01-24T20:18:06Z" }, { "authors" : [ @@ -7606,7 +8274,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Encode Base64", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, @@ -7629,7 +8297,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Decode JWT", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -7666,7 +8334,7 @@ "url" : "https:\/\/github.com\/jesse-c" } ], - "createdAt" : "2021-01-04T23:05:52+00:00", + "createdAt" : "2021-01-04T23:05:52Z", "currentDirectoryPath" : null, "description" : "Check if a website is up", "filename" : "is-it-up.sh", @@ -7675,7 +8343,7 @@ "dark" : null, "light" : "🌐" }, - "identifier" : "eb23a85cca77120f511f36bba2ff520b", + "identifier" : "2889ef24ae8d92015ae9500dfc3e704a", "isTemplate" : false, "language" : "bash", "mode" : "compact", @@ -7687,6 +8355,34 @@ "title" : "Is It Up?", "updatedAt" : "2023-02-21T22:56:29-05:00" }, + { + "authors" : [ + { + "name" : "Andrii Barabash", + "url" : "https:\/\/github.com\/AndriiBarabash" + } + ], + "createdAt" : "2025-09-27T20:40:28+02:00", + "currentDirectoryPath" : null, + "description" : "Toggles an SSH SOCKS proxy tunnel on and off.", + "filename" : "toggle_ssh_proxy_tunnel.template.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🔒" + }, + "identifier" : "aae74278107ffa5f34b3733eb2c8a813", + "isTemplate" : true, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Developer Utilities", + "path" : "developer-utils\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Toggle SSH SOCKS Tunnel", + "updatedAt" : "2025-09-29T13:44:50Z" + }, { "authors" : [ { @@ -7885,7 +8581,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Flutter Create Project", - "updatedAt" : "2021-08-17T16:40:16+00:00" + "updatedAt" : "2021-08-17T16:40:16Z" }, { "authors" : [ @@ -8197,7 +8893,7 @@ "url" : "https:\/\/github.com\/doktor500" } ], - "createdAt" : "2021-12-20T12:46:48+00:00", + "createdAt" : "2021-12-20T12:46:48Z", "currentDirectoryPath" : null, "description" : "Generates a ULID and copies it to the clipboard.", "filename" : "generate-ulid.sh", @@ -8206,7 +8902,7 @@ "dark" : null, "light" : "💻" }, - "identifier" : "c3621c704381ac57b354d23166b7b287", + "identifier" : "17aae21d1f94cccc5275cb681e873b28", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -8216,7 +8912,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Generate ULID", - "updatedAt" : "2021-12-20T12:48:58+00:00" + "updatedAt" : "2021-12-20T12:48:58Z" }, { "authors" : [ @@ -8267,7 +8963,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Generate UUID", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -8304,7 +9000,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-02-16T22:31:57+00:00", + "createdAt" : "2021-02-16T22:31:57Z", "currentDirectoryPath" : null, "description" : "Create beautiful images of your code with https:\/\/ray.so", "filename" : "create-image-from-code.sh", @@ -8313,7 +9009,7 @@ "dark" : null, "light" : ".\/images\/ray-so.png" }, - "identifier" : "8ddb848532c729215e01d0d3fa1aeb6a", + "identifier" : "88ae1869a8a7487db63e8ff43fb3db43", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -8323,7 +9019,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Create Image from Code", - "updatedAt" : "2021-12-07T11:53:06+07:00" + "updatedAt" : "2024-03-12T21:01:55+07:00" }, { "authors" : [ @@ -8402,7 +9098,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Lorem Ipsum", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -8430,7 +9126,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Print TLDR doc", - "updatedAt" : "2021-03-16T06:39:37+00:00" + "updatedAt" : "2021-03-16T06:39:37Z" }, { "authors" : [ @@ -8486,7 +9182,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Error Info", - "updatedAt" : "2021-03-01T16:54:23+00:00" + "updatedAt" : "2021-03-01T16:54:23Z" }, { "authors" : [ @@ -8514,7 +9210,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Join Clipboard Lines by Delimiter", - "updatedAt" : "2023-09-05T15:24:46+00:00" + "updatedAt" : "2023-09-05T15:24:46Z" }, { "authors" : [ @@ -8544,6 +9240,34 @@ "title" : "Base64 Encode", "updatedAt" : "2021-03-26T10:57:36+01:00" }, + { + "authors" : [ + { + "name" : "Annie Ma", + "url" : "http:\/\/www.anniema.co\/" + } + ], + "createdAt" : "2024-01-26T02:19:25-07:00", + "currentDirectoryPath" : null, + "description" : "This script deletes the line at cursor position.", + "filename" : "delete-current-line.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "⌨️" + }, + "identifier" : "155fc5e8e485cc9d9f7a08797ea68597", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Developer Utilities", + "path" : "developer-utils\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Delete Current Line", + "updatedAt" : "2024-01-26T09:21:48Z" + }, { "authors" : [ { @@ -8570,7 +9294,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Strong Password Generator", - "updatedAt" : "2021-01-24T20:15:25+00:00" + "updatedAt" : "2021-01-24T20:15:25Z" }, { "authors" : null, @@ -8593,7 +9317,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Decode Base64", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -8649,7 +9373,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Copy Current Epoch Unix Timestamp", - "updatedAt" : "2021-07-29T11:41:55+00:00" + "updatedAt" : "2021-07-29T11:41:55Z" }, { "authors" : [ @@ -8728,7 +9452,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Prettify JSON", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -8756,7 +9480,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Deep Link", - "updatedAt" : "2021-09-01T13:11:06+00:00" + "updatedAt" : "2021-09-01T13:11:06Z" }, { "authors" : [ @@ -8807,7 +9531,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Clear Derived Data", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -8891,7 +9615,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Trim Git Commit Hash", - "updatedAt" : "2021-07-19T14:40:00+00:00" + "updatedAt" : "2021-07-19T14:40:00Z" }, { "authors" : [ @@ -9155,7 +9879,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Clean", - "updatedAt" : "2021-06-12T17:33:18+00:00" + "updatedAt" : "2021-06-12T17:33:18Z" }, { "authors" : [ @@ -9661,7 +10385,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Doctor", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" }, { "authors" : [ @@ -9689,7 +10413,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Outdated List", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" }, { "authors" : [ @@ -9745,7 +10469,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Start Service", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" }, { "authors" : [ @@ -9773,7 +10497,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "List", - "updatedAt" : "2021-03-19T16:42:53+00:00" + "updatedAt" : "2021-03-19T16:42:53Z" }, { "authors" : [ @@ -9801,7 +10525,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Upgrade", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" }, { "authors" : [ @@ -9829,7 +10553,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Stop Service", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" }, { "authors" : [ @@ -9857,7 +10581,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Update", - "updatedAt" : "2021-03-19T16:42:53+00:00" + "updatedAt" : "2021-03-19T16:42:53Z" }, { "authors" : [ @@ -9885,7 +10609,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Restart Service", - "updatedAt" : "2021-09-07T10:00:18+00:00" + "updatedAt" : "2021-09-07T10:00:18Z" }, { "authors" : [ @@ -9941,7 +10665,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Services List", - "updatedAt" : "2021-02-25T00:34:23+00:00" + "updatedAt" : "2021-02-25T00:34:23Z" } ] }, @@ -9984,7 +10708,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-11-27T10:40:24+00:00", + "createdAt" : "2020-11-27T10:40:24Z", "currentDirectoryPath" : null, "description" : "Show statistics of your GitHub repository.", "filename" : "github-repository-stars.template.rb", @@ -9993,7 +10717,7 @@ "dark" : null, "light" : "⭐️" }, - "identifier" : "f7f43950b26ed37ae90938e7f4a0e0ad", + "identifier" : "bda99211bf65f1b5219db20e1b8f1b3d", "isTemplate" : true, "language" : "ruby", "mode" : "inline", @@ -10003,7 +10727,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "Repository Statistics", - "updatedAt" : "2020-11-27T10:40:24+00:00" + "updatedAt" : "2020-11-27T10:40:24Z" }, { "authors" : [ @@ -10059,7 +10783,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "Repository Statistics", - "updatedAt" : "2023-07-25T00:17:33+00:00" + "updatedAt" : "2023-07-25T00:17:33Z" }, { "authors" : [ @@ -10096,7 +10820,7 @@ "url" : "https:\/\/github.com\/FSipiano" } ], - "createdAt" : "2021-03-17T17:31:38+00:00", + "createdAt" : "2021-03-17T17:31:38Z", "currentDirectoryPath" : null, "description" : "Display number of open pull requests", "filename" : "github-open-pull-requests.template.rb", @@ -10105,7 +10829,7 @@ "dark" : "images\/github-logo-iconDark.png", "light" : "images\/github-logo.png" }, - "identifier" : "94eaf509839a2abb4c0f38fe84dac1fb", + "identifier" : "07da15e048906bd7b5ee0275044649f8", "isTemplate" : true, "language" : "ruby", "mode" : "inline", @@ -10115,7 +10839,7 @@ "refreshTime" : "5m", "schemaVersion" : 1, "title" : "Open Pull Requests", - "updatedAt" : "2021-03-18T11:30:06+00:00" + "updatedAt" : "2021-03-18T11:30:06Z" }, { "authors" : [ @@ -10124,7 +10848,7 @@ "url" : "https:\/\/github.com\/FSipiano" } ], - "createdAt" : "2021-03-17T17:31:38+00:00", + "createdAt" : "2021-03-17T17:31:38Z", "currentDirectoryPath" : null, "description" : "Display (detailed) GitHub pull requests", "filename" : "github-open-pull-requests-details.template.rb", @@ -10133,7 +10857,7 @@ "dark" : "images\/github-logo-iconDark.png", "light" : "images\/github-logo.png" }, - "identifier" : "02e903f7524e97478f2c5c31ee143834", + "identifier" : "d01e8e7a75307d40d48797d8ec6041b8", "isTemplate" : true, "language" : "ruby", "mode" : "fullOutput", @@ -10152,7 +10876,7 @@ "url" : "https:\/\/github.com\/FSipiano" } ], - "createdAt" : "2021-03-17T17:31:38+00:00", + "createdAt" : "2021-03-17T17:31:38Z", "currentDirectoryPath" : null, "description" : "Open your GitHub pull requests page", "filename" : "github-open-pull-requests-page.sh", @@ -10161,7 +10885,7 @@ "dark" : "images\/github-logo-iconDark.png", "light" : "images\/github-logo.png" }, - "identifier" : "063d1b26dd9a78237a832b439845c4c0", + "identifier" : "1568c128b1e4e3897c8f2a65bb14d551", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -10171,7 +10895,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Pull Requests page", - "updatedAt" : "2021-03-18T11:30:06+00:00" + "updatedAt" : "2021-03-18T11:30:06Z" }, { "authors" : [ @@ -10180,7 +10904,7 @@ "url" : "https:\/\/github.com\/vpicone" } ], - "createdAt" : "2021-03-17T17:31:38+00:00", + "createdAt" : "2021-03-17T17:31:38Z", "currentDirectoryPath" : null, "description" : "Display number of Pull Requests requesting your review", "filename" : "github-review-requests.template.rb", @@ -10189,7 +10913,7 @@ "dark" : "images\/github-logo-iconDark.png", "light" : "images\/github-logo.png" }, - "identifier" : "61586867ab7b6b2efa596bce302ed064", + "identifier" : "d1fc531c2aa8d1bac53ac6f630c1ca90", "isTemplate" : true, "language" : "ruby", "mode" : "inline", @@ -10263,6 +10987,34 @@ "name" : "Aws", "path" : "aws", "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Chris Cook", + "url" : "https:\/\/github.com\/zirkelc" + } + ], + "createdAt" : "2024-06-14T14:31:44+02:00", + "currentDirectoryPath" : null, + "description" : "Download from Amazon S3 via URL", + "filename" : "amazon-s3-download.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "images\/amazon-s3.png" + }, + "identifier" : "b4dd5f3fe1c6dd1b9b44fc9f0fe88364", + "isTemplate" : false, + "language" : "bash", + "mode" : "fullOutput", + "needsConfirmation" : null, + "packageName" : "AWS", + "path" : "developer-utils\/aws\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "S3 Download", + "updatedAt" : "2024-09-17T11:36:59+02:00" + }, { "authors" : [ { @@ -10289,7 +11041,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Single Sign-On", - "updatedAt" : "2021-12-19T15:22:29+00:00" + "updatedAt" : "2021-12-19T15:22:29Z" }, { "authors" : [ @@ -10317,7 +11069,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Find AWS Region by IP", - "updatedAt" : "2021-01-04T13:34:28+00:00" + "updatedAt" : "2021-01-04T13:34:28Z" } ] }, @@ -10332,7 +11084,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-12-02T09:13:05+00:00", + "createdAt" : "2020-12-02T09:13:05Z", "currentDirectoryPath" : null, "description" : "Show unresolved issues of the last 24 hours from Sentry.", "filename" : "sentry-unresolved-issues.template.py", @@ -10341,7 +11093,7 @@ "dark" : "images\/sentry-dark.png", "light" : "images\/sentry.png" }, - "identifier" : "ad03c85a59ef25bccd103067f7034697", + "identifier" : "d965f2571912eb46a116071bd5a25111", "isTemplate" : true, "language" : "python", "mode" : "inline", @@ -10351,7 +11103,7 @@ "refreshTime" : "1h", "schemaVersion" : 1, "title" : "Unresolved Issues", - "updatedAt" : "2020-12-02T09:13:05+00:00" + "updatedAt" : "2020-12-02T09:13:05Z" }, { "authors" : [ @@ -10364,7 +11116,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-12-02T09:13:05+00:00", + "createdAt" : "2020-12-02T09:13:05Z", "currentDirectoryPath" : null, "description" : "Show unresolved issues in the last 24 hours (by project) from Sentry.", "filename" : "sentry-unresolved-issues-by-project.template.py", @@ -10373,7 +11125,7 @@ "dark" : "images\/sentry-dark.png", "light" : "images\/sentry.png" }, - "identifier" : "0b50b081414f73ef7e75e1f061bf9bd2", + "identifier" : "cd9dc8603b5433fe83c15dd43785add6", "isTemplate" : true, "language" : "python", "mode" : "fullOutput", @@ -10837,7 +11589,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Let Me Google That", - "updatedAt" : "2023-06-27T09:57:07+00:00" + "updatedAt" : "2023-06-27T09:57:07Z" }, { "authors" : [ @@ -10902,7 +11654,7 @@ "url" : "https:\/\/github.com\/PitNikola" } ], - "createdAt" : "2021-03-14T20:36:28+00:00", + "createdAt" : "2021-03-14T20:36:28Z", "currentDirectoryPath" : null, "description" : "Share secret securely using https:\/\/share.doppler.com\/.", "filename" : "share-secret-doppler.py", @@ -10911,7 +11663,7 @@ "dark" : null, "light" : "images\/doppler-logo.png" }, - "identifier" : "7083bf08edba754d9457b2d289de18be", + "identifier" : "348009c977b2cf35d589b7723f89b8ed", "isTemplate" : false, "language" : "python", "mode" : "silent", @@ -10921,7 +11673,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Share Secret from Clipboard", - "updatedAt" : "2021-03-14T20:36:28+00:00" + "updatedAt" : "2021-03-14T20:36:28Z" }, { "authors" : [ @@ -11021,7 +11773,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open Most Recent Email", - "updatedAt" : "2023-02-03T00:48:14+00:00" + "updatedAt" : "2023-02-03T00:48:14Z" } ] }, @@ -11084,7 +11836,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Generate Unique Address", - "updatedAt" : "2022-02-10T09:48:48+01:00" + "updatedAt" : "2024-07-14T22:23:53+08:00" } ] }, @@ -11152,7 +11904,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Leave Meeting", - "updatedAt" : "2021-05-03T09:54:17+00:00" + "updatedAt" : "2021-05-03T09:54:17Z" }, { "authors" : [ @@ -11180,7 +11932,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Rename Profile", - "updatedAt" : "2023-03-31T03:48:28+00:00" + "updatedAt" : "2023-03-31T03:48:28Z" }, { "authors" : [ @@ -11315,7 +12067,7 @@ "url" : "https:\/\/github.com\/samching" } ], - "createdAt" : "2020-11-26T13:39:55+00:00", + "createdAt" : "2020-11-26T13:39:55Z", "currentDirectoryPath" : null, "description" : "Clear DND Status in Slack", "filename" : "clear-slack-DND-status.sh", @@ -11324,7 +12076,7 @@ "dark" : null, "light" : "images\/slack-logo.png" }, - "identifier" : "560ddd5136e037faafb5fbef3ecc1e10", + "identifier" : "05872fc3bb67f93dd979fe0f25b06545", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -11343,7 +12095,7 @@ "url" : "https:\/\/github.com\/zebapy" } ], - "createdAt" : "2020-11-26T13:39:55+00:00", + "createdAt" : "2020-11-26T13:39:55Z", "currentDirectoryPath" : null, "description" : "Create a Slack reminder", "filename" : "add-slack-reminder.template.sh", @@ -11352,7 +12104,7 @@ "dark" : null, "light" : "⏰" }, - "identifier" : "d320c2d35cc64553ce1a2db1ab80937c", + "identifier" : "8f2bf69938e8df32b08bf016b259d993", "isTemplate" : true, "language" : "bash", "mode" : "silent", @@ -11362,7 +12114,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Add Reminder", - "updatedAt" : "2022-01-15T18:23:42+00:00" + "updatedAt" : "2022-01-15T18:23:42Z" }, { "authors" : [ @@ -11399,7 +12151,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-11-26T13:39:55+00:00", + "createdAt" : "2020-11-26T13:39:55Z", "currentDirectoryPath" : null, "description" : "Clear your status in Slack.", "filename" : "clear-slack-status.template.sh", @@ -11408,7 +12160,7 @@ "dark" : null, "light" : "🧼" }, - "identifier" : "42d6bf1b6d5ba4c4cf4d3dbfbd11f120", + "identifier" : "17d4ffd95aaa50ac53208639c1807969", "isTemplate" : true, "language" : "bash", "mode" : "silent", @@ -11418,7 +12170,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Clear Status", - "updatedAt" : "2020-11-26T13:44:17+00:00" + "updatedAt" : "2020-11-26T13:44:17Z" }, { "authors" : [ @@ -11502,7 +12254,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Send Message in Channel", - "updatedAt" : "2021-05-03T14:30:44+00:00" + "updatedAt" : "2021-05-03T14:30:44Z" }, { "authors" : [ @@ -11511,7 +12263,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-11-26T13:39:55+00:00", + "createdAt" : "2020-11-26T13:39:55Z", "currentDirectoryPath" : null, "description" : "Set your status in Slack.", "filename" : "set-slack-status.template.sh", @@ -11520,7 +12272,7 @@ "dark" : null, "light" : "☕️" }, - "identifier" : "a9c185aec50f521d19ed1d47aab578a5", + "identifier" : "57e23350fff64274696cfe28cce9d8ee", "isTemplate" : true, "language" : "bash", "mode" : "silent", @@ -11530,7 +12282,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Set Status to Coffee", - "updatedAt" : "2020-11-26T18:24:36+00:00" + "updatedAt" : "2020-11-26T18:24:36Z" }, { "authors" : [ @@ -11541,14 +12293,42 @@ ], "createdAt" : "2020-11-29T18:11:58-05:00", "currentDirectoryPath" : null, - "description" : "Set your DND status in Slack", - "filename" : "set-slack-DND-status.sh", - "hasArguments" : true, + "description" : "Set your DND status in Slack", + "filename" : "set-slack-DND-status.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "images\/slack-logo.png" + }, + "identifier" : "2b163126ade42de031d2e7ebe0a63c00", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Slack", + "path" : "communication\/slack\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Set DND Status", + "updatedAt" : "2021-03-04T08:32:41+01:00" + }, + { + "authors" : [ + { + "name" : "Cody Carrell", + "url" : "https:\/\/raycast.com\/sourcecody" + } + ], + "createdAt" : "2024-03-10T17:10:31-04:00", + "currentDirectoryPath" : null, + "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.", + "filename" : "slack-dev-mode.sh", + "hasArguments" : false, "icon" : { "dark" : null, "light" : "images\/slack-logo.png" }, - "identifier" : "2b163126ade42de031d2e7ebe0a63c00", + "identifier" : "7c43ddc9b86f860583abf7ea64a4d324", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -11557,8 +12337,8 @@ "path" : "communication\/slack\/", "refreshTime" : null, "schemaVersion" : 1, - "title" : "Set DND Status", - "updatedAt" : "2021-03-04T08:32:41+01:00" + "title" : "Launch Dev Mode", + "updatedAt" : "2024-03-10T21:12:02Z" } ] }, @@ -11711,6 +12491,34 @@ "schemaVersion" : 1, "title" : "Search and Copy First Related Emoji", "updatedAt" : "2020-11-28T12:02:29-05:00" + }, + { + "authors" : [ + { + "name" : "Tomohiro Nishimura", + "url" : "https:\/\/github.com\/Sixeight" + } + ], + "createdAt" : "2025-01-23T18:29:53+09:00", + "currentDirectoryPath" : null, + "description" : "Copy a random emoji to the clipboard.", + "filename" : "random-emoji.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🎲" + }, + "identifier" : "52479cec0740642d40a8902ee5efa1fe", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Emojis", + "path" : "communication\/emojis\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Random Emoji", + "updatedAt" : "2025-03-25T19:27:06+09:00" } ] }, @@ -11744,7 +12552,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Gmail", - "updatedAt" : "2020-12-07T20:12:02+00:00" + "updatedAt" : "2020-12-07T20:12:02Z" } ] } @@ -11808,7 +12616,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Bilibili", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -11845,7 +12653,7 @@ "url" : "https:\/\/github.com\/andreiborisov" } ], - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "kinopoisk.sh", @@ -11854,7 +12662,7 @@ "dark" : null, "light" : "images\/kinopoisk.png" }, - "identifier" : "b9765abdca2e2f4913f25f68e9d1cb34", + "identifier" : "3035530c75101abbeb24a0a27b0ed685", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -11901,7 +12709,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-24T21:18:01+00:00", + "createdAt" : "2020-11-24T21:18:01Z", "currentDirectoryPath" : null, "description" : null, "filename" : "giphy.sh", @@ -11910,7 +12718,7 @@ "dark" : null, "light" : "images\/giphy.png" }, - "identifier" : "27a2493face41bf1d80793deb1771797", + "identifier" : "3613b602176200bab2cb81cf3e3a31fc", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -11924,7 +12732,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "yandex-search.sh", @@ -11933,7 +12741,7 @@ "dark" : null, "light" : "images\/yandex.png" }, - "identifier" : "f938027f6f3f823928e80d4527804d25", + "identifier" : "14ac258936b541c8b080afd875c888e9", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12064,7 +12872,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-24T21:18:01+00:00", + "createdAt" : "2020-11-24T21:18:01Z", "currentDirectoryPath" : null, "description" : null, "filename" : "njt.sh", @@ -12073,7 +12881,7 @@ "dark" : null, "light" : "🐸" }, - "identifier" : "7b80efcaecafbf7092d3bd0292112021", + "identifier" : "bf292fd5c6a6daeb7cb500aed47c97ce", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12087,7 +12895,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T21:13:15+00:00", + "createdAt" : "2020-11-19T21:13:15Z", "currentDirectoryPath" : null, "description" : null, "filename" : "npmjs.sh", @@ -12096,7 +12904,7 @@ "dark" : null, "light" : "images\/npmjs.png" }, - "identifier" : "b8c51cd5f736849629df290dcf48e627", + "identifier" : "1c60d434bfa470adfa9e5c4fad31a29a", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12134,7 +12942,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Go Package Documentation", - "updatedAt" : "2021-01-18T16:44:26+00:00" + "updatedAt" : "2021-01-18T16:44:26Z" }, { "authors" : [ @@ -12143,7 +12951,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-19T21:13:15+00:00", + "createdAt" : "2020-11-19T21:13:15Z", "currentDirectoryPath" : null, "description" : null, "filename" : "repo.sh", @@ -12152,7 +12960,7 @@ "dark" : null, "light" : "📦" }, - "identifier" : "327dff4d0f970f6709bed4f17955b925", + "identifier" : "fd304aeeb3b07086af4d259dc6bd8a44", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12190,7 +12998,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Baidu", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -12222,7 +13030,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "twitter-search.sh", @@ -12231,7 +13039,7 @@ "dark" : null, "light" : "images\/twitter.png" }, - "identifier" : "c87cc4be86c046f70f68ca1cd2223258", + "identifier" : "5325fd3de931054a254082b1ce061ec9", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12269,7 +13077,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Zhihu", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -12353,7 +13161,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Pub.dev Search", - "updatedAt" : "2021-05-31T09:21:31+00:00" + "updatedAt" : "2021-05-31T09:21:31Z" }, { "authors" : [ @@ -12385,7 +13193,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "amazon.sh", @@ -12394,7 +13202,7 @@ "dark" : null, "light" : "images\/amazon.png" }, - "identifier" : "cc7830e2a1dfe295301d9b835e584cdf", + "identifier" : "7ca50f13f43b953f6d587c52f61005a9", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12469,7 +13277,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-24T21:18:01+00:00", + "createdAt" : "2020-11-24T21:18:01Z", "currentDirectoryPath" : null, "description" : null, "filename" : "unfurl.sh", @@ -12478,7 +13286,7 @@ "dark" : null, "light" : "🔗" }, - "identifier" : "ee82cecb96af85116fdc9b7208b77767", + "identifier" : "19f9cd5c3c78c5008f84417d01f14dee", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12516,7 +13324,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Wikipedia", - "updatedAt" : "2021-02-16T16:00:45+00:00" + "updatedAt" : "2021-02-16T16:00:45Z" }, { "authors" : [ @@ -12600,7 +13408,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search OpenSecrets.org", - "updatedAt" : "2023-04-24T06:57:26+00:00" + "updatedAt" : "2023-04-24T06:57:26Z" }, { "authors" : [ @@ -12637,7 +13445,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-24T21:18:01+00:00", + "createdAt" : "2020-11-24T21:18:01Z", "currentDirectoryPath" : null, "description" : null, "filename" : "caniuse.sh", @@ -12646,7 +13454,7 @@ "dark" : null, "light" : "❓" }, - "identifier" : "7c4f744b2140f5b80f7e15e0ebe6a6dd", + "identifier" : "d57b60f7bec95ebaf6ecd985d539eb33", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12721,7 +13529,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-19T21:13:15+00:00", + "createdAt" : "2020-11-19T21:13:15Z", "currentDirectoryPath" : null, "description" : null, "filename" : "npms.sh", @@ -12730,7 +13538,7 @@ "dark" : null, "light" : "images\/npms.png" }, - "identifier" : "190c26fa07258eca73549fde0318804f", + "identifier" : "c50c4272f0b39efd127d169968b96a9c", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12800,7 +13608,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "grep-app-search.sh", @@ -12809,7 +13617,7 @@ "dark" : null, "light" : "https:\/\/grep.app\/favicon.ico" }, - "identifier" : "b5ca621aeb52f48ffe1ffe30a8bb9373", + "identifier" : "3c1b4b1b7f98114881247bd9e9c44166", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12935,7 +13743,7 @@ }, { "authors" : null, - "createdAt" : "2021-02-26T19:18:23+00:00", + "createdAt" : "2021-02-26T19:18:23Z", "currentDirectoryPath" : null, "description" : null, "filename" : "search-swift-github.sh", @@ -12944,7 +13752,7 @@ "dark" : null, "light" : ".\/images\/swift.png" }, - "identifier" : "819a4731b5656b3636b32652c241a507", + "identifier" : "ded067c8f231e019897a58bd2b5bb30c", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -12954,7 +13762,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Swift Code", - "updatedAt" : "2021-02-26T19:18:23+00:00" + "updatedAt" : "2021-02-26T19:18:23Z" }, { "authors" : [ @@ -12986,7 +13794,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "duck-duck-go.sh", @@ -12995,7 +13803,7 @@ "dark" : null, "light" : "images\/duck-duck-go.png" }, - "identifier" : "e780f29955995de21a5ed8d42a7dc669", + "identifier" : "137568a154ee81cb2a1ca68aa4bbfd0d", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13005,7 +13813,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in DuckDuckGo", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -13061,11 +13869,11 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search IMDB", - "updatedAt" : "2021-02-21T22:06:55+00:00" + "updatedAt" : "2021-02-21T22:06:55Z" }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "youtube.sh", @@ -13074,7 +13882,7 @@ "dark" : null, "light" : "images\/youtube.png" }, - "identifier" : "5e89e0c4d9ffddf0b3eea566f14773ca", + "identifier" : "aed6056723b8ff63788a8cec2fdfa88a", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13084,7 +13892,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in YouTube", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -13093,7 +13901,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-19T21:13:15+00:00", + "createdAt" : "2020-11-19T21:13:15Z", "currentDirectoryPath" : null, "description" : null, "filename" : "bundlephobia.sh", @@ -13102,7 +13910,7 @@ "dark" : null, "light" : "📦" }, - "identifier" : "0b092bce570e52328d6bcbe0163ae216", + "identifier" : "be1cdb15aaca06deb525512db504e89a", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13144,7 +13952,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "crunchbase.sh", @@ -13153,7 +13961,7 @@ "dark" : null, "light" : "images\/crunchbase.png" }, - "identifier" : "0f4669c88378d536451227114c6c6173", + "identifier" : "31c55bcec6408a3702a8f834a2b6457e", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13167,7 +13975,7 @@ }, { "authors" : null, - "createdAt" : "2020-11-19T15:07:52+00:00", + "createdAt" : "2020-11-19T15:07:52Z", "currentDirectoryPath" : null, "description" : null, "filename" : "google-search.sh", @@ -13176,7 +13984,7 @@ "dark" : null, "light" : "images\/google.png" }, - "identifier" : "57aaa2728f3a23af892dfd7364e122d9", + "identifier" : "892301cd7b236406f6efc128ae07c4e3", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13186,7 +13994,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Google", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -13195,7 +14003,7 @@ "url" : "https:\/\/zander.wtf" } ], - "createdAt" : "2020-11-24T21:18:01+00:00", + "createdAt" : "2020-11-24T21:18:01Z", "currentDirectoryPath" : null, "description" : null, "filename" : "wayback-machine.sh", @@ -13204,7 +14012,7 @@ "dark" : null, "light" : "images\/ia-logo.jpg" }, - "identifier" : "0dfb3e1ec84b397ccfec9f4a1c0a808d", + "identifier" : "3438cbb2bcc47a029bd463eb8229b673", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13270,11 +14078,11 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Find Email Address With Hunter", - "updatedAt" : "2021-04-09T11:25:34+00:00" + "updatedAt" : "2021-04-09T11:25:34Z" }, { "authors" : null, - "createdAt" : "2021-02-19T09:10:21+00:00", + "createdAt" : "2021-02-19T09:10:21Z", "currentDirectoryPath" : null, "description" : null, "filename" : "google-maps.sh", @@ -13283,7 +14091,7 @@ "dark" : null, "light" : "images\/google-map.png" }, - "identifier" : "43ab852f28e3b03e0e66fe5309f259b1", + "identifier" : "8a71bb6b31307d65cf23a94c619c9971", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13293,7 +14101,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Google Maps", - "updatedAt" : "2022-11-17T10:35:57+01:00" + "updatedAt" : "2024-12-05T12:33:50+01:00" }, { "authors" : [ @@ -13304,7 +14112,7 @@ ], "createdAt" : "2021-07-13T21:10:54-07:00", "currentDirectoryPath" : null, - "description" : "Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https:\/\/scriptcommands.com).", + "description" : "Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https:\/\/scriptcommands.alexandru.so).", "filename" : "search-script-command-marketplace.sh", "hasArguments" : true, "icon" : { @@ -13321,7 +14129,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Script Command", - "updatedAt" : "2021-07-13T21:10:54-07:00" + "updatedAt" : "2024-12-04T11:52:04+01:00" }, { "authors" : [ @@ -13377,7 +14185,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Genre in Chosic", - "updatedAt" : "2021-02-12T11:28:52+00:00" + "updatedAt" : "2021-02-12T11:28:52Z" }, { "authors" : [ @@ -13386,7 +14194,7 @@ "url" : "https:\/\/github.com\/traynham" } ], - "createdAt" : "2020-12-07T19:59:12+00:00", + "createdAt" : "2020-12-07T19:59:12Z", "currentDirectoryPath" : null, "description" : "Search in MDN (Mozilla) Docs by topic", "filename" : "mdn.sh", @@ -13395,7 +14203,7 @@ "dark" : "images\/mdn_dark.png", "light" : "images\/mdn_light.png" }, - "identifier" : "cf35df9256be2997e18dc4e853f14213", + "identifier" : "991511e9548f80fc5f5dfa70172df0c9", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13433,7 +14241,35 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search LinkedIn", - "updatedAt" : "2021-01-24T20:18:06+00:00" + "updatedAt" : "2021-01-24T20:18:06Z" + }, + { + "authors" : [ + { + "name" : "lemorage", + "url" : "https:\/\/raycast.com\/lemorage" + } + ], + "createdAt" : "2024-09-19T08:42:28+08:00", + "currentDirectoryPath" : null, + "description" : "Search Rust documentation", + "filename" : "search-rust-docs.sh", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "images\/rust.png" + }, + "identifier" : "2f4472d80148aaadabf915529d6f68c9", + "isTemplate" : false, + "language" : "bash", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Web Searches", + "path" : "web-searches\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Search Rust Documentation", + "updatedAt" : "2024-09-19T08:42:28+08:00" }, { "authors" : [ @@ -13461,7 +14297,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search in Taobao", - "updatedAt" : "2021-01-05T12:30:16+00:00" + "updatedAt" : "2021-01-05T12:30:16Z" }, { "authors" : [ @@ -13859,6 +14695,34 @@ "schemaVersion" : 1, "title" : "Run Shell Command", "updatedAt" : "2021-02-02T11:58:56+03:00" + }, + { + "authors" : [ + { + "name" : "sunrisewestern", + "url" : "https:\/\/github.com\/sunrisewestern" + } + ], + "createdAt" : "2024-05-23T03:31:30-04:00", + "currentDirectoryPath" : null, + "description" : null, + "filename" : "iterm-open-profile-in-new-window.applescript", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "🤖" + }, + "identifier" : "c3e9bc8ec6236fd9d214785417f4c420", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "iTerm", + "path" : "apps\/iterm\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Open profile", + "updatedAt" : "2024-05-23T07:33:06Z" } ] }, @@ -13873,7 +14737,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Opens a new Quick Access Overlay with the specified image or video.", "filename" : "cleanshot-add-quick-access-overlay.sh", @@ -13882,7 +14746,7 @@ "dark" : null, "light" : ".\/images\/add-quick-access-overlay.png" }, - "identifier" : "91b80377dfa8efe298d18c230eaef6f2", + "identifier" : "7239456521bcd7c3373cf8870936d3a7", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13901,7 +14765,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Opens Text Recognition (OCR) tool or extracts text from the specified file.", "filename" : "cleanshot-capture-text.sh", @@ -13910,7 +14774,7 @@ "dark" : null, "light" : ".\/images\/capture-text.png" }, - "identifier" : "bc13ec469b1f9315254a99c339f94c46", + "identifier" : "7fe6d44fdbe6d9bb201ff65b756d860f", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13929,7 +14793,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Take a screenshot of a window.", "filename" : "cleanshot-capture-window.sh", @@ -13938,7 +14802,7 @@ "dark" : null, "light" : ".\/images\/capture-window.png" }, - "identifier" : "930cc5847d3e98f97448af63c9f6ce70", + "identifier" : "3d218b4cbed21f7454562678b6a0b8ee", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13957,7 +14821,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Take a screenshot of the previously specified area of your screen.", "filename" : "cleanshot-capture-previous-area.sh", @@ -13966,7 +14830,7 @@ "dark" : null, "light" : ".\/images\/capture-previous-area.png" }, - "identifier" : "5b66ca80099c0df6a6f6b76b72f30e77", + "identifier" : "43f62174fe500ba2f6cb4661195f3ebb", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -13985,7 +14849,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Restore the recently closed file.", "filename" : "cleanshot-restore.sh", @@ -13994,7 +14858,7 @@ "dark" : null, "light" : ".\/images\/restore.png" }, - "identifier" : "178ae73a00cf095f273899ff011ac7ae", + "identifier" : "775af547f54533d780759eea34761aeb", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14013,7 +14877,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Pin a screenshot to the screen.", "filename" : "cleanshot-pin.sh", @@ -14022,7 +14886,7 @@ "dark" : null, "light" : ".\/images\/pin.png" }, - "identifier" : "7b43135688cf93a57980e243831f842d", + "identifier" : "938d3ce2be34e29a9f58d9099996e9ef", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14041,7 +14905,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Opens specified file in Annotate.", "filename" : "cleanshot-annotate.sh", @@ -14050,7 +14914,7 @@ "dark" : null, "light" : ".\/images\/annotate.png" }, - "identifier" : "e59fa63eb6231b9ade5ac4c903255949", + "identifier" : "ca28647e99a4bbdea940fed93e688236", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14069,7 +14933,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Take a screenshot of a specific area on your screen.", "filename" : "cleanshot-capture-area.sh", @@ -14078,7 +14942,7 @@ "dark" : null, "light" : ".\/images\/capture-area.png" }, - "identifier" : "7a465271a40d40df33a4f809a9008da6", + "identifier" : "f0cd821e3dea3225012f1ee24e0ee2a6", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14097,7 +14961,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Open screenshot that is currently in the clipboard.", "filename" : "cleanshot-open-from-clipboard.sh", @@ -14106,7 +14970,7 @@ "dark" : null, "light" : ".\/images\/clipboard.png" }, - "identifier" : "6695f028dbfc306af7f80b7143ae2f11", + "identifier" : "6c834b826f74f76d659ee54377d73e9e", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14125,7 +14989,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Take a screenshot of your screen.", "filename" : "cleanshot-capture-fullscreen.sh", @@ -14134,7 +14998,7 @@ "dark" : null, "light" : ".\/images\/capture-fullscreen.png" }, - "identifier" : "38409278bff8b4b2a6b1f4a1c414467f", + "identifier" : "b4bdb548dc357d8483d2c7afda0fa2ad", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14181,7 +15045,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Take a screenshot after a specified delay to capture the perfect moment.", "filename" : "cleanshot-self-timer.sh", @@ -14190,7 +15054,7 @@ "dark" : null, "light" : ".\/images\/self-timer.png" }, - "identifier" : "6a02485725c953ebabb634d2171d69d4", + "identifier" : "7ff128b4069f95b91a61d2a920748340", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14209,7 +15073,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Capture any scrollable content.", "filename" : "cleanshot-scrolling-capture.sh", @@ -14218,7 +15082,7 @@ "dark" : null, "light" : ".\/images\/scrolling-capture.png" }, - "identifier" : "95d0ae887d4bd4de79313e67e919ce1c", + "identifier" : "66f040a60fe27b26e31f2dfea19a9200", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14237,7 +15101,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Start a screen recording and save it as a video or an optimized GIF file.", "filename" : "cleanshot-record-screen.sh", @@ -14246,7 +15110,7 @@ "dark" : null, "light" : ".\/images\/record-screen.png" }, - "identifier" : "2797e2984ea9fc0d309081f7cf08e034", + "identifier" : "745e006488dbf13262100b0d9992bd06", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14265,7 +15129,7 @@ "url" : "https:\/\/twitter.com\/CleanShot_app" } ], - "createdAt" : "2021-03-01T16:53:29+00:00", + "createdAt" : "2021-03-01T16:53:29Z", "currentDirectoryPath" : null, "description" : "Hide clutter on your Desktop.", "filename" : "cleanshot-toggle-desktop-icons.sh", @@ -14274,7 +15138,7 @@ "dark" : null, "light" : ".\/images\/toggle-desktop-icons.png" }, - "identifier" : "1ccf43b5679b65859cf4867a0713ea57", + "identifier" : "12f891f99170ce75263600efdf9819e7", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -14676,6 +15540,74 @@ } ] }, + { + "name" : "BusyCal", + "path" : "busycal", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Annie Ma", + "url" : "www.anniema.co" + } + ], + "createdAt" : "2024-02-06T01:35:01-07:00", + "currentDirectoryPath" : null, + "description" : "Creates new events or tasks in BusyCal.", + "filename" : "new-busycal-event-or-task.applescript", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "images\/busycal.png" + }, + "identifier" : "e4f836d21d4fcb8bcf522b1393aad74a", + "isTemplate" : false, + "language" : "applescript", + "mode" : "compact", + "needsConfirmation" : null, + "packageName" : "BusyCal", + "path" : "apps\/busycal\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Create Event\/Task", + "updatedAt" : "2024-02-06T08:36:45Z" + } + ] + }, + { + "name" : "Stickies", + "path" : "stickies", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Annie Ma", + "url" : "http:\/\/www.anniema.co\/" + } + ], + "createdAt" : "2024-01-26T02:19:25-07:00", + "currentDirectoryPath" : null, + "description" : "This script creates a new floating note in the Apple Stickies application", + "filename" : "new-floating-sticky.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "images\/stickies.png" + }, + "identifier" : "dae7953c0397480c8d99a3b0f56176b7", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Stickies", + "path" : "apps\/stickies\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "New Floating Sticky Note", + "updatedAt" : "2024-01-26T09:21:48Z" + } + ] + }, { "name" : "Bartender", "path" : "bartender", @@ -15051,6 +15983,36 @@ } ] }, + { + "name" : "Find My", + "path" : "find-my", + "readme" : "apps\/find-my\/README.md", + "scriptCommands" : [ + { + "authors" : null, + "createdAt" : "2025-06-12T06:53:33-07:00", + "currentDirectoryPath" : null, + "description" : null, + "filename" : "fmp.js", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "images\/find-my-icon.png" + }, + "identifier" : "206851d53c58c074472f7acb20ceeb08", + "isTemplate" : false, + "language" : "node", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "FindMy", + "path" : "apps\/find-my\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Find My Phone (Auto Sound)", + "updatedAt" : "2025-06-12T06:53:33-07:00" + } + ] + }, { "name" : "Bear", "path" : "bear", @@ -15256,6 +16218,68 @@ "schemaVersion" : 1, "title" : "Copy Foreground Mail Deeplink", "updatedAt" : "2021-05-22T16:27:53+01:00" + }, + { + "authors" : [ + { + "name" : "RealTong", + "url" : "https:\/\/raycast.com\/RealTong" + } + ], + "createdAt" : "2024-03-02T12:46:14+08:00", + "currentDirectoryPath" : null, + "description" : "Copy the captcha from the emlx file.", + "filename" : "copy-captcha-from-mail.py", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : ".\/images\/mail.png" + }, + "identifier" : "eb5104b3db21de0c7ea654c49319716a", + "isTemplate" : false, + "language" : "python", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Mail", + "path" : "apps\/mail\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "CaptchaFromMail", + "updatedAt" : "2024-03-02T12:46:14+08:00" + } + ] + }, + { + "name" : "Claude", + "path" : "claude", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Nimo Beeren", + "url" : "https:\/\/github.com\/nimobeeren" + } + ], + "createdAt" : "2024-08-07T21:01:27+02:00", + "currentDirectoryPath" : null, + "description" : "Open Claude in Chrome browser and submit a prompt", + "filename" : "claude.js", + "hasArguments" : true, + "icon" : { + "dark" : null, + "light" : "✨" + }, + "identifier" : "cd9356ee79829cf478bdcd127c673a0c", + "isTemplate" : false, + "language" : "node", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Claude", + "path" : "apps\/claude\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Ask Claude", + "updatedAt" : "2024-08-30T13:09:27Z" } ] }, @@ -15630,7 +16654,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-01-24T20:19:30+00:00", + "createdAt" : "2021-01-24T20:19:30Z", "currentDirectoryPath" : null, "description" : "Set dimming intensity of background windows.", "filename" : "hazeover-set-intensity.applescript", @@ -15639,7 +16663,7 @@ "dark" : null, "light" : "images\/hazeover.png" }, - "identifier" : "fadd9020bfac9652d455ccefd757fcc2", + "identifier" : "f26557a194748a37e12e64003b1f2c6f", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -15658,7 +16682,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-01-24T20:19:30+00:00", + "createdAt" : "2021-01-24T20:19:30Z", "currentDirectoryPath" : null, "description" : "Toggle dimming of all background windows.", "filename" : "hazeover-toggle-dimming.applescript", @@ -15667,7 +16691,7 @@ "dark" : null, "light" : "images\/hazeover.png" }, - "identifier" : "c77e9fa4315c2beba15ab0321d833ae5", + "identifier" : "5368be37ae49d353930157085116709f", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -16331,7 +17355,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Disconnect", - "updatedAt" : "2021-03-25T22:10:33+00:00" + "updatedAt" : "2021-03-25T22:10:33Z" }, { "authors" : [ @@ -16359,7 +17383,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Connect to Location", - "updatedAt" : "2022-08-25T19:51:18+00:00" + "updatedAt" : "2022-08-25T19:51:18Z" }, { "authors" : [ @@ -16387,7 +17411,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search Countries, Cities, and Hostnames", - "updatedAt" : "2021-03-25T22:10:33+00:00" + "updatedAt" : "2021-03-25T22:10:33Z" }, { "authors" : [ @@ -16415,7 +17439,7 @@ "refreshTime" : "5m", "schemaVersion" : 1, "title" : "Mullvad Status", - "updatedAt" : "2022-08-25T19:51:18+00:00" + "updatedAt" : "2022-08-25T19:51:18Z" }, { "authors" : [ @@ -16443,7 +17467,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Reconnect", - "updatedAt" : "2022-08-25T19:51:18+00:00" + "updatedAt" : "2022-08-25T19:51:18Z" }, { "authors" : [ @@ -16471,7 +17495,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Connect", - "updatedAt" : "2022-08-25T19:51:18+00:00" + "updatedAt" : "2022-08-25T19:51:18Z" } ] }, @@ -16685,7 +17709,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Get Tasks", - "updatedAt" : "2021-05-04T10:14:48+00:00" + "updatedAt" : "2021-05-04T10:14:48Z" } ] }, @@ -16719,7 +17743,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Open", - "updatedAt" : "2022-01-27T12:07:09+00:00" + "updatedAt" : "2022-01-27T12:07:09Z" } ] }, @@ -16927,7 +17951,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Create Note From Clipboard", - "updatedAt" : "2021-08-18T17:31:58+01:00" + "updatedAt" : "2024-03-01T12:51:47+01:00" }, { "authors" : [ @@ -17208,7 +18232,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Close all tabs besides the currently active tab.", "filename" : "safari-close-other-tabs.applescript", @@ -17217,7 +18241,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "4c466c382386183b6393383afe1a0b26", + "identifier" : "38cc0dc04da036a099b3e37fd711ef8d", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17227,7 +18251,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Close Other Tabs", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" }, { "authors" : [ @@ -17292,7 +18316,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Add a new Reading List item with the given URL. Allows a custom title to be specified.", "filename" : "safari-create-reading-list-item.applescript", @@ -17301,7 +18325,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "b63421c14664c46305244e65fe16553f", + "identifier" : "77a2ff3bf579994aa3624feb9aca64a4", "isTemplate" : false, "language" : "applescript", "mode" : "fullOutput", @@ -17311,7 +18335,35 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Add Item to Reading List", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" + }, + { + "authors" : [ + { + "name" : "Michael Bianco", + "url" : "https:\/\/github.com\/iloveitaly" + } + ], + "createdAt" : "2024-08-21T08:30:36-06:00", + "currentDirectoryPath" : null, + "description" : "Download the currently active tab's URL.", + "filename" : "safari-download-url.applescript", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "images\/safari.png" + }, + "identifier" : "3fe3287d74734aa1adaf454aa6be4dce", + "isTemplate" : false, + "language" : "applescript", + "mode" : "silent", + "needsConfirmation" : null, + "packageName" : "Safari", + "path" : "apps\/safari\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Download Current URL", + "updatedAt" : "2024-08-30T13:02:53Z" }, { "authors" : [ @@ -17320,7 +18372,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Close tabs with the same URL.", "filename" : "safari-close-duplicated-tabs.applescript", @@ -17329,7 +18381,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "800d9f6cf20b6b1c2f5ffe4e76b84b4b", + "identifier" : "3910bc8358dde77be0359ef115f703a6", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17339,7 +18391,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Close Duplicated Tabs", - "updatedAt" : "2021-03-09T15:11:52+00:00" + "updatedAt" : "2021-03-09T15:11:52Z" }, { "authors" : [ @@ -17348,7 +18400,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Close all tabs to the right side of the currently active tab.", "filename" : "safari-close-tabs-right.applescript", @@ -17357,7 +18409,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "723f7798053edadfeb982265f283b4c2", + "identifier" : "779e79e3334dca627507dc1737a1cf27", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17367,7 +18419,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Close Tabs to the Right", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" }, { "authors" : [ @@ -17376,7 +18428,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Close all tabs to the left side of the currently active tab.", "filename" : "safari-close-tabs-left.applescript", @@ -17385,7 +18437,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "6d6cf490c73838f02f2054fcfb4d3786", + "identifier" : "98ee4a51212c322cf544c0e756ca3383", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17395,7 +18447,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Close Tabs to the Left", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" }, { "authors" : [ @@ -17404,7 +18456,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Duplicates and opens the currently active tab.", "filename" : "safari-duplicate-tab.applescript", @@ -17413,7 +18465,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "e0be5f0e55412e5eaab09144dfb2aa6e", + "identifier" : "6727e9a045a860d1a726af83df1b9df3", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17423,7 +18475,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Duplicate Tab", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" }, { "authors" : [ @@ -17432,7 +18484,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-03-09T15:09:02+00:00", + "createdAt" : "2021-03-09T15:09:02Z", "currentDirectoryPath" : null, "description" : "Close all tabs in the frontmost window", "filename" : "safari-close-all-tabs.applescript", @@ -17441,7 +18493,7 @@ "dark" : null, "light" : "images\/safari.png" }, - "identifier" : "abb41453f8b816095fb4bada2a14927a", + "identifier" : "1cd7846276f766bc2b17a7a99bed645a", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -17451,7 +18503,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Close All Tabs", - "updatedAt" : "2021-03-09T15:09:02+00:00" + "updatedAt" : "2021-03-09T15:09:02Z" }, { "authors" : [ @@ -17825,6 +18877,10 @@ { "name" : "Ross Zurowski", "url" : "https:\/\/github.com\/rosszurowski" + }, + { + "name" : "Daniel Schoemer", + "url" : "https:\/\/github.com\/quatauta" } ], "createdAt" : "2021-06-14T15:33:18-04:00", @@ -17846,7 +18902,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Switch Account", - "updatedAt" : "2021-06-14T15:33:18-04:00" + "updatedAt" : "2024-08-19T14:49:32+02:00" } ] }, @@ -18459,7 +19515,7 @@ "url" : "https:\/\/twitter.com\/culturedcode\/" } ], - "createdAt" : "2021-03-03T19:17:44+00:00", + "createdAt" : "2021-03-03T19:17:44Z", "currentDirectoryPath" : null, "description" : "Get an overview of your completed tasks for today.", "filename" : "things-today.applescript", @@ -18468,7 +19524,7 @@ "dark" : null, "light" : "images\/things.png" }, - "identifier" : "9684467fd87bbb68d852c1ef118e4322", + "identifier" : "f5c008fbbafb56d3dd35483b209357f5", "isTemplate" : false, "language" : "applescript", "mode" : "inline", @@ -18478,7 +19534,7 @@ "refreshTime" : "1m", "schemaVersion" : 1, "title" : "Today", - "updatedAt" : "2021-03-03T19:17:44+00:00" + "updatedAt" : "2021-03-03T19:17:44Z" }, { "authors" : [ @@ -18487,7 +19543,7 @@ "url" : "https:\/\/twitter.com\/culturedcode\/" } ], - "createdAt" : "2021-03-03T19:17:44+00:00", + "createdAt" : "2021-03-03T19:17:44Z", "currentDirectoryPath" : null, "description" : "Search To-Dos with a query.", "filename" : "things-search-to-dos.sh", @@ -18496,7 +19552,7 @@ "dark" : null, "light" : "images\/things.png" }, - "identifier" : "8194ae91b888f4b868d50bade0f9c6af", + "identifier" : "81182c169dbbf72ba9dfbbfea713275b", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -18506,7 +19562,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Search To-Dos", - "updatedAt" : "2021-03-03T19:17:44+00:00" + "updatedAt" : "2021-03-03T19:17:44Z" }, { "authors" : [ @@ -18515,7 +19571,7 @@ "url" : "https:\/\/twitter.com\/culturedcode\/" } ], - "createdAt" : "2021-03-03T19:17:44+00:00", + "createdAt" : "2021-03-03T19:17:44Z", "currentDirectoryPath" : null, "description" : "Create a new To-Do with title and optional deadline.", "filename" : "things-create-todo.sh", @@ -18524,7 +19580,7 @@ "dark" : null, "light" : "images\/things.png" }, - "identifier" : "5ac2c380166460ade602f0c1e96df290", + "identifier" : "f5ae3372a366a985c4a630f8f3412f83", "isTemplate" : false, "language" : "bash", "mode" : "silent", @@ -18543,7 +19599,7 @@ "url" : "https:\/\/twitter.com\/culturedcode\/" } ], - "createdAt" : "2021-03-03T19:17:44+00:00", + "createdAt" : "2021-03-03T19:17:44Z", "currentDirectoryPath" : null, "description" : "Show your current To-Do to stay focused.", "filename" : "things-current-todo.applescript", @@ -18552,7 +19608,7 @@ "dark" : null, "light" : "images\/things.png" }, - "identifier" : "5ce51f66aa4c3798e7dcd06dd8199c12", + "identifier" : "7a61aa9d34f92172b970cf9ff88113af", "isTemplate" : false, "language" : "applescript", "mode" : "inline", @@ -18562,7 +19618,7 @@ "refreshTime" : "1m", "schemaVersion" : 1, "title" : "Current To-Do", - "updatedAt" : "2021-03-03T19:17:44+00:00" + "updatedAt" : "2021-03-03T19:17:44Z" } ] }, @@ -18596,7 +19652,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "chatgpt", - "updatedAt" : "2023-06-05T07:04:09+00:00" + "updatedAt" : "2023-06-05T07:04:09Z" } ] }, @@ -18630,7 +19686,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Create Card", - "updatedAt" : "2021-08-12T07:51:38+00:00" + "updatedAt" : "2021-08-12T07:51:38Z" } ] }, @@ -19059,7 +20115,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Add Reminder", - "updatedAt" : "2022-02-07T02:10:02+00:00" + "updatedAt" : "2022-02-07T02:10:02Z" } ] }, @@ -20051,7 +21107,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Enable Espanso", - "updatedAt" : "2021-05-14T16:44:53+00:00" + "updatedAt" : "2021-05-14T16:44:53Z" }, { "authors" : [ @@ -20107,7 +21163,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Start Espanso", - "updatedAt" : "2021-05-14T16:44:53+00:00" + "updatedAt" : "2021-05-14T16:44:53Z" }, { "authors" : [ @@ -20135,7 +21191,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Disable Espanso", - "updatedAt" : "2021-05-14T16:44:53+00:00" + "updatedAt" : "2021-05-14T16:44:53Z" }, { "authors" : [ @@ -20163,7 +21219,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Restart Espanso", - "updatedAt" : "2021-05-14T16:44:53+00:00" + "updatedAt" : "2021-05-14T16:44:53Z" }, { "authors" : [ @@ -20191,7 +21247,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Stop Espanso", - "updatedAt" : "2021-05-14T16:44:53+00:00" + "updatedAt" : "2021-05-14T16:44:53Z" } ] }, @@ -20424,14 +21480,14 @@ ], "createdAt" : "2022-11-17T12:22:40+03:00", "currentDirectoryPath" : null, - "description" : "Prayer Times grabbed from the Diyanet's Official Website for people located in Türkiye.", - "filename" : "prayer-times-diyanet.sh", + "description" : "Prayer Times grabbed from the aladhan.com.", + "filename" : "prayer-times.sh", "hasArguments" : false, "icon" : { "dark" : null, "light" : "🕌" }, - "identifier" : "64f8434e9317a2cfd699e4dfd8d4be86", + "identifier" : "ebda5e51cd4760fb9dbce650e41a9142", "isTemplate" : false, "language" : "bash", "mode" : "inline", @@ -20440,8 +21496,8 @@ "path" : "culture\/", "refreshTime" : null, "schemaVersion" : 1, - "title" : "Prayer Times (Diyanet)", - "updatedAt" : "2022-11-17T13:23:15+03:00" + "title" : "Prayer Times", + "updatedAt" : "2024-07-20T15:38:18+03:00" } ] }, @@ -21260,6 +22316,40 @@ ], "subGroups" : [ + { + "name" : "Speaker Setup", + "path" : "speaker-setup", + "scriptCommands" : [ + { + "authors" : [ + { + "name" : "Kailash Yellareddy", + "url" : "https:\/\/github.com\/kyellareddy" + } + ], + "createdAt" : "2024-01-09T01:17:34-08:00", + "currentDirectoryPath" : null, + "description" : null, + "filename" : "speaker-setup.sh", + "hasArguments" : false, + "icon" : { + "dark" : null, + "light" : "🔊" + }, + "identifier" : "7920ccb4e58a80afd149f6ce81e8f185", + "isTemplate" : false, + "language" : "bash", + "mode" : "compact", + "needsConfirmation" : null, + "packageName" : "Speaker Setup", + "path" : "media\/speaker-setup\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Speaker Setup", + "updatedAt" : "2024-04-07T23:23:52+04:00" + } + ] + }, { "name" : "Apple Music", "path" : "apple-music", @@ -21514,7 +22604,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Set Volume", - "updatedAt" : "2020-12-11T00:15:58+00:00" + "updatedAt" : "2020-12-11T00:15:58Z" }, { "authors" : [ @@ -21607,7 +22697,7 @@ "url" : "https:\/\/github.com\/mmerle" } ], - "createdAt" : "2020-11-30T12:52:41+00:00", + "createdAt" : "2020-11-30T12:52:41Z", "currentDirectoryPath" : null, "description" : "Show currently playing track in Music.", "filename" : "apple-music-current-track.applescript", @@ -21616,7 +22706,7 @@ "dark" : null, "light" : "images\/apple-music-logo.png" }, - "identifier" : "1ce69e81108a71dc7ebdbe58cb8892eb", + "identifier" : "41db4193526a667ad73d8742fc72d7de", "isTemplate" : false, "language" : "applescript", "mode" : "inline", @@ -21682,7 +22772,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Love Current Track", - "updatedAt" : "2021-09-24T08:42:54-04:00" + "updatedAt" : "2024-02-27T09:52:24-05:00" } ] }, @@ -22423,7 +23513,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Next Track", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, @@ -22446,7 +23536,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Toggle Play\/Pause", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -22511,7 +23601,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2021-01-26T20:54:37+00:00", + "createdAt" : "2021-01-26T20:54:37Z", "currentDirectoryPath" : null, "description" : "Play playlist or track in Spotify.", "filename" : "spotify-play-playlist.template.applescript", @@ -22520,7 +23610,7 @@ "dark" : null, "light" : "images\/spotify-logo.png" }, - "identifier" : "faad4bf6558229aa4c10be54368a4c18", + "identifier" : "8e28e54269f27849b00b363c8a0271be", "isTemplate" : true, "language" : "applescript", "mode" : "silent", @@ -22530,7 +23620,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Play Track or Playlist", - "updatedAt" : "2021-01-26T20:55:11+00:00" + "updatedAt" : "2021-01-26T20:55:11Z" }, { "authors" : null, @@ -22553,7 +23643,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Play", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : [ @@ -22562,7 +23652,7 @@ "url" : "https:\/\/github.com\/thomaspaulmann" } ], - "createdAt" : "2020-11-30T12:52:41+00:00", + "createdAt" : "2020-11-30T12:52:41Z", "currentDirectoryPath" : null, "description" : "Show currently playing track in Spotify.", "filename" : "spotify-current-track.applescript", @@ -22571,7 +23661,7 @@ "dark" : null, "light" : "images\/spotify-logo.png" }, - "identifier" : "94fcb3923a4b45346a924803c2b36f3f", + "identifier" : "2eb202dd044979361f9d435198280920", "isTemplate" : false, "language" : "applescript", "mode" : "inline", @@ -22581,7 +23671,7 @@ "refreshTime" : "30s", "schemaVersion" : 1, "title" : "Current Track", - "updatedAt" : "2020-11-30T12:52:41+00:00" + "updatedAt" : "2020-11-30T12:52:41Z" }, { "authors" : null, @@ -22604,7 +23694,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Previous Track", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" }, { "authors" : null, @@ -22627,7 +23717,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Pause", - "updatedAt" : "2020-12-08T15:56:35+00:00" + "updatedAt" : "2020-12-08T15:56:35Z" } ] }, @@ -22721,6 +23811,32 @@ } ] }, + { + "name" : "Lowfi", + "path" : "lowfi", + "scriptCommands" : [ + { + "authors" : null, + "createdAt" : "2024-11-24T04:45:52+01:00", + "currentDirectoryPath" : null, + "description" : null, + "filename" : "lowfi.sh", + "hasArguments" : false, + "icon" : null, + "identifier" : "afcc05d7a53abe6543c98f59f23bb7e5", + "isTemplate" : false, + "language" : "bash", + "mode" : "compact", + "needsConfirmation" : null, + "packageName" : "Music", + "path" : "media\/lowfi\/", + "refreshTime" : null, + "schemaVersion" : 1, + "title" : "Lowfi", + "updatedAt" : "2024-12-11T20:08:12Z" + } + ] + }, { "name" : "Apple Tv", "path" : "apple-tv", @@ -22751,7 +23867,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Set Volume", - "updatedAt" : "2020-12-11T00:16:06+00:00" + "updatedAt" : "2020-12-11T00:16:06Z" }, { "authors" : [ @@ -22997,7 +24113,7 @@ "url" : "https:\/\/github.com\/charlesharries" } ], - "createdAt" : "2022-02-01T13:37:24+00:00", + "createdAt" : "2022-02-01T13:37:24Z", "currentDirectoryPath" : null, "description" : "Play the current track in Tidal.", "filename" : "tidal-play.applescript", @@ -23006,7 +24122,7 @@ "dark" : null, "light" : "images\/tidal-logo.png" }, - "identifier" : "370fa0d9f88c538e191fa5c4df615aed", + "identifier" : "2ea9c044515312cbf87dac8fb5e0c92a", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -23016,7 +24132,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Play", - "updatedAt" : "2022-02-01T13:37:24+00:00" + "updatedAt" : "2022-02-01T13:37:24Z" }, { "authors" : [ @@ -23025,7 +24141,7 @@ "url" : "https:\/\/github.com\/charlesharries" } ], - "createdAt" : "2022-02-01T13:37:24+00:00", + "createdAt" : "2022-02-01T13:37:24Z", "currentDirectoryPath" : null, "description" : "Skip to the next track in Tidal.", "filename" : "tidal-next-track.applescript", @@ -23034,7 +24150,7 @@ "dark" : null, "light" : "images\/tidal-logo.png" }, - "identifier" : "9206bc623c13a1861d1ea4f872c8fbee", + "identifier" : "aac66a366cec215c8594f02cf425bcb0", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -23044,7 +24160,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Next Track", - "updatedAt" : "2022-02-01T14:38:40+00:00" + "updatedAt" : "2022-02-01T14:38:40Z" }, { "authors" : [ @@ -23053,7 +24169,7 @@ "url" : "https:\/\/github.com\/charlesharries" } ], - "createdAt" : "2022-02-01T13:37:24+00:00", + "createdAt" : "2022-02-01T13:37:24Z", "currentDirectoryPath" : null, "description" : "Pause the current track in Tidal.", "filename" : "tidal-pause.applescript", @@ -23062,7 +24178,7 @@ "dark" : null, "light" : "images\/tidal-logo.png" }, - "identifier" : "1e045340ac4a21b2cf81a4bf59b3984e", + "identifier" : "58a1d13baec2c61c0a7ee815126b4fd9", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -23072,7 +24188,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Pause", - "updatedAt" : "2022-02-01T13:37:24+00:00" + "updatedAt" : "2022-02-01T13:37:24Z" }, { "authors" : [ @@ -23081,7 +24197,7 @@ "url" : "https:\/\/github.com\/charlesharries" } ], - "createdAt" : "2022-02-01T13:37:24+00:00", + "createdAt" : "2022-02-01T13:37:24Z", "currentDirectoryPath" : null, "description" : "Skip back to the previous track in Tidal.", "filename" : "tidal-previous-track.applescript", @@ -23090,7 +24206,7 @@ "dark" : null, "light" : "images\/tidal-logo.png" }, - "identifier" : "756f25af8641456ee9d6c6b14146f1dd", + "identifier" : "2a30f2daec4a4df68c4f0dae82c0e6ba", "isTemplate" : false, "language" : "applescript", "mode" : "silent", @@ -23100,7 +24216,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Previous Track", - "updatedAt" : "2022-02-01T14:38:40+00:00" + "updatedAt" : "2022-02-01T14:38:40Z" }, { "authors" : [ @@ -23128,7 +24244,7 @@ "refreshTime" : null, "schemaVersion" : 1, "title" : "Toggle Play\/Pause", - "updatedAt" : "2022-09-13T08:16:43+00:00" + "updatedAt" : "2022-09-13T08:16:43Z" } ] } @@ -23136,40 +24252,40 @@ } ], "languages" : [ - { - "displayName" : "Swift", - "icon" : "icon-swift.png", - "name" : "swift" - }, - { - "displayName" : "Node", - "icon" : "icon-nodejs.png", - "name" : "node" - }, { "displayName" : "Bash", "icon" : "icon-bash.png", "name" : "bash" }, + { + "displayName" : "Swift", + "icon" : "icon-swift.png", + "name" : "swift" + }, { "displayName" : "Python", "icon" : "icon-python.png", "name" : "python" }, + { + "displayName" : "Ruby", + "icon" : "icon-ruby.png", + "name" : "ruby" + }, { "displayName" : "AppleScript", "icon" : "icon-applescript.png", "name" : "applescript" }, { - "displayName" : "Ruby", - "icon" : "icon-ruby.png", - "name" : "ruby" + "displayName" : "Node", + "icon" : "icon-nodejs.png", + "name" : "node" } ], "metadata" : [ ], - "totalScriptCommands" : 805, - "updatedAt" : "2023-11-08T10:47:49Z" + "totalScriptCommands" : 843, + "updatedAt" : "2025-10-24T12:06:29Z" } \ No newline at end of file diff --git a/commands/math/calculate-CAGR.sh b/commands/math/calculate-CAGR.sh new file mode 100755 index 000000000..671876a94 --- /dev/null +++ b/commands/math/calculate-CAGR.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Calculate CAGR Percentage +# @raycast.mode compact +# @raycast.packageName Math + +# Optional parameters: +# @raycast.argument1 { "type": "text", "placeholder": "From" } +# @raycast.argument2 { "type": "text", "placeholder": "To" } +# @raycast.argument3 { "type": "text", "placeholder": "Years" } + +# Documentation: +# @raycast.author Samuel Barton +# @raycast.authorURL https://github.com/samueldbarton +# @raycast.description Calculate the CAGR between "from" and "to" values over given "years," then copy the result. + +CAGR=$(echo "scale=4; e( l($2 / $1) / $3 ) - 1" | bc -l) +CAGR=$(echo "scale=2; $CAGR * 100" | bc -l) +CAGR=$(printf "%.2f" "$CAGR") +echo "$CAGR" | pbcopy +echo "The CAGR from $1 to $2 over $3 years is $CAGR%. CAGR copied to clipboard." \ No newline at end of file diff --git a/commands/media/apple-music/apple-music-love-current-track.applescript b/commands/media/apple-music/apple-music-love-current-track.applescript index cf805be47..4971ffa85 100755 --- a/commands/media/apple-music/apple-music-love-current-track.applescript +++ b/commands/media/apple-music/apple-music-love-current-track.applescript @@ -11,6 +11,10 @@ # @raycast.schemaVersion 1 tell application "Music" - set loved of current track to true - log "<3 Yeah, that song is rad." - end tell \ No newline at end of file + if player state is playing then + set favorited of current track to true + log "<3 Yeah, the song is now favorited" + else + return "No track is currently playing." + end if + end tell diff --git a/commands/media/lowfi/lowfi.sh b/commands/media/lowfi/lowfi.sh new file mode 100755 index 000000000..04248cf5c --- /dev/null +++ b/commands/media/lowfi/lowfi.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Note: lowfi and WezTerm required +# +# Install lowfi at https://github.com/talwat/lowfi +# or by cargo: cargo install lowfi +# +# Install WezTerm at https://wezfurlong.org/wezterm/install/macos.html +# or by homebrew: brew install --cask wezterm + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Lowfi +# @raycast.mode compact +# @raycast.packageName Music + +# Optional parameters: +# @raycast.icon + +export PATH="$HOME/.cargo/bin:$PATH" + +# Check if lowfi is already running +if pgrep -f "lowfi$" > /dev/null; then + echo "Found existing lowfi process" + + # Use AppleScript to find and focus the lowfi window + osascript -e ' + -- First activate WezTerm application + tell application "WezTerm" to activate + + -- Then focus the specific window + tell application "System Events" + tell process "wezterm-gui" + -- Get all windows + set allWindows to every window + repeat with w in allWindows + if title of w contains "lowfi" then + -- Try multiple methods to bring window to front + set frontmost to true + set value of attribute "AXMain" of w to true + perform action "AXRaise" of w + set position of w to {0, 40} + -- Click the window to ensure focus + click w + return "Found and focused lowfi window" + end if + end repeat + end tell + end tell + return "Could not find lowfi window" + ' +else + echo "Starting new lowfi instance" + /Applications/WezTerm.app/Contents/MacOS/wezterm start -- lowfi & +fi diff --git a/commands/media/speaker-setup/Left.mp3 b/commands/media/speaker-setup/Left.mp3 new file mode 100644 index 000000000..4b9618863 Binary files /dev/null and b/commands/media/speaker-setup/Left.mp3 differ diff --git a/commands/media/speaker-setup/Right.mp3 b/commands/media/speaker-setup/Right.mp3 new file mode 100644 index 000000000..53559d18d Binary files /dev/null and b/commands/media/speaker-setup/Right.mp3 differ diff --git a/commands/media/speaker-setup/speaker-setup.sh b/commands/media/speaker-setup/speaker-setup.sh new file mode 100755 index 000000000..6ca3d983a --- /dev/null +++ b/commands/media/speaker-setup/speaker-setup.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Speaker Setup +# @raycast.mode compact + +# Optional parameters: +# @raycast.icon 🔊 + +# Documentation: +# @raycast.author Kailash Yellareddy +# @raycast.authorURL https://github.com/kyellareddy + +# SETUP: +# 1. Download the files Left.mp3 and Right.mp3 +# 2. Replace "Left.mp3" in line 21 with the file path for the file Left.mp3 +# 3. Replace "Right.mp3" in line 24 with the file path for the file Right.mp3 + +# Play the first audio file +afplay Left.mp3 + +# Play the second audio file +afplay Right.mp3 diff --git a/commands/navigation/hide-application.applescript b/commands/navigation/hide-application.applescript new file mode 100755 index 000000000..f9574a4fd --- /dev/null +++ b/commands/navigation/hide-application.applescript @@ -0,0 +1,18 @@ +#!/usr/bin/osascript + +# @raycast.schemaVersion 1 +# @raycast.author Chris Bailey +# @raycast.authorURL https://raycast.com/that70schris +# @raycast.description Easily hide your foremost application +# @raycast.packageName Navigation +# @raycast.title Hide Current Application +# @raycast.mode silent +# @raycast.icon 🫥 + +tell application "System Events" + tell (first process whose frontmost is true) + set _name to displayed name + end tell + + set visible of application process _name to false +end tell diff --git a/commands/system/audio/toggle-mute-notification-sounds.applescript b/commands/system/audio/toggle-mute-notification-sounds.applescript new file mode 100755 index 000000000..779a3f4a8 --- /dev/null +++ b/commands/system/audio/toggle-mute-notification-sounds.applescript @@ -0,0 +1,27 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Toggle Mute Notifcation Sounds +# @raycast.mode silent +# @raycast.packageName System + +# Optional parameters: +# @raycast.icon 🔔 + +# Documentation: +# @raycast.author Annie Ma +# @raycast.authorURL http://www.anniema.co/ +# @raycast.description Toggles notification sounds. + +set volumeSettings to get volume settings +set alertVolume to alert volume of volumeSettings + +if alertVolume > 0 then + set volume alert volume 0 + display notification "" with title "Muted notification sounds" +else + set volume alert volume 100 + display notification "" with title "Unmuted notification sounds" +end if + diff --git a/commands/system/copy-selection-to-clipboard.applescript b/commands/system/copy-selection-to-clipboard.applescript new file mode 100755 index 000000000..6a5031e2a --- /dev/null +++ b/commands/system/copy-selection-to-clipboard.applescript @@ -0,0 +1,43 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Copy Finder Selection to Clipboard +# @raycast.mode silent +# @raycast.packageName System +# +# Optional parameters: +# @raycast.icon ?? +# +# Documentation: +# @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. +# @raycast.author Felipe Turcheti +# @raycast.authorURL https://felipeturcheti.com + +on run + log "Copying contents of the selected items to the clipboard..." + + tell application "Finder" + -- get Finder selected items + set theItems to selection + end tell + + -- create a list to store contents of all selected items + set allContents to "" + + -- for each item in the Finder selection + repeat with itemRef in theItems + -- get the item path + set theItem to POSIX path of (itemRef as string) + -- read the content of the item + set fileDescriptor to open for access (POSIX file theItem) + set fileContent to read fileDescriptor for (get eof fileDescriptor) + close access fileDescriptor + -- add the content to the list + set allContents to allContents & fileContent & " +" + end repeat + + -- set the clipboard to the combined contents + set the clipboard to allContents +end run diff --git a/commands/system/default-browser-arc.applescript b/commands/system/default-browser-arc.applescript index b48eb1aa6..d36e16fa7 100755 --- a/commands/system/default-browser-arc.applescript +++ b/commands/system/default-browser-arc.applescript @@ -17,6 +17,9 @@ # @raycast.authorURL https://github.com/dehesa # @raycast.description Set Arc as the default browser. +# check to see what the current browser is +set currentDefaultBrowser to my getCurrentDefaultBrowser() + set repeatCount to 0 tell application "System Events" @@ -28,7 +31,12 @@ tell application "System Events" if repeatCount = 15 then exit repeat end repeat try - click button 2 of window 1 of process "CoreServicesUIAgent" + # if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to Arc. + if currentDefaultBrowser contains "com.google.chrome" then + click button 1 of window 1 of process "CoreServicesUIAgent" + else # otherwise click button 2 to change the default browser to Arc. + click button 2 of window 1 of process "CoreServicesUIAgent" + end if log "Arc is now your default browser" on error log "Arc is already your default browser" @@ -38,6 +46,13 @@ tell application "System Events" end try end tell +to getCurrentDefaultBrowser() + set filePath to "~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist" + + set output to do shell script "plutil -p " & filePath & " | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\"\\\"https\\\"\") print a}'" + return output +end getCurrentDefaultBrowser + to changeDefaultBrowser(thebrowser) do shell script " if ! command -v defaultbrowser &> /dev/null; then diff --git a/commands/system/default-browser-firefox.applescript b/commands/system/default-browser-firefox.applescript index ca0920c15..449f1c324 100755 --- a/commands/system/default-browser-firefox.applescript +++ b/commands/system/default-browser-firefox.applescript @@ -17,6 +17,9 @@ # @raycast.authorURL https://github.com/dehesa # @raycast.description Set Firefox as the default browser. +# check to see what the current browser is +set currentDefaultBrowser to my getCurrentDefaultBrowser() + set repeatCount to 0 tell application "System Events" @@ -28,7 +31,12 @@ tell application "System Events" if repeatCount = 15 then exit repeat end repeat try - click button 2 of window 1 of process "CoreServicesUIAgent" + # if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to FF. + if currentDefaultBrowser contains "com.google.chrome" then + click button 1 of window 1 of process "CoreServicesUIAgent" + else # otherwise click button 2 to change the default browser to FF. + click button 2 of window 1 of process "CoreServicesUIAgent" + end if log "Firefox is now your default browser" on error log "Firefox is already your default browser" @@ -38,6 +46,13 @@ tell application "System Events" end try end tell +to getCurrentDefaultBrowser() + set filePath to "~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist" + + set output to do shell script "plutil -p " & filePath & " | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\"\\\"https\\\"\") print a}'" + return output +end getCurrentDefaultBrowser + to changeDefaultBrowser(thebrowser) do shell script " if ! command -v defaultbrowser &> /dev/null; then diff --git a/commands/system/default-browser-front-most-app.applescript b/commands/system/default-browser-front-most-app.applescript index 7b67aeae7..83b41fc28 100755 --- a/commands/system/default-browser-front-most-app.applescript +++ b/commands/system/default-browser-front-most-app.applescript @@ -38,6 +38,8 @@ if (raycastArgv is equal to "") then set browserName to "safari" else if (appName is equal to "Safari Technology Preview") then set browserName to "safaritechnologypreview" + else if (appName contains "Firefox Dev") then + set browserName to "firefoxdeveloperedition" # set Google chrome dev as default browser # it need to put before Chrome else if (appName contains "dev") then @@ -48,8 +50,10 @@ if (raycastArgv is equal to "") then set browserName to "chromium" else if (appName is equal to "Firefox") then set browserName to "firefox" - else if (appName is equal to "Firefox Developer Edition") then - set browserName to "firefoxdeveloperedition" + else if (appName is equal to "SigmaOS") then + set browserName to "macos" + else if (appName is equal to "Arc") then + set browserName to "browser" end if else diff --git a/commands/system/default-browser-safari.applescript b/commands/system/default-browser-safari.applescript index 4d68962d9..d1c2cc9d7 100755 --- a/commands/system/default-browser-safari.applescript +++ b/commands/system/default-browser-safari.applescript @@ -17,6 +17,9 @@ # @raycast.authorURL https://github.com/dehesa # @raycast.description Set Safari as the default browser. +# check to see what the current browser is +set currentDefaultBrowser to my getCurrentDefaultBrowser() + set repeatCount to 0 tell application "System Events" @@ -28,7 +31,12 @@ tell application "System Events" if repeatCount = 15 then exit repeat end repeat try - click button 2 of window 1 of process "CoreServicesUIAgent" + # if Chrome is the current default browser, the order of the buttons is reversed. Click button 1 to change the default browser to Safari. + if currentDefaultBrowser contains "com.google.chrome" then + click button 1 of window 1 of process "CoreServicesUIAgent" + else # otherwise click button 2 to change the default browser to Safari. + click button 2 of window 1 of process "CoreServicesUIAgent" + end if log "Safari is now your default browser" on error log "Safari is already your default browser" @@ -38,6 +46,13 @@ tell application "System Events" end try end tell +to getCurrentDefaultBrowser() + set filePath to "~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist" + + set output to do shell script "plutil -p " & filePath & " | awk '/LSHandlerRoleAll/{a=$3}/LSHandlerURLScheme/{if($3==\"\\\"https\\\"\") print a}'" + return output +end getCurrentDefaultBrowser + to changeDefaultBrowser(thebrowser) do shell script " if ! command -v defaultbrowser &> /dev/null; then diff --git a/commands/system/dismiss-notifications.applescript b/commands/system/dismiss-notifications.applescript index 5b3b18ed3..2c3c2716b 100755 --- a/commands/system/dismiss-notifications.applescript +++ b/commands/system/dismiss-notifications.applescript @@ -14,18 +14,36 @@ # @raycast.author benyn # @raycast.authorURL github.com/benyn -tell application "System Events" - tell process "NotificationCenter" - if not (window "Notification Center" exists) then return - set alertGroups to groups of first UI element of first scroll area of first group of window "Notification Center" - repeat with aGroup in alertGroups - try - perform (first action of aGroup whose name contains "Close" or name contains "Clear") - on error errMsg - log errMsg - end try +tell application "System Events" to tell process "NotificationCenter" + -- Exit if there are no visible notifications. + if not (window "Notification Center" exists) then return + + -- `notificationContainer` refers to the UI element (of class `group`) holding notifications and can be either: + -- - A single, individual notification, or + -- - A collection of individual notifications and groups of stacked notifications. + set notificationContainer to a reference to group 1 of scroll area 1 of group 1 of group 1 of window "Notification Center" + + -- If it is a collection, close notifications and groups in reverse order to avoid index changes. + set notificationGroups to a reference to groups of notificationContainer + repeat with i from (number of notificationGroups) to 1 by -1 + set g to item i of notificationGroups + repeat with a in (actions of g whose description is "Close" or description starts with "Clear") + -- Ignore errors that happen if the last remaining item is an individual notification, + -- and `notificationCenter` is no longer a `group` of `group`s. + -- The final remaining notification will be closed in the second repeat statement below. + ignoring application responses + perform a + end ignoring end repeat - -- Show no message on success - return "" - end tell + end repeat + + -- Close the `notificationContainer` itself. This handles: + -- - A single, individual notification that was `notificationContainer` from the start, or + -- - The last remaining individual notification after the loop above. + repeat with a in (actions of notificationContainer whose description is "Close" or description starts with "Clear") + perform a + end repeat end tell + +-- Prevent Raycast from displaying the successful result message. +return diff --git a/commands/system/dock-autohide-toggle.sh b/commands/system/dock-autohide-toggle.sh new file mode 100755 index 000000000..5b05c740d --- /dev/null +++ b/commands/system/dock-autohide-toggle.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Toggle Dock Autohide +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🤖 +# @raycast.packageName System + +# Documentation: +# @raycast.description Toggle the Dock Autohide +# @raycast.author Jelte Lagendijk +# @raycast.authorURL https://raycast.com/j3lte + +autohide=$(defaults read com.apple.dock autohide) + +if [[ $autohide == 1 ]]; then + defaults write com.apple.dock autohide -bool false; killall Dock +else + defaults write com.apple.dock autohide -bool true; killall Dock +fi diff --git a/commands/system/dock-set-autohide.sh b/commands/system/dock-set-autohide.sh new file mode 100755 index 000000000..f3a4c0287 --- /dev/null +++ b/commands/system/dock-set-autohide.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Dock Set Autohide +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🤖 +# @raycast.argument1 { "type": "dropdown", "placeholder": "On/Off", "data": [{"title": "Off", "value": "false"}, {"title": "On", "value": "true"}] } +# @raycast.packageName System + +# Documentation: +# @raycast.description Set the Dock autohide +# @raycast.author Jelte Lagendijk +# @raycast.authorURL https://raycast.com/j3lte + +defaults write com.apple.dock autohide -bool $1; killall Dock diff --git a/commands/system/dock-set-position.sh b/commands/system/dock-set-position.sh new file mode 100755 index 000000000..de91f8452 --- /dev/null +++ b/commands/system/dock-set-position.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Dock Position +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🤖 +# @raycast.argument1 { "type": "dropdown", "placeholder": "Position on Screen", "data": [{"title": "Left", "value": "left"}, {"title": "Right", "value": "right"}, {"title": "Bottom", "value": "bottom"}] } +# @raycast.packageName System + +# Documentation: +# @raycast.description Set the position of the Dock in the screen +# @raycast.author Jelte Lagendijk +# @raycast.authorURL https://raycast.com/j3lte + +defaults write com.apple.dock orientation -string $1; killall Dock diff --git a/commands/system/inline-cpu-usage-percent.sh b/commands/system/inline-cpu-usage-percent.sh new file mode 100755 index 000000000..cfe464085 --- /dev/null +++ b/commands/system/inline-cpu-usage-percent.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title CPU Usage +# @raycast.mode inline +# @raycast.packageName System +# @raycast.refreshTime 10s + +# Optional parameters: +# @raycast.icon 🖥️ + +# Documentation: +# @raycast.description Display CPU usage percent +# @raycast.author Juan Luis Romero +# @raycast.authorURL https://github.com/JuanluR8 + + +output=$(top -l 1 | grep "CPU usage") +cpu_usage=$(echo "$output" | awk -F " " '{print $3}' | cut -d% -f1) + +echo "CPU Usage: ${cpu_usage}%" \ No newline at end of file diff --git a/commands/system/kill-a-process-on-port.sh b/commands/system/kill-a-process-on-port.sh new file mode 100755 index 000000000..c97f38f87 --- /dev/null +++ b/commands/system/kill-a-process-on-port.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Kill a process on PORT +# @raycast.mode compact + +# Optional parameters: +# @raycast.icon 🚫 +# @raycast.argument1 { "type": "text", "placeholder": "Ports (e.g. 3000 5000)" } + +# Documentation: +# @raycast.description Kill running processes on the given ports +# @raycast.author aaqifshafi +# @raycast.authorURL https://github.com/aaqifshafi + +if [ $# -eq 0 ]; then + echo "Provide at least one port number." + exit 1 +fi + +for port in "$@" +do + pid=$(lsof -ti tcp:$port) + if [ -n "$pid" ]; then + kill -9 $pid + echo "Killed process $pid on port $port" + else + echo "No process found on port $port" + fi +done diff --git a/commands/system/magic-keyboard-switcher/README.md b/commands/system/magic-keyboard-switcher/README.md new file mode 100644 index 000000000..a6ce88ad3 --- /dev/null +++ b/commands/system/magic-keyboard-switcher/README.md @@ -0,0 +1,21 @@ +# magic-keyboard-switcher +Script command to easility switch the bluetooth connectivity of a single Magic Keyboard between several computers. + +## How to setup + +1. Install [blueutil](https://github.com/toy/blueutil). You can use [brew](https://brew.sh/) - `brew install blueutil` +2. 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. +
+ Bluetooth menu +
+ +3. 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. +4. Remove `.template` from the file name. +5. Say Ok when prompted about giving Bluetooth permissions to Raycast after executing the script command. + +## How to switch the Magic Keyboard between computers + +It's desirable to have Raycast and this script command installed in both computers. + +First, run the script command in the one that has the keyboard currently connected. It will disconnect it and make it discoverable. +Second, run the script command in the other computer. It should connect it. diff --git a/commands/system/magic-keyboard-switcher/images/bluetooth menu.png b/commands/system/magic-keyboard-switcher/images/bluetooth menu.png new file mode 100644 index 000000000..de5d4070a Binary files /dev/null and b/commands/system/magic-keyboard-switcher/images/bluetooth menu.png differ diff --git a/commands/system/magic-keyboard-switcher/images/logo.png b/commands/system/magic-keyboard-switcher/images/logo.png new file mode 100644 index 000000000..200a262fe Binary files /dev/null and b/commands/system/magic-keyboard-switcher/images/logo.png differ diff --git a/commands/system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh b/commands/system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh new file mode 100755 index 000000000..e27d2b939 --- /dev/null +++ b/commands/system/magic-keyboard-switcher/magic-keyboard-switcher.template.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Dependency: This script requires `blueutil` cli installed: https://github.com/toy/blueutil +# Install via homebrew: `brew install blueutil` + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Magic Keyboard switcher +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon images/logo.png +# @raycast.packageName System + +# Documentation: +# @raycast.author blastik +# @raycast.authorURL https://github.com/blastik +# @raycast.description Switch a single magic keyboard between computers + +# blueutil location +BIN=/opt/homebrew/bin/blueutil + +# Your Magic Keyboard MAC Address +BTMAC='XX:XX:XX:XX:XX:XX' + +CMD_VAL="$($BIN --is-connected $BTMAC)" +CMD_UNPAIR="$BIN --unpair $BTMAC" +CMD_PAIR="$BIN --pair $BTMAC" +CMD_CONN="$BIN --connect $BTMAC" + +if ! command -v blueutil &> /dev/null; then + echo "blueutil command is required (https://github.com/toy/blueutil)."; + exit 1; +fi + +if [[ "$CMD_VAL" -eq 1 ]]; then + echo "Connected to $BTMAC" + echo "Going to disconnect $BTMAC" + $($CMD_UNPAIR) + if [[ $? -eq 0 ]]; then + echo "Disconnected from $BTMAC" + else + echo "Failed to disconnect from $BTMAC" + exit 1 + fi +else + echo "Not connected to $BTMAC" + $($CMD_PAIR) + sleep 1 + $($CMD_CONN) + if [[ $? -eq 0 ]]; then + echo "Connected to $BTMAC" + else + echo "Failed to connect to $BTMAC" + exit 1 + fi +fi diff --git a/commands/system/meeting_summary_script.swift b/commands/system/meeting_summary_script.swift new file mode 100755 index 000000000..57053400c --- /dev/null +++ b/commands/system/meeting_summary_script.swift @@ -0,0 +1,92 @@ +#!/usr/bin/swift + +// Required parameters: +// @raycast.schemaVersion 1 +// @raycast.title Copy Meeting Summary +// @raycast.mode silent +// @raycast.packageName System +// +// Optional parameters: +// @raycast.icon 📝 +// +// Documentation: +// @raycast.description Copies a summary of today's meetings to the clipboard. + +import AppKit +import EventKit + +let now = Date() +let calendar: Calendar = .current + +do { + let today: (startDate: Date, endDate: Date, events: [EKEvent]) + + do { + // Retrieve the range for today (from 00:00 to 23:59) + today.startDate = calendar.startOfDay(for: now) + today.endDate = calendar.date(byAdding: .day, value: 1, to: today.startDate)! + + // Retrieve all the events for today + let store = EKEventStore() + let predicate = store.predicateForEvents(withStart: today.startDate, end: today.endDate, calendars: nil) + today.events = store.events(matching: predicate) + .filter { !$0.isAllDay } // Exclude all-day events + .sorted { $0.startDate < $1.startDate } // Sort by start time + } + + let summary: String + if today.events.isEmpty { + summary = "No meetings scheduled for today." + } else { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .full + dateFormatter.timeStyle = .none + let todayString = dateFormatter.string(from: now) + + let timeFormatter = DateFormatter() + timeFormatter.dateStyle = .none + timeFormatter.timeStyle = .short + timeFormatter.timeZone = TimeZone.current + + let meetingList = today.events.map { event in + let startTime = timeFormatter.string(from: event.startDate) + let title = event.title ?? "Untitled Event" + let timezone = timeFormatter.timeZone.abbreviation() ?? "" + + var meetingInfo = timezone.isEmpty ? "• \(startTime): \(title)" : "• \(startTime) \(timezone): \(title)" + + // Add location if available + if let location = event.location, !location.isEmpty { + meetingInfo += " (\(location))" + } + + // Add notes if available (first line only to keep it concise) + if let notes = event.notes, !notes.isEmpty { + let firstLine = notes.components(separatedBy: .newlines).first ?? "" + let cleanedNotes = firstLine.trimmingCharacters(in: .whitespacesAndNewlines) + // Filter out junk characters (like the -::~: pattern) + let validNotes = cleanedNotes.filter { char in + char.isLetter || char.isNumber || char.isWhitespace || char.isPunctuation && !"-:~".contains(char) + } + if !validNotes.isEmpty && validNotes.count <= 100 && !validNotes.allSatisfy({ "-:~".contains($0) }) { + meetingInfo += "\n Notes: \(String(validNotes))" + } + } + + return meetingInfo + }.joined(separator: "\n") + + let meetingCount = today.events.count + + summary = """ +Meetings: +\(meetingList) +""" + } + + NSPasteboard.general.declareTypes([NSPasteboard.PasteboardType.string], owner: nil) + NSPasteboard.general.setString(summary, forType: NSPasteboard.PasteboardType.string) + print("Copied meeting summary to clipboard") +} catch { + print("Error retrieving calendar events: \(error)") +} \ No newline at end of file diff --git a/commands/system/ocr.swift b/commands/system/ocr.swift index 2b8d37df4..cb22349e7 100755 --- a/commands/system/ocr.swift +++ b/commands/system/ocr.swift @@ -21,7 +21,7 @@ import Cocoa import Vision let screenCapturePath = "/tmp/ocr.png" -let recognitionLanguages = ["en-US", "zh-CN"] +let recognitionLanguages = ["zh-Hans", "en-US"] let joiner = " " @discardableResult diff --git a/commands/system/otp.sh b/commands/system/otp.sh new file mode 100755 index 000000000..830ba3ded --- /dev/null +++ b/commands/system/otp.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Dependency: This script requires `apw`, `jq` and `awk` to be installed and in $PATH +# +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title One-Time Password +# @raycast.mode silent +# +# Optional parameters: +# @raycast.icon 🔑 +# @raycast.packageName System +# @raycast.argument1 { "type": "text", "placeholder": "Domain" } +# @raycast.argument2 { "type": "text", "placeholder": "Username Index", "optional": true } +# +# @raycast.description Get One-Time Password (OTP) from Apple Password Manager +# @raycast.author Angelos Michalopoulos +# @raycase.authorURL https://github.com/miagg + +if ! command -v apw &> /dev/null || ! command -v jq &> /dev/null || ! command -v awk &> /dev/null; then + echo "This function requires apw, jq and awk to be installed" + exit 1 +fi +UINDEX=$((${2:-1} - 1)) +CODES=$(apw otp get "$1" 2>/dev/null) +STATUS=$? +# ✋ If return code 9, not authenticated, run apw auth +if [ $STATUS -eq 9 ]; then + echo "Please authenticate first by running 'apw auth'" + exit 1 +fi +# ✋ If return code 3, domain not found, alert user +if [ $STATUS -eq 3 ]; then + echo "Domain $1 not found" + exit 1 +fi +# Grab available OTP codes for domain +CODES_COUNT=$(echo $CODES | jq '.results | length') +if [ $CODES_COUNT -gt 1 ]; then + CODE=$(echo $CODES | jq -r ".results[$UINDEX].code") + USERNAME=$(echo $CODES | jq -r ".results[$UINDEX].username") + if [ "$CODE" == "null" ]; then + echo "Please provide an index between 1 and $CODES_COUNT" + exit 1 + fi +else + CODE=$(echo $CODES | jq -r '.results[0].code') + USERNAME=$(echo $CODES | jq -r ".results[0].username") +fi +echo $CODE | pbcopy +echo "OTP code for $USERNAME copied to clipboard" \ No newline at end of file diff --git a/commands/system/paste-clipboard.sh b/commands/system/paste-clipboard.sh new file mode 100755 index 000000000..b2b738d0d --- /dev/null +++ b/commands/system/paste-clipboard.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Type Clipboard +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 📋 +# @raycast.packageName Type Clipboard in Search + +# Documentation: +# @raycast.description Takes your clipboard then types each character in the clipboard +# @raycast.author AlexGadd +# @raycast.authorURL https://raycast.com/AlexGadd + +osascript -e 'set clipboardContent to the clipboard' \ +-e 'set charCount to count of characters of clipboardContent' \ +-e 'tell application "System Events"' \ +-e ' repeat with i from 1 to charCount' \ +-e ' set theChar to character i of clipboardContent' \ +-e ' keystroke theChar' \ +-e ' end repeat' \ +-e 'end tell' diff --git a/commands/system/rename-videos-pictures.py b/commands/system/rename-videos-pictures.py new file mode 100755 index 000000000..f4f25c862 --- /dev/null +++ b/commands/system/rename-videos-pictures.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Rename Video +# @raycast.mode fullOutput + +# Optional parameters: +# @raycast.icon 📂 +# @raycast.argument1 { "type": "text", "placeholder": "Directory's absolute path", "optional": false } +# @raycast.argument2 { "type": "text", "placeholder": "Type (video/image/all)", "optional": true } +# @raycast.argument3 { "type": "text", "placeholder": "Dry Run (true/false)", "optional": true } + +# Documentation: +# @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 `--`. +# @raycast.author StepaniaH +# @raycast.authorURL https://github.com/StepaniaH + +import os +import sys +import datetime +import argparse +import re + +class RenameFilesAsDate: + def __init__(self, root_directory): + self.root_directory = os.path.expanduser(root_directory) + self.error_files = {} + self.video_extensions = ('.mp4', '.avi', '.mov', '.mkv', '.wmv', '.flv', '.webm', '.m4v', '.3gp') + self.image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.tiff', '.svg', '.heic') + + def rename_files(self, file_type='all', dry_run=False): + current_date = datetime.datetime.now().strftime("%m%d") + self._process_directory(self.root_directory, current_date, file_type, dry_run) + + if self.error_files: + print("\nThe following files could not be renamed:") + for original_path, error in self.error_files.items(): + print(f"{original_path}: {error}") + + def _is_already_renamed(self, filename, current_date): + """Check if the file has been named according to the target format""" + base_name = os.path.splitext(filename)[0] + pattern = re.compile(f'^.*-{current_date}-\\d+$') + return bool(pattern.match(base_name)) + + def _get_max_sequence_number(self, directory, current_date): + """Get the largest serial number existing in the current directory""" + max_seq = 0 + pattern = re.compile(f'^.*-{current_date}-(\\d+)$') + + for entry in os.listdir(directory): + match = pattern.match(os.path.splitext(entry)[0]) + if match: + seq_num = int(match.group(1)) + max_seq = max(max_seq, seq_num) + return max_seq + + def _process_directory(self, directory, current_date, file_type, dry_run): + folder_name = os.path.basename(directory) + supported_extensions = self._get_supported_extensions(file_type) + + # First collect the files that need to be renamed + files_to_rename = [] + for entry in os.listdir(directory): + entry_path = os.path.join(directory, entry) + + if os.path.isfile(entry_path): + if entry.lower().endswith(supported_extensions): + if not self._is_already_renamed(entry, current_date): + files_to_rename.append(entry) + elif os.path.isdir(entry_path): + self._process_directory(entry_path, current_date, file_type, dry_run) + + if files_to_rename: + # Get the largest serial number existing in the current directory + count = self._get_max_sequence_number(directory, current_date) + 1 + total_files = len(files_to_rename) + num_digits = len(str(total_files + count - 1)) + + # Rename collected files + for entry in sorted(files_to_rename): # Sort to ensure consistent rename order + entry_path = os.path.join(directory, entry) + new_name = f"{folder_name}-{current_date}-{count:0{num_digits}d}{os.path.splitext(entry)[1].lower()}" + new_path = os.path.join(directory, new_name) + + if dry_run: + print(f"Would rename: {entry} -> {new_name}") + else: + try: + os.rename(entry_path, new_path) + print(f"Renamed: {entry} -> {new_name}") + except OSError as e: + self.error_files[entry_path] = f"Rename failed: {str(e)}" + continue + count += 1 + + def _get_supported_extensions(self, file_type): + if file_type == 'video': + return self.video_extensions + elif file_type == 'image': + return self.image_extensions + return self.video_extensions + self.image_extensions + +def main(): + args = sys.argv[1:] + + directory = None + file_type = 'all' + dry_run = False + + if len(args) >= 1: + directory = args[0] + if len(args) >= 2 and args[1]: + file_type = args[1] + if len(args) >= 3 and args[2]: + dry_run = args[2].lower() == 'true' + + if not directory: + print("Error: Directory argument is required.") + sys.exit(1) + + renamer = RenameFilesAsDate(directory) + renamer.rename_files(file_type, dry_run) + +if __name__ == '__main__': + main() diff --git a/commands/system/reset-launchpad.sh b/commands/system/reset-launchpad.sh new file mode 100755 index 000000000..5df20819d --- /dev/null +++ b/commands/system/reset-launchpad.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Reset Launchpad +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🚀 +# @raycast.packageName System + +# Documentation: +# @raycast.description Resets the macOS Launchpad to its default state +# @raycast.author Zach Dawson +# @raycast.authorURL https://raycast.com/zdawz + +defaults write com.apple.dock ResetLaunchPad -bool true +killall Dock diff --git a/commands/system/sleep-timer.applescript b/commands/system/sleep-timer.applescript new file mode 100755 index 000000000..8cd9ae4ee --- /dev/null +++ b/commands/system/sleep-timer.applescript @@ -0,0 +1,22 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Sleep Timer +# @raycast.mode silent +# @raycast.description Put your Mac to sleep (in X minutes). +# @raycast.packageName System + +# Optional parameters: +# @raycast.icon 😴 +# @raycast.argument1 { "optional": true, "type": "text", "placeholder": "(in) minutes" } + +# Documentation: +# @raycast.author AndriiBarabash +# @raycast.authorURL https://github.com/AndriiBarabash + +on run argv + delay (item 1 of argv) * 60 + tell application "Finder" to sleep +end run + diff --git a/commands/system/toggle-desktop-widget.sh b/commands/system/toggle-desktop-widget.sh new file mode 100755 index 000000000..a78783604 --- /dev/null +++ b/commands/system/toggle-desktop-widget.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Toggle Desktop Widgets +# @raycast.mode silent + +# Optional parameters: +# @raycast.icon 🔄 + +# Documentation: +# @raycast.author Federico Zivolo +# @raycast.authorURL https://github.com/FezVrasta + +# Get the current value of the preference +current_value=$(defaults read com.apple.WindowManager StandardHideWidgets) + +# Toggle the value +if [[ $current_value == 1 ]]; then + new_value=0 +else + new_value=1 +fi + +# Write the new value to the preference +defaults write com.apple.WindowManager StandardHideWidgets -int $new_value diff --git a/commands/system/toggle-natural-scrolling-macos15.applescript b/commands/system/toggle-natural-scrolling-macos15.applescript new file mode 100755 index 000000000..710b7e435 --- /dev/null +++ b/commands/system/toggle-natural-scrolling-macos15.applescript @@ -0,0 +1,69 @@ +#!/usr/bin/osascript + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Toggle Natural Scrolling (macOS 15+) +# @raycast.mode silent +# @raycast.packageName System + +# Optional parameters: +# @raycast.icon 🖱 +# @raycast.author Raphael-KR +# @raycast.authorURL https://github.com/Raphael-KR +# @raycast.description Toggle natural trackpad/mouse scrolling setting for macOS 15.6.1+ + +set macVersion to system version of (system info) + +if macVersion is greater than or equal to "15" then + try + set isNaturalScrolling to (do shell script "defaults read .GlobalPreferences 'com.apple.swipescrolldirection' 2>/dev/null || echo '1'") + + if isNaturalScrolling is "1" then + do shell script "defaults write .GlobalPreferences 'com.apple.swipescrolldirection' -bool NO" + display notification "Natural Scrolling: OFF" with title "Trackpad Settings" + else + do shell script "defaults write .GlobalPreferences 'com.apple.swipescrolldirection' -bool YES" + display notification "Natural Scrolling: ON" with title "Trackpad Settings" + end if + + do shell script "/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u" + + on error e + display notification "Using GUI method as fallback" with title "Trackpad Settings" + + tell application "System Settings" + activate + set current pane to pane "com.apple.preference.trackpad" + end tell + + delay 0.6 + + tell application "System Events" + tell process "System Settings" + click radio button 2 of tab group 1 of window "Trackpad" + click checkbox 1 of tab group 1 of window "Trackpad" + end tell + end tell + + tell application "System Settings" to quit + end try + +else + display notification "For macOS 14 and earlier, use the original script" with title "Compatibility Note" + + tell application "System Settings" + activate + set current pane to pane "com.apple.preference.trackpad" + end tell + + delay 0.6 + + tell application "System Events" + tell process "System Settings" + click radio button 2 of tab group 1 of window "Trackpad" + click checkbox 1 of tab group 1 of window "Trackpad" + end tell + end tell + + tell application "System Settings" to quit +end if diff --git a/commands/system/toggle-natural-scrolling.applescript b/commands/system/toggle-natural-scrolling.applescript index 106652a37..1d3e13253 100755 --- a/commands/system/toggle-natural-scrolling.applescript +++ b/commands/system/toggle-natural-scrolling.applescript @@ -12,18 +12,32 @@ # @raycast.authorURL https://twitter.com/wileymarques # @raycast.description Script Command to change natural trackpad/mouse scrolling setting. Reverting the setting value each time. -tell application "System Preferences" - activate - set current pane to pane "com.apple.preference.trackpad" -end tell +set macVersion to system version of (system info) -delay 0.6 - -tell application "System Events" - tell process "System Preferences" - click radio button 2 of tab group 1 of window "Trackpad" - click checkbox 1 of tab group 1 of window "Trackpad" - end tell -end tell - -tell application "System Preferences" to quit +if macVersion is greater than or equal to "14" then + set isNaturalScrolling to (do shell script "defaults -currentHost read NSGlobalDomain com.apple.swipescrolldirection") + + if isNaturalScrolling is "1" then + do shell script "defaults -currentHost write NSGlobalDomain com.apple.swipescrolldirection -bool NO" + else + do shell script "defaults -currentHost write NSGlobalDomain com.apple.swipescrolldirection -bool YES" + end if + + do shell script "/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u" +else + tell application "System Settings" + activate + set current pane to pane "com.apple.preference.trackpad" + end tell + + delay 0.6 + + tell application "System Events" + tell process "System Preferences" + click radio button 2 of tab group 1 of window "Trackpad" + click checkbox 1 of tab group 1 of window "Trackpad" + end tell + end tell + + tell application "System Settings" to quit +end if diff --git a/commands/web-searches/google-maps.sh b/commands/web-searches/google-maps.sh index 345205af0..d856d504b 100755 --- a/commands/web-searches/google-maps.sh +++ b/commands/web-searches/google-maps.sh @@ -14,10 +14,14 @@ first_argument=${1// /+} second_argument=${2// /+} -if [ "$1" = "" ]; then - open "https://www.google.com/maps" -elif [ "$2" = "" ]; then - open "https://www.google.com/maps/search/$first_argument" +if [ "$1" != "" ]; then + if [ "$2" = "" ]; then + open "https://www.google.com/maps/dir/?api=1&origin=$first_argument" + else + open "https://www.google.com/maps/dir/?api=1&origin=$first_argument&destination=$second_argument" + fi +elif [ "$1" = "" ] && [ "$2" != "" ]; then + open "https://www.google.com/maps/dir/?api=1&origin=Current+Location&destination=$second_argument" else - open "https://www.google.com/maps/dir/$first_argument/$second_argument" + open "https://www.google.com/maps" fi diff --git a/commands/web-searches/images/rust.png b/commands/web-searches/images/rust.png new file mode 100644 index 000000000..1eaa7709d Binary files /dev/null and b/commands/web-searches/images/rust.png differ diff --git a/commands/web-searches/search-rust-docs.sh b/commands/web-searches/search-rust-docs.sh new file mode 100755 index 000000000..7c28cf948 --- /dev/null +++ b/commands/web-searches/search-rust-docs.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Required parameters: +# @raycast.schemaVersion 1 +# @raycast.title Search Rust Documentation +# @raycast.mode silent +# +# Optional parameters: +# @raycast.packageName Web Searches +# @raycast.icon images/rust.png +# @raycast.argument1 { "type": "text", "placeholder": "Name", "percentEncoded": true } +# +# Example query: +# Searching for `expect` will open this link in your browser: +# `https://doc.rust-lang.org/std/?search=expect`. +# +# Documentation: +# @raycast.author lemorage +# @raycast.authorURL https://raycast.com/lemorage +# @raycast.description Search Rust documentation + +query=$(echo "$1" | sed 's/ /%20/g') + +open "https://doc.rust-lang.org/std/?search=$query" diff --git a/commands/web-searches/search-script-command-marketplace.sh b/commands/web-searches/search-script-command-marketplace.sh index 17b36d23b..5280ec224 100755 --- a/commands/web-searches/search-script-command-marketplace.sh +++ b/commands/web-searches/search-script-command-marketplace.sh @@ -9,11 +9,11 @@ # @raycast.icon images/marketplace-logo.png # @raycast.argument1 { "type": "text", "placeholder": "query"} # @raycast.packageName Web Searches -# @raycast.description Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https://scriptcommands.com). +# @raycast.description Search for Script Commands in the [Unofficial Raycast Script Commands Marketplace](https://scriptcommands.alexandru.so). # Documentation: # @raycast.author Alexandru Turcanu # @raycast.authorURL https://github.com/Pondorasti -open "https://scriptcommands.com/?search=$1" +open "https://scriptcommands.alexandru.so/?search=$1" diff --git a/documentation/ARGUMENTS.md b/documentation/ARGUMENTS.md index cb240375e..e9d34d296 100644 --- a/documentation/ARGUMENTS.md +++ b/documentation/ARGUMENTS.md @@ -12,7 +12,7 @@ The value of the argument metadata parameter should be valid json with these fie | placeholder | Placeholder for the input field. | ✅ | 1.2.0+ | | 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+ | | 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+ | -| data | An array of objects with `title` and `value` properties, e.g.: `[{"title": "Item 1", "value": "1"}]| ✅ when `type`is`dropdown`. | +| data | An array of objects with `title` and `value` properties, e.g.: `[{"title": "Item 1", "value": "1"}]` | ✅ when `type` is `dropdown`. | 1.64.0+ | | ~~secure~~ | Deprecated in favor of `"type" = "password"` | | 1.18.0+ | 💡 **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)) diff --git a/documentation/OUTPUTMODES.md b/documentation/OUTPUTMODES.md index cd98677fb..b4f2f0ca2 100644 --- a/documentation/OUTPUTMODES.md +++ b/documentation/OUTPUTMODES.md @@ -23,7 +23,7 @@ In `inline` mode, the first line of output will be directly shown in the command Please 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. -# ANSII Supported Colors 🎨 +# ANSI Supported Colors 🎨 We support colors for `inline` and `fullOutput` mode scripts for you to customize generated output by changing its background and foreground color. diff --git a/templates/script-command.template.applescript b/templates/script-command.template.applescript index 392ac4f61..fe98b9c3a 100644 --- a/templates/script-command.template.applescript +++ b/templates/script-command.template.applescript @@ -2,7 +2,7 @@ # Raycast Script Command Template # -# Duplicate this file and remove ".template." from the filename to get started. +# Duplicate this file and remove ".template" from the filename to get started. # See full documentation here: https://github.com/raycast/script-commands # # Required parameters: diff --git a/templates/script-command.template.php b/templates/script-command.template.php index 99e524e0a..7d946f971 100644 --- a/templates/script-command.template.php +++ b/templates/script-command.template.php @@ -5,7 +5,7 @@ # Dependency: This script requires PHP # Install PHP: http://www.https://www.php.net/ # -# Duplicate this file and remove ".template." from the filename to get started. +# Duplicate this file and remove ".template" from the filename to get started. # See full documentation here: https://github.com/raycast/script-commands # # Required parameters: diff --git a/templates/script-command.template.py b/templates/script-command.template.py index 5b2ad7760..e91e99e6d 100755 --- a/templates/script-command.template.py +++ b/templates/script-command.template.py @@ -5,7 +5,7 @@ # Dependency: This script requires Python 3 # Install Python 3: https://www.python.org/downloads/release # -# Duplicate this file and remove ".template." from the filename to get started. +# Duplicate this file and remove ".template" from the filename to get started. # See full documentation here: https://github.com/raycast/script-commands # # Required parameters: diff --git a/templates/script-command.template.rb b/templates/script-command.template.rb index 125f8ac70..8638b88f1 100755 --- a/templates/script-command.template.rb +++ b/templates/script-command.template.rb @@ -5,7 +5,7 @@ # Dependency: This script requires Ruby # Install Ruby: http://www.ruby-lang.org/ # -# Duplicate this file and remove ".template." from the filename to get started. +# Duplicate this file and remove ".template" from the filename to get started. # See full documentation here: https://github.com/raycast/script-commands # # Required parameters: diff --git a/templates/script-command.template.sh b/templates/script-command.template.sh index e9b58a871..14be6c7ba 100755 --- a/templates/script-command.template.sh +++ b/templates/script-command.template.sh @@ -2,7 +2,7 @@ # Raycast Script Command Template # -# Duplicate this file and remove ".template." from the filename to get started. +# Duplicate this file and remove ".template" from the filename to get started. # See full documentation here: https://github.com/raycast/script-commands # # Required parameters: diff --git a/templates/script-command.template.swift b/templates/script-command.template.swift index 013aabb7a..ece06d55b 100755 --- a/templates/script-command.template.swift +++ b/templates/script-command.template.swift @@ -2,7 +2,7 @@ // Raycast Script Command Template // -// Duplicate this file and remove ".template." from the filename to get started. +// Duplicate this file and remove ".template" from the filename to get started. // See full documentation here: https://github.com/raycast/script-commands // // Required parameters: