diff --git a/config/hammerspoon/init.lua b/config/hammerspoon/init.lua
index f09cbda..b017fc3 100644
--- a/config/hammerspoon/init.lua
+++ b/config/hammerspoon/init.lua
@@ -114,7 +114,7 @@ function focusOrOpeniTerm()
end
end
-hs.hotkey.bind({ "cmd", "ctrl" }, "T", focusOrOpeniTerm)
+hs.hotkey.bind({ "cmd", "ctrl" }, "T", focusOrOpenGhostty)
--------------------------------------------------------------------
-- Open new / focus existing browser window in current desktop space
@@ -369,8 +369,6 @@ hs.hotkey.bind({ "cmd", "shift" }, "space", function()
click menu item "New Tab to the Right" of menu "Tab" of menu bar 1
end tell
- delay 0.01
-
set URL of active tab of front window to "https://perplexity.ai"
end if
end tell
@@ -380,6 +378,34 @@ hs.hotkey.bind({ "cmd", "shift" }, "space", function()
))
end)
+-- Open new / focus existing Discord window in current desktop space
+
+hs.hotkey.bind({ "cmd", "ctrl" }, "R", function()
+ local app = "Discord"
+
+ wf_app = wf.new(false):setAppFilter(app, { currentSpace = true })
+
+ local wins = wf_app:getWindows()
+ local count = 0
+ for _ in pairs(wins) do
+ count = count + 1
+ end
+
+ if count > 0 then
+ wf_app:getWindows()[1]:focus()
+ else
+ hs.osascript.applescript(string.format(
+ [[
+ tell application "System Events" to tell process "%s"
+ click menu item "New Window" of menu "File" of menu bar 1
+ set frontmost to true
+ end tell
+ ]],
+ app
+ ))
+ end
+end)
+
---------------------------------------------------------------------------
-- DESKTOP SWITCHING (axed)
-- Retroactive note: it should be harder, not easier, to context-switch :P
diff --git a/config/iterm2/com.googlecode.iterm2.plist b/config/iterm2/com.googlecode.iterm2.plist
index 1dcc5d1..153f93c 100644
--- a/config/iterm2/com.googlecode.iterm2.plist
+++ b/config/iterm2/com.googlecode.iterm2.plist
@@ -436,6 +436,26 @@ The script should do this: \(ai.prompt)
Red Component
0.1234394758939743
+ Ansi 0 Color (Dark)
+
+ Blue Component
+ 0.12343787401914597
+ Green Component
+ 0.12343578040599823
+ Red Component
+ 0.1234394758939743
+
+ Ansi 0 Color (Light)
+
+ Blue Component
+ 0.25882352941176473
+ Color Space
+ sRGB
+ Green Component
+ 0.21176470588235294
+ Red Component
+ 0.027450980392156862
+
Ansi 1 Color
Blue Component
@@ -445,6 +465,26 @@ The script should do this: \(ai.prompt)
Red Component
0.97170770168304443
+ Ansi 1 Color (Dark)
+
+ Blue Component
+ 0.095619738101959229
+ Green Component
+ 0.067135065793991089
+ Red Component
+ 0.97170770168304443
+
+ Ansi 1 Color (Light)
+
+ Blue Component
+ 0.18431372549019609
+ Color Space
+ sRGB
+ Green Component
+ 0.19607843137254902
+ Red Component
+ 0.86274509803921573
+
Ansi 10 Color
Blue Component
@@ -454,6 +494,26 @@ The script should do this: \(ai.prompt)
Red Component
0.11459558457136154
+ Ansi 10 Color (Dark)
+
+ Blue Component
+ 0.379891037940979
+ Green Component
+ 0.82695949077606201
+ Red Component
+ 0.11459558457136154
+
+ Ansi 10 Color (Light)
+
+ Blue Component
+ 0.45882352941176469
+ Color Space
+ sRGB
+ Green Component
+ 0.43137254901960786
+ Red Component
+ 0.34509803921568627
+
Ansi 11 Color
Blue Component
@@ -463,6 +523,26 @@ The script should do this: \(ai.prompt)
Red Component
0.95126962661743164
+ Ansi 11 Color (Dark)
+
+ Blue Component
+ 0.035377603024244308
+ Green Component
+ 0.74144089221954346
+ Red Component
+ 0.95126962661743164
+
+ Ansi 11 Color (Light)
+
+ Blue Component
+ 0.51372549019607838
+ Color Space
+ sRGB
+ Green Component
+ 0.4823529411764706
+ Red Component
+ 0.396078431372549
+
Ansi 12 Color
Blue Component
@@ -472,6 +552,26 @@ The script should do this: \(ai.prompt)
Red Component
0.061654355376958847
+ Ansi 12 Color (Dark)
+
+ Blue Component
+ 0.838664710521698
+ Green Component
+ 0.50448882579803467
+ Red Component
+ 0.061654355376958847
+
+ Ansi 12 Color (Light)
+
+ Blue Component
+ 0.58823529411764708
+ Color Space
+ sRGB
+ Green Component
+ 0.58039215686274515
+ Red Component
+ 0.51372549019607838
+
Ansi 13 Color
Blue Component
@@ -481,6 +581,26 @@ The script should do this: \(ai.prompt)
Red Component
0.32478702068328857
+ Ansi 13 Color (Dark)
+
+ Blue Component
+ 0.72698760032653809
+ Green Component
+ 0.3135044276714325
+ Red Component
+ 0.32478702068328857
+
+ Ansi 13 Color (Light)
+
+ Blue Component
+ 0.7686274509803922
+ Color Space
+ sRGB
+ Green Component
+ 0.44313725490196076
+ Red Component
+ 0.42352941176470588
+
Ansi 14 Color
Blue Component
@@ -490,6 +610,26 @@ The script should do this: \(ai.prompt)
Red Component
0.059441849589347839
+ Ansi 14 Color (Dark)
+
+ Blue Component
+ 0.85764402151107788
+ Green Component
+ 0.4900696873664856
+ Red Component
+ 0.059441849589347839
+
+ Ansi 14 Color (Light)
+
+ Blue Component
+ 0.63137254901960782
+ Color Space
+ sRGB
+ Green Component
+ 0.63137254901960782
+ Red Component
+ 0.57647058823529407
+
Ansi 15 Color
Blue Component
@@ -499,6 +639,26 @@ The script should do this: \(ai.prompt)
Red Component
1
+ Ansi 15 Color (Dark)
+
+ Blue Component
+ 1
+ Green Component
+ 1
+ Red Component
+ 1
+
+ Ansi 15 Color (Light)
+
+ Blue Component
+ 0.8901960784313725
+ Color Space
+ sRGB
+ Green Component
+ 0.96470588235294119
+ Red Component
+ 0.99215686274509807
+
Ansi 2 Color
Blue Component
@@ -508,6 +668,26 @@ The script should do this: \(ai.prompt)
Red Component
0.17600196599960327
+ Ansi 2 Color (Dark)
+
+ Blue Component
+ 0.36823004484176636
+ Green Component
+ 0.77383565902709961
+ Red Component
+ 0.17600196599960327
+
+ Ansi 2 Color (Light)
+
+ Blue Component
+ 0.0
+ Color Space
+ sRGB
+ Green Component
+ 0.59999999999999998
+ Red Component
+ 0.52156862745098043
+
Ansi 3 Color
Blue Component
@@ -517,6 +697,26 @@ The script should do this: \(ai.prompt)
Red Component
0.92706489562988281
+ Ansi 3 Color (Dark)
+
+ Blue Component
+ 0.060177117586135864
+ Green Component
+ 0.72761225700378418
+ Red Component
+ 0.92706489562988281
+
+ Ansi 3 Color (Light)
+
+ Blue Component
+ 0.0
+ Color Space
+ sRGB
+ Green Component
+ 0.53725490196078429
+ Red Component
+ 0.70980392156862748
+
Ansi 4 Color
Blue Component
@@ -526,6 +726,26 @@ The script should do this: \(ai.prompt)
Red Component
0.16567224264144897
+ Ansi 4 Color (Dark)
+
+ Blue Component
+ 0.82454067468643188
+ Green Component
+ 0.51804500818252563
+ Red Component
+ 0.16567224264144897
+
+ Ansi 4 Color (Light)
+
+ Blue Component
+ 0.82352941176470584
+ Color Space
+ sRGB
+ Green Component
+ 0.54509803921568623
+ Red Component
+ 0.14901960784313725
+
Ansi 5 Color
Blue Component
@@ -535,6 +755,26 @@ The script should do this: \(ai.prompt)
Red Component
0.30770933628082275
+ Ansi 5 Color (Dark)
+
+ Blue Component
+ 0.71787959337234497
+ Green Component
+ 0.35215187072753906
+ Red Component
+ 0.30770933628082275
+
+ Ansi 5 Color (Light)
+
+ Blue Component
+ 0.50980392156862742
+ Color Space
+ sRGB
+ Green Component
+ 0.21176470588235294
+ Red Component
+ 0.82745098039215681
+
Ansi 6 Color
Blue Component
@@ -544,6 +784,26 @@ The script should do this: \(ai.prompt)
Red Component
0.061654355376958847
+ Ansi 6 Color (Dark)
+
+ Blue Component
+ 0.838664710521698
+ Green Component
+ 0.50448882579803467
+ Red Component
+ 0.061654355376958847
+
+ Ansi 6 Color (Light)
+
+ Blue Component
+ 0.59607843137254901
+ Color Space
+ sRGB
+ Green Component
+ 0.63137254901960782
+ Red Component
+ 0.16470588235294117
+
Ansi 7 Color
Blue Component
@@ -553,6 +813,26 @@ The script should do this: \(ai.prompt)
Red Component
0.84028750658035278
+ Ansi 7 Color (Dark)
+
+ Blue Component
+ 0.89713811874389648
+ Green Component
+ 0.8579363226890564
+ Red Component
+ 0.84028750658035278
+
+ Ansi 7 Color (Light)
+
+ Blue Component
+ 0.83529411764705885
+ Color Space
+ sRGB
+ Green Component
+ 0.90980392156862744
+ Red Component
+ 0.93333333333333335
+
Ansi 8 Color
Blue Component
@@ -562,6 +842,26 @@ The script should do this: \(ai.prompt)
Red Component
0.84028750658035278
+ Ansi 8 Color (Dark)
+
+ Blue Component
+ 0.89713811874389648
+ Green Component
+ 0.8579363226890564
+ Red Component
+ 0.84028750658035278
+
+ Ansi 8 Color (Light)
+
+ Blue Component
+ 0.21176470588235294
+ Color Space
+ sRGB
+ Green Component
+ 0.16862745098039217
+ Red Component
+ 0.0
+
Ansi 9 Color
Blue Component
@@ -571,6 +871,26 @@ The script should do this: \(ai.prompt)
Red Component
0.87161564826965332
+ Ansi 9 Color (Dark)
+
+ Blue Component
+ 0.1818375289440155
+ Green Component
+ 0.20686990022659302
+ Red Component
+ 0.87161564826965332
+
+ Ansi 9 Color (Light)
+
+ Blue Component
+ 0.086274509803921567
+ Color Space
+ sRGB
+ Green Component
+ 0.29411764705882354
+ Red Component
+ 0.79607843137254897
+
BM Growl
Background Color
@@ -582,6 +902,26 @@ The script should do this: \(ai.prompt)
Red Component
0.07621997594833374
+ Background Color (Dark)
+
+ Blue Component
+ 0.076218985021114349
+ Green Component
+ 0.076217696070671082
+ Red Component
+ 0.07621997594833374
+
+ Background Color (Light)
+
+ Blue Component
+ 0.8901960784313725
+ Color Space
+ sRGB
+ Green Component
+ 0.96470588235294119
+ Red Component
+ 0.99215686274509807
+
Background Image Location
Badge Color
@@ -597,6 +937,32 @@ The script should do this: \(ai.prompt)
Red Component
1
+ Badge Color (Dark)
+
+ Alpha Component
+ 0.5
+ Blue Component
+ 0.0
+ Color Space
+ sRGB
+ Green Component
+ 0.1491314172744751
+ Red Component
+ 1
+
+ Badge Color (Light)
+
+ Alpha Component
+ 0.5
+ Blue Component
+ 0.13960540294647217
+ Color Space
+ P3
+ Green Component
+ 0.25479039549827576
+ Red Component
+ 0.92929404973983765
+
Blinking Cursor
Blur
@@ -610,14 +976,42 @@ The script should do this: \(ai.prompt)
Red Component
0.84028750658035278
+ Bold Color (Dark)
+
+ Blue Component
+ 0.89713811874389648
+ Green Component
+ 0.8579363226890564
+ Red Component
+ 0.84028750658035278
+
+ Bold Color (Light)
+
+ Blue Component
+ 0.45882352941176469
+ Color Space
+ sRGB
+ Green Component
+ 0.43137254901960786
+ Red Component
+ 0.34509803921568627
+
+ Brighten Bold Text (Dark)
+
+ Brighten Bold Text (Light)
+
Character Encoding
4
Close Sessions On End
Columns
- 158
+ 168
Command
+ Cursor Boost (Dark)
+ 0.0
+ Cursor Boost (Light)
+ 0.0
Cursor Color
Blue Component
@@ -627,6 +1021,26 @@ The script should do this: \(ai.prompt)
Red Component
0.72549021244049072
+ Cursor Color (Dark)
+
+ Blue Component
+ 0.72549021244049072
+ Green Component
+ 0.72549021244049072
+ Red Component
+ 0.72549021244049072
+
+ Cursor Color (Light)
+
+ Blue Component
+ 0.51372549019607838
+ Color Space
+ sRGB
+ Green Component
+ 0.4823529411764706
+ Red Component
+ 0.396078431372549
+
Cursor Guide Color
Alpha Component
@@ -640,6 +1054,32 @@ The script should do this: \(ai.prompt)
Red Component
0.70213186740875244
+ Cursor Guide Color (Dark)
+
+ Alpha Component
+ 0.25
+ Blue Component
+ 1
+ Color Space
+ sRGB
+ Green Component
+ 0.9268307089805603
+ Red Component
+ 0.70213186740875244
+
+ Cursor Guide Color (Light)
+
+ Alpha Component
+ 0.25
+ Blue Component
+ 0.99125725030899048
+ Color Space
+ P3
+ Green Component
+ 0.92047786712646484
+ Red Component
+ 0.74862593412399292
+
Cursor Text Color
Blue Component
@@ -649,6 +1089,26 @@ The script should do this: \(ai.prompt)
Red Component
0.062745101749897003
+ Cursor Text Color (Dark)
+
+ Blue Component
+ 0.062745101749897003
+ Green Component
+ 0.062745101749897003
+ Red Component
+ 0.062745101749897003
+
+ Cursor Text Color (Light)
+
+ Blue Component
+ 0.83529411764705885
+ Color Space
+ sRGB
+ Green Component
+ 0.90980392156862744
+ Red Component
+ 0.93333333333333335
+
Custom Command
No
Custom Directory
@@ -661,6 +1121,10 @@ The script should do this: \(ai.prompt)
Faint Text Alpha
0.5
+ Faint Text Alpha (Dark)
+ 0.5
+ Faint Text Alpha (Light)
+ 0.5
Flashing Bell
Foreground Color
@@ -672,6 +1136,26 @@ The script should do this: \(ai.prompt)
Red Component
0.84028750658035278
+ Foreground Color (Dark)
+
+ Blue Component
+ 0.89713811874389648
+ Green Component
+ 0.8579363226890564
+ Red Component
+ 0.84028750658035278
+
+ Foreground Color (Light)
+
+ Blue Component
+ 0.51372549019607838
+ Color Space
+ sRGB
+ Green Component
+ 0.4823529411764706
+ Red Component
+ 0.396078431372549
+
Guid
093812C0-CFC5-4622-AB39-AD24DB22E05B
Horizontal Spacing
@@ -1130,18 +1614,74 @@ The script should do this: \(ai.prompt)
Red Component
0.0
+ Link Color (Dark)
+
+ Alpha Component
+ 1
+ Blue Component
+ 0.73423302173614502
+ Color Space
+ sRGB
+ Green Component
+ 0.35916060209274292
+ Red Component
+ 0.0
+
+ Link Color (Light)
+
+ Alpha Component
+ 1
+ Blue Component
+ 0.7093239426612854
+ Color Space
+ P3
+ Green Component
+ 0.35333043336868286
+ Red Component
+ 0.14513972401618958
+
Load Shell Integration Automatically
+ Match Background Color (Dark)
+
+ Alpha Component
+ 1
+ Blue Component
+ 0.0
+ Color Space
+ P3
+ Green Component
+ 1
+ Red Component
+ 1
+
+ Match Background Color (Light)
+
+ Alpha Component
+ 1
+ Blue Component
+ 0.0
+ Color Space
+ P3
+ Green Component
+ 1
+ Red Component
+ 1
+
+ Minimum Contrast (Dark)
+ 0.0
+ Minimum Contrast (Light)
+ 0.0
Mouse Reporting
Name
Default
Non Ascii Font
- Monaco 12
+ MesloLGS-NF-Regular 12
Non-ASCII Anti Aliased
Normal Font
- MesloLGS-NF-Regular 13
+ HackNerdFontComplete-Regular 13
Option Key Sends
0
Prompt Before Closing 2
@@ -1149,7 +1689,7 @@ The script should do this: \(ai.prompt)
Right Option Key Sends
0
Rows
- 46
+ 47
Screen
-1
Scrollback Lines
@@ -1163,6 +1703,26 @@ The script should do this: \(ai.prompt)
Red Component
0.84028750658035278
+ Selected Text Color (Dark)
+
+ Blue Component
+ 0.89713811874389648
+ Green Component
+ 0.8579363226890564
+ Red Component
+ 0.84028750658035278
+
+ Selected Text Color (Light)
+
+ Blue Component
+ 0.45882352941176469
+ Color Space
+ sRGB
+ Green Component
+ 0.43137254901960786
+ Red Component
+ 0.34509803921568627
+
Selection Color
Blue Component
@@ -1172,12 +1732,36 @@ The script should do this: \(ai.prompt)
Red Component
0.1234394758939743
+ Selection Color (Dark)
+
+ Blue Component
+ 0.12343787401914597
+ Green Component
+ 0.12343578040599823
+ Red Component
+ 0.1234394758939743
+
+ Selection Color (Light)
+
+ Blue Component
+ 0.83529411764705885
+ Color Space
+ sRGB
+ Green Component
+ 0.90980392156862744
+ Red Component
+ 0.93333333333333335
+
Send Code When Idle
Shortcut
Silence Bell
+ Smart Cursor Color (Dark)
+
+ Smart Cursor Color (Light)
+
Sync Title
Tags
@@ -1192,10 +1776,32 @@ The script should do this: \(ai.prompt)
Use Bright Bold
+ Use Bright Bold (Dark)
+
+ Use Bright Bold (Light)
+
+ Use Cursor Guide (Dark)
+
+ Use Cursor Guide (Light)
+
Use Italic Font
Use Non-ASCII Font
+ Use Selected Text Color (Dark)
+
+ Use Selected Text Color (Light)
+
+ Use Separate Colors for Light and Dark Mode
+
+ Use Tab Color (Dark)
+
+ Use Tab Color (Light)
+
+ Use Underline Color (Dark)
+
+ Use Underline Color (Light)
+
Vertical Spacing
1
Visual Bell
@@ -2037,7 +2643,7 @@ The script should do this: \(ai.prompt)
Print In Black And White
ShowFullScreenTabBar
-
+
SmartPlacement
SoundForEsc
diff --git a/scripts/mbackup b/scripts/mbackup
deleted file mode 100755
index 99180ab..0000000
--- a/scripts/mbackup
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bb
-
-(require '[clojure.string :as str :refer [split]])
-(require '[babashka.tasks :as tasks :refer [shell]])
-
-(def drive-dest "turtlebasket-gdrive:/macbook-air-m1")
-(def paths ["Desktop"
- "Documents/Personal Knowledge Base"
- "Documents/Berkeley Notes"])
-
-;; currently not used
-(def exclude ["*.swp" ".git" "node_modules" "__pycache__" ".DS_Store"])
-
-(for [path paths]
- (future
- (let [res
- (shell "rclone" "sync"
- path
- (format "%s/%s" drive-dest (-> path (split #"/") last))
- "--progress" "--retries" 1 "--delete-excluded")]
- (if (= (get res "exit") 0)
- (println (format "Backed up %s" path))
- (println (get res "error"))))))
- ;; (for [item exclude] (cons "--exclude" item))))
diff --git a/scripts/ntfy-me b/scripts/ntfy-me
new file mode 100755
index 0000000..7d53221
--- /dev/null
+++ b/scripts/ntfy-me
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+#
+# ntfy-me — run any command, then send ntfy success/failure notification (via curl)
+#
+# Usage:
+# ntfy-me [args...]
+#
+# Example:
+# ntfy-me make build
+# ntfy-me bash -c "sleep 10 && false"
+# ntfy-me ls /nonexistent
+#
+# Notes:
+# - Requires $NTFY_ME_TOPIC set (e.g., mytopic)
+# - Optional $NTFY_HOST (defaults to https://ntfy.sh)
+# - Captures exit code and reports SUCCESS/FAILURE via ntfy with duration.
+
+set -uo pipefail # no `-e`, so we can handle nonzero exits ourselves
+
+if [ -z "${NTFY_ME_TOPIC:-}" ]; then
+ echo "Error: NTFY_ME_TOPIC environment variable not set."
+ echo "Set it like: export NTFY_ME_TOPIC=mytopic"
+ exit 1
+fi
+
+# Set default ntfy host if not provided
+NTFY_HOST="${NTFY_HOST:-https://ntfy.sh}"
+
+if [ $# -lt 1 ]; then
+ echo "Usage: $0 [args...]"
+ exit 1
+fi
+
+# Reconstruct command with proper quoting for display
+original_cmd=""
+for arg in "$@"; do
+ if [[ "$arg" =~ [[:space:]] ]]; then
+ original_cmd="$original_cmd \"$arg\""
+ else
+ original_cmd="$original_cmd $arg"
+ fi
+done
+original_cmd="${original_cmd# }" # Remove leading space
+
+start_time=$(date +%s)
+hostname=$(hostname)
+
+# Run the command directly, preserving exit code
+"$@"
+code=$?
+
+end_time=$(date +%s)
+elapsed=$((end_time - start_time))
+duration="$(printf '%02dh:%02dm:%02ds' $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)))"
+
+if [ $code -eq 0 ]; then
+ title="✅ Command exited - SUCCESS"
+else
+ title="❌ Command exited - FAILURE"
+fi
+
+# Truncate if too long (keep first 100 chars + "..." if truncated)
+cmd_str="$original_cmd"
+if [ ${#cmd_str} -gt 100 ]; then
+ cmd_str="${cmd_str:0:100}..."
+fi
+
+body="Command: $cmd_str
+Host: $hostname
+Duration: $duration
+Exit code: $code"
+
+curl -fsS -X POST \
+ -H "Title: $title" \
+ -d "$body" \
+ "$NTFY_HOST/$NTFY_ME_TOPIC" >/dev/null 2>&1 || echo "Warning: failed to send ntfy notification" >&2
+
+exit $code