diff --git a/.hammerspoon/init.fnl b/.hammerspoon/init.fnl
index 2b7039db..69bdc8bc 100644
--- a/.hammerspoon/init.fnl
+++ b/.hammerspoon/init.fnl
@@ -68,8 +68,7 @@
(string.find orig-url "^https://doi.org/")
((open-with :firefox) (.. "https://sci-hub.st/" orig-url))
(string.find orig-url "^https://.*[.]usps.com/")
- ((open-with :firefox) orig-url)
- (open-url :firefox))))
+ ((open-with :firefox) orig-url) (open-url :firefox))))
(set hs.urlevent.httpCallback
(fn [scheme host params url]
@@ -78,28 +77,72 @@
redirect (partial run "curl -Ls -o /dev/null -w %{url_effective}")
orig-url (de-utm url)
redirected (de-utm (redirect orig-url))]
+ ;; (hs.urlevent.openURLWithBundle orig-url bundle-ids.firefox))))
(handle redirected orig-url))))
-; (hs.urlevent.openURLWithBundle orig-url bundle-ids.firefox))))
+;;; Elgato Key Light Air
+
+;; finding the hostname for the key light air
+; (local browser (: (hs.bonjour.new) :findServices :_elg._tcp.
+; (fn [browser _ _ service _]
+; (service:resolve #(log :info (: ($1:hostname) :sub 1 -2)))
+; (browser:stop))))
+
+(fn update-key-light-air [on?]
+ (let [url "http://elgato-key-light-air-5c9e.local:9123/elgato/lights"
+ on (if on? 1 0)
+ data (hs.json.encode {:lights [{: on}]})]
+ (hs.http.doRequest url :PUT data)))
+
+(fn docked? []
+ (accumulate [docked? false _ v (pairs (hs.usb.attachedDevices)) &until docked?]
+ (or docked? (= v.productName "CalDigit Thunderbolt 3 Audio"))))
+
+(local key-light-air-watcher
+ (let [{: watcher} hs.caffeinate]
+ (watcher.new #(when (docked?)
+ (match $1
+ watcher.screensDidLock (update-key-light-air false)
+ watcher.screensDidSleep (update-key-light-air false)
+ watcher.screensDidUnlock (update-key-light-air true)
+ watcher.screensDidWake (update-key-light-air true))))))
+
+(when (docked?)
+ (key-light-air-watcher:start))
+
+(local usb-watcher (: (hs.usb.watcher.new #(let [{: eventType : productName} $1]
+ (when (= productName
+ "CalDigit Thunderbolt 3 Audio")
+ (match eventType
+ :added (do
+ (update-key-light-air true)
+ (key-light-air-watcher:start))
+ :removed (do
+ (update-key-light-air false)
+ (key-light-air-watcher:stop))))))
+ :start))
;;; Spoons
(: (hs.loadSpoon :ReloadConfiguration) :start)
-(hs.loadSpoon :Quitter)
+; (hs.loadSpoon :Quitter)
-;; fnlfmt: skip
-(set spoon.Quitter.quitAppsAfter
- {:Calendar 30
- :Discord 300
- :MailMate 600
- :Messages 300
- :Reeder 600
- :Slack 300
- :Telegram 300
- :Twitterrific 300})
-
-(spoon.Quitter:start)
+; ;; fnlfmt: skip
+; (set spoon.Quitter.quitAppsAfter
+; {:Calendar 30
+; :Discord 300
+; :MailMate 600
+; :Messages 300
+; :Reeder 600
+; ; :Slack 300
+; :Telegram 300
+; :Twitterrific 300})
+
+; (spoon.Quitter:start)
+
+(when (hs.fs.attributes :local.fnl)
+ (require :local))
(: (hs.notify.new {:title :Hammerspoon
:informativeText "Config loaded"