Raycast has a nice setup for making shell scripts into actions. I have one wrapper for emacsclient that just invokes a GUI Emacs window from a running Emacs server and then foregrounds the window:
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Emacsd
# @raycast.mode silent
# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Emacs
# Documentation:
# @raycast.description Launch Emacs
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph
/opt/homebrew/bin/emacsclient -c --no-wait
osascript -e 'tell application "Emacs" to activate'
… and I made another one that lets me trigger git-auto-sync
operations when I’m going to step away for a while and want to make sure everything in my notes repo has been pushed:
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Sync Notes
# @raycast.mode silent
# Optional parameters:
# @raycast.icon 🤖
# Documentation:
# @raycast.description Run git-auto-sync on notes directory
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph
set -euo pipefail
IFS=$'\n\t'
# ——— set up a user‐level log directory ———
LOGDIR="$HOME/Library/Logs/git-auto-sync"
mkdir -p "$LOGDIR"
LOGFILE="$LOGDIR/sync.log"
on_error() {
local exit_code=$?
local lineno=$1
local msg="ERROR on line $lineno (exit $exit_code)"
echo "$(date '+%Y-%m-%d %H:%M:%S') ▶ $msg" >>"$LOGFILE"
logger -t git-auto-sync "$msg"
terminal-notifier \
-title "🔥🤖🔥 git-auto-sync FAILED" \
-message "See Console.app or $LOGFILE" \
-sound default
exit $exit_code
}
trap 'on_error $LINENO' ERR
{
echo "=== Sync started at $(date '+%Y-%m-%d %H:%M:%S') ==="
logger -t git-auto-sync "Sync started"
cd "$HOME/notes"
/opt/homebrew/bin/git-auto-sync s
echo "=== Sync succeeded at $(date '+%Y-%m-%d %H:%M:%S') ==="
logger -t git-auto-sync "Sync succeeded"
} >>"$LOGFILE" 2>&1
terminal-notifier \
-title "🤖 git-auto-sync" \
-message "Sync complete" \
-sound default
It uses terminal-notifier to let me know things either worked:
… or didn’t:
I pinned both actions to the top of my Raycast window:
Left to its own devices, git-auto-sync does its thing every few minutes. This is just a way to know it’s safe to close the laptop if I’ve been working in my notes.
I really like Raycast. The number of supported apps in the store is pretty impressive, and there’s a nice SDK/API for making GUI tools. My work Asana is much easier to deal with when I can make a card without having to actually be in the Asana web app, and without having to deal with a plaintext syntax to express which project/board, who owns it, the deadline, etc.