my personal dotfiles managed by dotbot, zinit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

926 lines
44 KiB

{
;; ! | means mandatory
;; # | means optional
;; !! | mandatory command + control + optional + shift (hyper)
;; ## | optional any
;; to understand better how modifiers work in karabiner
;; https://pqrs.org/osx/karabiner/json.html#from-event-definition-modifiers
;; C | left_command
;; T | left_control
;; O | left_option
;; S | left_shift
;; F | fn
;; Q | right_command
;; W | right_control
;; E | right_option
;; R | right_shift
;; need to prefix C T O S F with ! or #
;; https://github.com/nikitavoloboev/dotfiles/blob/master/karabiner/karabiner.edn
:profiles
{:goku {:default true
:sim 50 ;; simultaneous_threshold_milliseconds (def: 50)
;; keys need to be pressed within this threshold to be considered simultaneous
:delay 0 ;; to_delayed_action_delay_milliseconds (def: 500)
;; time after which the key press is delayed
:alone 85 ;; to_if_alone_timeout_milliseconds (def: 1000)
;; hold for .. ms to register single tap
:held 500 ;; to_if_held_down_threshold_milliseconds (def: 500)
;; key is fired twice when 500ms is elapsed (otherwise seen as a hold command)
}}
:templates {
:alfred "osascript -e 'tell application \"Alfred 4\" to run trigger \"%s\" in workflow \"%s\" with argument \"%s\"'"
:km "osascript -e 'tell application \"Keyboard Maestro Engine\" to do script \"%s\"'"
:open "open \"%s\""
}
:devices {
:kybs [ ;; default for all keyboards
{:vendor_id 1452}
{:vendor_id 9494 :product_id 17}
]
:apple [{:vendor_id 1452 :product_id 832}]
:quickfire [{:vendor_id 9494 :product_id 17}]
}
:applications {:chrome ["^com\\.google\\.Chrome$"]
:chrome-canary [ "^com\\.google\\.Chrome\\.canary$"]
:chromes ["^com\\.google\\.Chrome$" "^com\\.google\\.Chrome\\.canary$"]
:ctrlnp ["^md\\.obsidian",
"^com\\.jetbrains\\.intellij",
"com\\.jetbrains\\.pycharm",
"^com\\.electron\\.lark",
"^com\\.tencent\\.xinWeChat",
"^com\\.google\\.Chrome"]
:finder ["^com\\.apple\\.finder$"]
:terminals ["com\\.apple\\.Terminal",
"com\\.googlecode\\.iterm2",
"net.kovidgoyal.kitty"]
}
:input-sources {:squirrel {:input_mode_id "com.googlecode.rimeime.inputmethod.Squirrel"
:input_source_id "com.googlecode.rimeime.inputmethod.Squirrel.Rime"
:language "zh-Hans"}
:us {:input_mode_id ""
:input_source_id "com.apple.keylayout.US"
:language "en"}}
:layers {
:hyper-mode {:key :caps_lock :alone {:key :escape}}}
;; simlayers are basically "hyper" keys
;; recommended for non-typing keys like `.` or tab or space
;; or keys like z which are used less often
:simlayers {
;;:2-mode {:key :2}
;;:3-mode {:key :3}
;;:4-mode {:key :4}
;;:tab-mode {:key :tab}
;;:q-mode {:key :q}
;;:w-mode {:key :w}
;;:e-mode {:key :e}
;;:r-mode {:key :r}
;;:t-mode {:key :t}
;;:i-mode {:key :i}
:o-mode {:key :o}
;;:caps-mode {:key :caps_lock}
:a-mode {:key :a}
:s-mode {:key :s}
;;:d-mode {:key :d}
;;:f-mode {:key :f}
;;:g-mode {:key :g}
;;:semicolon-mode {:key :semicolon}
;;:tilde-mode {:key :grave_accent_and_tilde}
;;:z-mode {:key :z}
;;:x-mode {:key :x}
;;:c-mode {:key :c}
;;:v-mode {:key :v}
;;:b-mode {:key :b}
;;:n-mode {:key :n}
;;:m-mode {:key :m}
;;:comma-mode {:key :comma}
;;:dot-mode {:key :period}
;;:spacebar-mode {:key :spacebar}
;;:go-mode {:key :period :condi ["in-go" 1]}
;;:js-mode {:key :period :condi ["in-js" 1]}
;;:swift-mode {:key :period :condi ["in-swift" 1]}
;;:rust-mode {:key :period :condi ["in-rust" 1]}
;;:py-mode {:key :period :condi ["in-python" 1]}
;;:elixir-mode {:key :period :condi ["in-elixir" 1]}
}
:main [
;; each manipulator has a description and multiple rules
;;{:des "..." ;; -> description
;; :rules[
;; [<from> <to> <conditions>] ;; -> rule 1
;; [<from> <to> <conditions>] ;; -> rule 2
;; ]}
;; rule [:period ["period-mode" 1] nil {:afterup ["period-mode" 0] :alone :period}]
;; |_____| |_______________| |_| |_________________________________________|
;; <from> <to> <conditions> <other options>
;;
;; karabiner docs: ;; https://pqrs.org/osx/karabiner/json.html#complex_modifications-manipulator-definition
;; <other options> includs ~to_if_alone~, ~to_if_held_down~,~to_after_key_up~, ~to_delayed_action~ and ~parameters~.
;;
;; (custom variables) & modifiers -> Advanced
;; https://github.com/yqrashawn/GokuRakuJoudo/blob/master/examples.org#custom-variable
;; Setup for quickfire keyboard
{:des "CM Storm keyboard setup"
:rules [:quickfire
[:##left_command :left_option]
[:##left_option :left_command]
[:##right_command :right_option]
[:##right_option :right_command]
]}
{:des "swap cmd <-> option when using specific devices"
:rules [
[:##left_command :left_option [:quickfire]]
[:##left_option :left_command [:quickfire]]
] }
{:des "caps lock -> escape(alone) and caps lock -> hyper"
:rules [
[:##caps_lock :!CTOleft_shift nil {:alone :escape}]
]}
{:des "Ctrl np -> down up"
:rules [
[:!Tn :down_arrow [:ctrlnp]]
[:!Tp :up_arrow [:ctrlnp]]
]}
{:des "F2 as Rename in Finder"
:rules [
[:##f2 :return_or_enter [:finder]]]}
{:des "Disable Cmd+H Hide"
:rules [
[:!Ch nil nil [:kybs]]
]}
{:des "Ctrl W -> Delete last word"
:rules [
[:!Tw :!Tw [:terminals]]
[:!Ww :!Ww [:terminals]]
[:!Tw :!TOSdelete_or_backspace [:!terminals]]
[:!Ww :!TOSdelete_or_backspace [:!terminals]]
]}
{:des "Cmd + Q held 1 second to quit"
:rules [
[:!Cq nil nil {:held :!Cq :repeat false}]]}
{:des "Quit application by pressing command-q twice"
:rules [[:!C#Pq [:!Cq ["command-q" 0]] ["command-q" 1]]
[:!C#Pq ["command-q" 1] nil {:delayed {:invoked ["command-q" 0] :canceled ["commandq" 0]}}]]}
{:des "Use Delete as Move to Trash"
:rules [
[:##delete_forward :!Cdelete_or_backspace [:finder]]]}
{:des "right_command to f16"
:rules [
[:##right_command :f16]
]}
{:des "colonkey (shift)"
:rules [:semicolon-mode
[:1 :!T1]
[:2 :!T2]
[:3 :!T3]
[:4 :!T4]
[:5 :!T5]
[:q :!Sq]
[:w :!Sw]
[:e :!Se]
[:r :!Sr]
[:t :!St]
[:y :!Sy]
[:u :!Su]
[:i :!Si]
[:o :!So]
[:p :!Sp]
[:a :!Sa]
[:s :!Ss]
[:d :!Sd]
[:f :!Sf]
[:g :!Sg]
[:h :!Sh]
[:j :!Sj]
[:k :!Sk]
[:l :!Sl]
[:grave_accent_and_tilde [:!Sgrave_accent_and_tilde]] ; -> ~
[:z :!Sz]
[:x :!Sx]
[:c :!Sc]
[:v :!Sv]
[:b :!Sb]
[:n :!Sn]
[:m :!Sm]]}
{:des "jsim"
:rules [[[:j :k] [:alfred "search google" "net.deanishe.alfred-searchio"]]
[[:j :semicolon] [:alfred "search tabs" "net.deanishe.alfred.safari"]]
[[:j :l] :!Cspacebar]]} ; Alfred
{:des "ksim"
:rules [[[:k :l] [:alfred "search dash" "com.kapeli.dash.workflow"]]
[[:k :m] [:alfred "search youtube" "net.deanishe.alfred-searchio"]]]}
{:des "2key (move + alfred)"
:rules [:2-mode
[:j "say '2 j press'"]
[:o [:alfred "soulver" "app.soulver.alfredworkflow"]]
[:j :!Cdown_arrow]
[:k :!Cup_arrow]
[:l :!Cright_arrow]
[:h :!Cleft_arrow]
[:semicolon :!Oup_arrow]
[:quote :!Odown_arrow]
[:spacebar :!COSu]]} ; Selection -> HN
{:des "3key (open files + projects)"
:rules [:3-mode
[:r [:km "proj: LA"]]
[:i [:km "edit: Likes"]]
[:o [:km "edit: Projects"]]
[:t [:km "edit: Git config"]]
[:h [:km "wiki: Used hotkeys"]]
[:j [:km "edit: Aliases"]]
[:k [:km "edit: Zsh functions"]]
[:l [:km "Search current safari url in wiki"]]
[:semicolon [:km "proj: Knowledge"]]
[:quote [:km "wiki: Summary"]]
[:n [:km "proj: Dotfiles"]]
[:m [:km "proj: Home"]]
[:comma [:km "edit: Now"]]
[:period [:km "edit: GitHub Bio"]] ; TODO:
[:spacebar :!CSOp]]} ; Selection -> Reddit
{:des "4key (open curated lists)"
:rules [:4-mode
[:r [:km "edit: Web Searches"]]
[:t [:km "list: Newsletters"]]
[:o [:km "list: Blogs"]]
[:p [:km "list: Podcasts"]]
[:k [:km "list: Alfred workflows"]]
[:l [:km "list: Command line tools"]]
[:n [:km "list: Events"]]]}
{:des "tabkey (websites)"
:rules [:tab-mode
;[:j :!SOTw] ; Replies
;[:k :!SOTf] ; App specific
;[:l :!SOTr] ; Personal
[:j [:km "w: Phabricator"]]
[:k [:km "w: GitLab"]]
[:l [:km "w: RealTime"]]
[:period [:km "w: CodeSandbox"]]]}
{:des "qkey (cmd + shift)"
:rules [:q-mode
[:3 :!CS3]
[:4 :!CS4]
[:5 :!CS5]
[:6 :!CS6]
[:7 :!CS7]
[:8 :!CS8]
[:9 :!CS9]
[:0 :!CS0]
[:w :!CSw]
[:e :!CSe]
[:r :!CSr]
[:t :!CSt]
[:y :!CSy]
[:u :!CSu]
[:i :!CSi]
[:o :!CSo]
[:p :!CSp]
[:open_bracket :!CSopen_bracket]
[:close_bracket :!CSclose_bracket]
[:a :!CSa]
[:s :!CSs]
[:d :!CSd]
[:f :!CSf]
[:g :!CSg]
[:h :!CSh]
[:j :!CSj]
[:k :!CSk]
[:l :!CSl]
[:semicolon :!CSsemicolon]
[:quote :!CSquote]
[:z :!CSz]
[:x :!CSx]
[:c :!CSc]
[:v :!CSv]
[:b :!CSb]
[:n :!CSn]
[:m :!CSm]
[:comma :!CScomma]
[:period :!CSperiod]
[:slash :!CSslash]
[:spacebar :!CSOe]]} ; Selection -> YouTube
{:des "wkey (apps)"
:rules [:w-mode
[:e [:km "open: Fantastical"]]
[:r [:km "open: Notion"]]
[:t [:km "open: Activity Monitor"]]
;[:i [:km "open: Safari Technology Preview"]]
[:i [:km "open: Instruments"]]
[:o [:km "open: Keyboard Maestro"]]
[:p [:km "open: Postgres"]]
[:caps_lock [:km "open: Finder"]]
[:a :!OSC1] ; Open Dash
[:d [:km "open: Postico"]]
[:f [:km "open: 2Do"]]
;[:g [:km "open: Linear"]]
[:j [:km "open: iTerm"]]
[:k [:km "open: Safari"]]
[:l [:km "open: VS Code"]]
[:semicolon [:km "open: Xcode"]]
[:quote [:km "open: Console"]]
[:c [:km "open: Spotify"]]
[:v [:km "open: Paw"]]
[:b [:km "open: BetterTouchTool"]]
[:n [:km "open: Sublime Text"]]
[:m [:km "open: Sublime Merge"]]
;[:period [:km "open: Proxyman"]]
[:period [:km "open: Cypress"]]
[:spacebar :!CT7]]} ; Start Google search with selection
{:des "ekey (cmd)"
:rules [:e-mode
[:q :!Cq]
[:w :!Cw]
[:r :!Cr]
[:t :!Ct]
[:u :!Cu]
[:i :!Ci]
[:p :!Cp]
[:open_bracket :!Copen_bracket]
[:close_bracket :!Cclose_bracket]
[:semicolon :!Csemicolon]
[:quote :!Cquote]
[:comma :!Ccomma]
[:period :!Cperiod]
[:slash :!Cslash]
[:a :!Ca]
[:b :!Cb]
[:c :!Cc]
[:d :!Cd]
[:f :!Cf]
[:g :!Cg]
[:h :!Ch]
[:j :!Cj]
[:k :!Ck]
[:l :!Cl]
[:m :!Cm]
[:n :!Cn]
[:o :!Co]
[:s :!Cs]
[:v :!Cv]
[:x :!Cx]
[:y :!Cy]
[:z :!Cz]
[:1 :!C1]
[:2 :!C2]
[:3 :!C3]
[:4 :!C4]
[:5 :!C5]
[:6 :!C6]
[:7 :!C7]
[:8 :!C8]
[:9 :!C9]
[:0 :!C0]
[:spacebar :!CSO7]]} ; Selection -> Google Lucky
{:des "rkey (apps)"
:rules [:r-mode
[:tab [:km "open: Transmission"]]
[:q [:km "open: IINA"]]
[:w [:km "open: 1Password"]]
[:e [:km "open: Keynote"]]
;[:i [:km "open: Flume"]]
[:i [:km "open: Feedback Assistant"]]
[:o [:km "open: Developer"]]
;[:caps_lock [:km "open: Preview"]]
[:a [:km "open: Alfred Preferences"]]
[:j [:km "open: Dictionary"]]
[:k [:km "open: Preview"]]
[:l [:km "open: Books"]]
;[:k [:km "open: PDF Expert"]]
;[:l [:km "open: Reeder"]]
[:b [:km "Edit keyboard shortcuts"]]
[:n [:km "open: ScreenFlow"]]
[:m [:km "open: OBS"]]
[:comma [:km "open: Arq"]]
[:period [:km "open: Final Cut Pro"]]
[:spacebar :!COSx]]} ; Selection -> Reddit
{:des "tkey (palettes + websites)"
:rules [:t-mode
[:0 [:km "w: regex101"]]
[:e [:km "w: Facebook"]]
[:r [:km "w: Repl"]]
[:u [:km "w: Medium"]]
[:i [:km "w: Arxiv"]]
[:o [:km "w: Stack Overflow"]]
[:p [:km "w: Dropbox"]]
[:a [:km "w: Amazon"]]
[:h [:km "w: Twitch"]]
[:j :!COSo] ; Safari URL -> Twitter
;[:j :!COSo] ; Safari URL -> Google
;[:k :!COSo] ; Safari URL -> HN
;[:l :!COSo] ; Safari URL -> Lobsters
[:semicolon [:km "w: Netlify"]]
[:z [:km "w: MDN"]]
[:b [:km "w: Observable"]]
[:m [:km "w: Meetup"]]
[:comma [:km "w: Google Drive"]]
[:period [:km "w: IFTTT"]]
[:spacebar :!COSr]]} ; Selection -> Google Translate
{:des "ikey (symbols)"
:rules [:i-mode
[:1 :!S1]
[:2 :!S2]
[:3 :!Sequal_sign]
[:4 :!S8]
[:5 :!S5]
[:q :!Sopen_bracket]
[:w :!S9]
[:e :!S3]
[:r :!Squote]
[:t :quote]
[:o :open_bracket] ; [
[:p :close_bracket] ; ]
[:open_bracket :!Sclose_bracket]
[:caps_lock [:km "Match symbols"]]
[:a :slash]
[:s :!Shyphen]
[:d :backslash]
[:f :hyphen]
[:g :!S4]
[:j :equal_sign]
[:l [:hyphen :!Speriod :spacebar]] ; -> arrow (->)
[:semicolon :semicolon]
[:grave_accent_and_tilde :!Sgrave_accent_and_tilde] ; -> //
[:z :!Sslash]
[:x :!Sbackslash]
[:c :!S7]
[:v :!Scomma]
[:b [:slash :slash :spacebar]]]} ; -> //
{:des "Open related applications"
:rules [:o-mode
[:1 :!C1]
[:2 :!C2]
[:3 :!C3]
[:4 :!C4]
[:b [:open "/Applications/Obsidian.app"]]
[:c [:open "/Applications/Google Chrome.app"]]
[:e [:open "/Applications/Lark.app"]]
[:w [:open "/Applications/WeChat.app"]]
[:g [:open "/Applications/GoldenDict.app"]]
[:v [:open "/Applications/Visual Studio Code.app"]]
[:j [:open "/Users/einverne/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app"]]
[:t [:open "/Applications/iTerm.app"]]
;[:c [:alfred "search emoji" "com.github.jsumners.alfred-emoji"]]
[:spacebar [:alfred "search PDFs" "nikivi.search.files"]]]}
{:des "capskey (todo + trello)"
:rules [:caps-mode
[:0 :down_arrow]
[:1 [:alfred "Screenshot -> Imgur" "com.vitorgalvao.alfred.webscreenshot"]]
[:2 :!TO2] ; Screenshot -> Clipboard
[:3 :!TO3] ; Screenshot -> Annotate
[:4 :!TO9] ; Picture of screen -> Clipboard
[:5 :!TO0] ; Picture of screen -> ~/Desktop
[:w [:km "wiki: My workflow"]]
[:e [:km "edit: Private notes"]]
[:r [:km "wiki: Rules"]]
[:t [:km "wiki: Processes"]]
[:u [:km "Open 2Do Buy"]]
[:i [:km "Open 2Do Fix"]]
[:o [:km "Open 2Do Tools"]]
[:p [:km "Open 2Do Repeat"]]
[:open_bracket [:km "w: Goodreads (currently reading)"]]
[:close_bracket [:km "w: Goodreads (next)"]]
[:s [:km "Open 2Do Wiki"]]
[:d [:open "notion://nikitavoloboev/Ideas-0b5a4e8a88f34fe29a1f33dad02e5332"]]
[:f [:km "Search 2Do"]]
[:g [:km "Open 2Do Life"]]
[:h [:open "notion://nikitavoloboev/Learn-05c0eac7be904e0da89cd8a3bf7ab509"]]
[:j [:km "Open 2Do Today"]]
[:k [:km "Open 2Do GitHub"]]
[:l [:km "Open 2Do Later"]]
[:semicolon [:km "Open 2Do Starred"]]
[:quote [:km "Open 2Do Other"]] ; TODO: remove once its empty
[:c [:km "Look back"]]
[:v [:km "wiki: Goals"]]
[:b [:open "notion://nikitavoloboev/Papers-Courses-8f00c7c500d5460490a5800c5d5db431"]]
[:n [:km "Open 2Do Clean"]]
[:m [:km "Open 2Do Work"]]
[:period [:km "Open 2Do LA"]]]}
{:des "akey (ctrl)"
:rules [:a-mode
[:2 :!T2]
[:3 :!T3]
[:4 :!T4]
[:5 :!T5]
[:6 :!T6]
[:7 :!T7]
[:8 :!T8]
[:9 :!T9]
[:0 :!T0]
[:q :!Tq]
[:w :!Tw]
[:e :!Te]
[:r :!Tr]
[:t :!Tt]
[:i :!Ti]
[:o :!To]
[:y :!Ty]
[:u :!Tu]
[:p :!Tp]
[:open_bracket :!Topen_bracket]
[:close_bracket :!Tclose_bracket]
[:s :!Ts]
[:d :!Td]
[:f :!Tf]
[:g :!Tg]
[:h :!Th]
[:j :!Tj]
[:k :!Tk]
[:l :!Tl]
[:semicolon :!Tsemicolon]
[:quote :!Tquote]
[:z :!Tz]
[:x :!Tx]
[:c :!Tc]
[:v :!Tv]
[:b :!Tb]
[:n :!Tn]
[:m :!Tm]
[:comma :!Tcomma]
[:period :!Tperiod]
[:slash :!Tslash]
[:spacebar :!CT9]]} ; Selection -> Google
{:des "skey (essential)"
:rules [:s-mode
[:w [:!Oleft_arrow :!OSright_arrow]] ; Highlight word
[:e :tab]
[:r :!Stab]
[:t :!Sreturn_or_enter]
[:u :!COp] ; Selection -> HasteBin link
[:i :!CTperiod] ; Contexts search active windows
[:o :!Cx] ; Cut
;[:open_bracket :!Oleft_arrow]
[:open_bracket [:km "Lowercase selected text"]]
[:close_bracket [:km "Uppercase selected text"]]
[:a :!Cc] ; Copy
[:d :delete_or_backspace]
[:f :return_or_enter]
[:g :!Ctab]
[:##h :left_arrow]
[:##j :down_arrow]
[:##k :up_arrow]
[:##l :right_arrow]
[:semicolon :!CTO0] ; Search Alfred Snippets
[:quote [:!Cleft_arrow :!CSright_arrow]] ; Highlight current line
[:c :!Cdelete_or_backspace]
[:v :left_shift]
[:##b :!Cleft_arrow]
[:n :!Cv] ; Paste
[:##m :!Cright_arrow]
[:period :!COS0]]} ; Selection -> Alfred Snippets TODO:
{:des "dkey (mouse)"
:rules [:d-mode
[:i :!Ckeypad_hyphen] ; Zoom out
[:o :!Ckeypad_plus] ; Zoom in
[:a [:!Cc :!Ctab]] ; Copy & activate previous app
[:j {:mkey {:vwheel 60}}] ; Scroll down
[:k {:mkey {:vwheel -60}}] ; Scroll up
[:l [:km "Google clipboard"]]
;[:l [:km "Google selected word"]]
[:semicolon [:km "Google Searchio selected word"]]
[:quote [:km "Select line and google"]]
[:z {:pkey :button2}] ; Right click
[:v {:pkey :button1}] ; Left click
[:b {:pkey :button3}] ; Middle click
[:n [:km "Open URL in clipboard in Safari"]]
[:m [:km "Google Lucky selected word"]]
[:comma :!TO8] ; Show Launchpad
[:period :!CTO3] ; Mission control
[:spacebar :!CT8]]} ; Selection -> Dictionary (wiki)
{:des "fkey (essential)"
:rules [:f-mode
[:1 [:km "View Sip"]]
[:2 [:km "Go to test macro"]]
[:3 [:km "New global macro"]] ; TODO: create global macro from Test (clear test, focus on naming new macro)
[:tab [:km "Test"]]
;[:q [:km "open: Photos"]]
;[:w [:km "open: Simulator / Xcode"]]
;[:q [:km "open: MindNode"]]
[:q [:km "open: Chrome Canary"]]
[:w [:km "Save clipboard link"]]
[:e :!CO8] ; Alfred clipboard history search
[:r [:km "Centre mouse to active app"]]
[:i :!Treturn_or_enter]
[:o :!Oreturn_or_enter]
[:p :!CTOc] ; Sleep
[:open_bracket :!CT5] ; Turn display on/off
[:caps_lock :!CTOu] ; Sip color picker
[:a [:km "open: Figma"]]
[:s [:km "edit: 2nd iTerm tab"]]
[:d [:km "Save clipboard link (top)"]]
[:h [:km "Make markdown link from selection {link}"]]
[:j [:km "edit: 1st iTerm tab"]]
[:k :return_or_enter]
[:l :!Creturn_or_enter]
[:semicolon [:km "edit: Karabiner"]]
[:quote [:km "Goku Run"]]
[:z :!Ospacebar] ; Switch language (Russian <-> English)
[:n :!Freturn_or_enter]
[:m :!Sreturn_or_enter]
[:comma [:km "Add safari link to selected markdown text"]]
[:period :!CTO4] ; Alfred file action
[:spacebar :!CTq]]} ; Selection -> Web Searches
{:des "gkey (actions)"
:rules [:g-mode
[:q :!CT3] ; Search bartender menu items
[:w :!CSgrave_accent_and_tilde] ; Switch between active windows (go up)
[:caps_lock [:km "Go to KM group of current app from picklist"]]
[:a [:km "Go to KM group of current app"]]
[:s [:km "Dismiss notifications"]]
[:h :!CSOa] ; Move window left
[:j :!Cgrave_accent_and_tilde] ; Switch between active windows (go down)
[:k :!COSf] ; Maximize window
[:l :!CSOd] ; Move window right
[:semicolon :!COSs] ; Move window between different screen & maximize (iPad)
[:z :!CO0] ; Show Dropzone dropdown
[:n :!CTOg] ; Turn on/off notifications
[:m :!COslash] ; Show/hide notification centre
[:period :!COS6]]} ; Toggle Night Shift on/off.
{:des "tilkey (actions + language switches)"
:rules [:tilde-mode
[:w [:alfred "toggle wifi" "nikivi.wifi.tools"]]
[:e :!CTk] ; Turn on/off BTT TouchBar
[:r [:alfred "restart wifi" "nikivi.wifi.tools"]]
[:d [:km "Commit dotfiles"]]
[:f [:km "Commit learning"]]
[:h [:km "Commit home"]]
[:j [[:open "dash://.js:"] ["in-python" 0] ["in-go" 0] ["in-js" 1] ["in-elixir" 0] ["in-rust" 0] ["in-swift" 0]]] ; JS
;[:j [[:open "dash://.jsts:"] ["in-python" 0] ["in-go" 0] ["in-js" 1] ["in-elixir" 0] ["in-rust" 0] ["in-swift" 0]]] ; JS
[:k [[:open "dash://.go:"] ["in-python" 0] ["in-go" 1] ["in-js" 0] ["in-elixir" 0] ["in-rust" 0] ["in-swift" 0]]] ; Go
[:l [[:open "dash://.python:"] ["in-python" 1] ["in-go" 0] ["in-js" 0] ["in-elixir" 0] ["in-rust" 0] ["in-swift" 0]]] ; Python
[:c [:km "Commit code"]]
[:v [:km "Commit wiki"]]
;[:n [[:open "dash://.rust:"] ["in-python" 0] ["in-go" 0] ["in-js" 0] ["in-elixir" 0] ["in-rust" 1] ["in-swift" 0]]] ; Rust
;[:n :!STh] ; Record macro
;[:m [[:open "dash://.swift:"] ["in-python" 0] ["in-go" 0] ["in-js" 0] ["in-elixir" 0] ["in-rust" 0] ["in-swift" 1]]] ; Swift
[:spacebar :!COSn]]} ; Selection -> GitHub
{:des "zkey (chat)"
:rules [:z-mode
[:e [:km "open: Telegram"]]
[:i [:km "open: WhatsApp"]]
[:o [:km "open: Zoom"]]
[:p [:km "open: FaceTime"]]
[:d [:km "New Spark email"]]
[:f [:km "open: Spark"]]
[:g [:alfred "search contacts" "nikivi.search.content"]]
[:h [:km "Create new contact"]]
[:j [:km "w: Element"]]
[:k [:km "open: Telegram"]]
[:l [:km "open: Discord"]]
[:semicolon [:km "open: Slack"]]
[:c [:km "open: Contacts"]]
[:v [:km "open: Tweetbot"]]
[:b [:km "w: Twitter"]]
[:n [:km "New tweet"]]
[:m [:km "New tweet with current URL"]]
[:comma [:km "w: Twitter Search"]]
[:period [:km "open: Textual"]]
[:slash [:km "Search Tweetbot"]]
[:spacebar :!CSOz]]} ; Selection -> Twitter
{:des "xkey (spotify)"
:rules [:x-mode
[:o [:km "Paste current Spotify song link"]]
[:open_bracket [:alfred "twitter_search_current_track" "com.vdesabou.spotify.mini.player"]]
[:close_bracket [:alfred "add_current_track_to" "com.vdesabou.spotify.mini.player" "spotify:playlist:2N82DnDsPGMnpJhN8sVFJu"]] ; Add song to Bliss playlist
[:j [:alfred "show_alfred_playlist" "com.vdesabou.spotify.mini.player"]]
[:k [:alfred "show_current_track" "com.vdesabou.spotify.mini.player"]]
[:semicolon [:alfred "add_current_track_to_alfred_playlist_or_your_music" "com.vdesabou.spotify.mini.player"]] ; Add song to Likes playlist
[:quote [:alfred "add_current_track_to" "com.vdesabou.spotify.mini.player" "spotify:playlist:0ESjwZeTcHOWzY3FYO5zs5"]] ; Add song to Focus playlist
[:n [:alfred "add_current_track_to" "com.vdesabou.spotify.mini.player"]]
[:m [:alfred "remove_current_track_from" "com.vdesabou.spotify.mini.player"]]
;[:comma [:alfred "youtube_search_current_track" "com.vdesabou.spotify.mini.player"]] ; TODO: twitter search
[:comma [:alfred "show_search_online" "com.vdesabou.spotify.mini.player"]] ; TODO: split up further into binds for direct searches of tracks/artists/all
[:period [:alfred "youtube_search_current_track" "com.vdesabou.spotify.mini.player"]]
[:slash [:alfred "reddit_search_current_track" "com.vdesabou.spotify.mini.player"]]]}
{:des "ckey (run + dots)"
:rules [:c-mode
[:tab [:km "proj: Learning"]]
[:u [:km "run: Rust"]]
[:i [:km "run: Julia"]] ; TODO: maybe use Pluto.jl notebook
[:o [:km "run: Deno"]]
[:a [:km "Clone repo to ~/clones and open with VS Code"]]
[:s [:km "Clone repo to ~/clones"]]
;[:d [:km "Clone repo to ~/src/clones and open with VS Code"]] ; TODO: open with Xcode
[:j [:km "run: Bash"]]
[:k [:km "run: Go"]]
[:l [:km "run: Python"]]
[:semicolon [:alfred "search learning" "nikivi.private.directories"]]
[:quote [:km "proj: Go"]]
[:n [:km "run: Node"]]
[:m [:km "run: Swift"]]
[:period [:km "edit: Dotfiles Magefile"]]
[:spacebar :!CSOy]]} ; Selection -> Stack Overflow
{:des "vkey (media)"
:rules [:v-mode
[:q :illumination_decrement]
[:w :illumination_increment]
[:e [:km "Change macOS appearance (dark/light)"]]
[:i :display_brightness_decrement]
[:o :display_brightness_increment]
[:p [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:37i9dQZEVXcMHpP6EcIqNe"]] ; Discover Weekly
[:open_bracket [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:0ERn0U4qZIKC8Dy7RrMMsn"]] ; Likes
[:close_bracket [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:2N82DnDsPGMnpJhN8sVFJu"]] ; Bliss
;[:a [:km "Repeat Spotify song"]] ; TODO: do in background
[:s [:km "Play/pause Spotify"]]
[:d :!CO9] ; Connect/disconnect AirPods
[:h :vk_consumer_previous]
[:j :mute]
[:k :vk_consumer_play]
[:l :vk_consumer_next]
[:semicolon [:alfred "spot_mini" "com.vdesabou.spotify.mini.player"]]
[:grave_accent_and_tilde [:alfred "artist_radio" "com.vdesabou.spotify.mini.player"]]
[:z [:alfred "song_radio" "com.vdesabou.spotify.mini.player"]]
[:b [:alfred "show_playlists" "com.vdesabou.spotify.mini.player"]]
[:n :volume_decrement]
[:m :volume_increment]
[:comma [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:0ESjwZeTcHOWzY3FYO5zs5"]] ; Focus
[:period [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:5QOChSDsvLTtBwXmIn8Pss"]] ; Ambient
[:slash [:alfred "play" "com.vdesabou.spotify.mini.player" "spotify:playlist:5fIL0WiQ79QtgsP4Y4L20V"]] ; Inspired
[:spacebar :!CSOv]]} ; Selection -> Google Images
{:des "bkey (break)"
:rules [:b-mode
[:9 [:alfred "search hn" "com.vitorgalvao.alfred.hackerboard"]]
[:0 [:km "w: HN (show new)"]]
[:q [:km "w: KM forum"]]
[:w [:km "w: Swift forum"]]
[:e [:km "w: Behance"]]
[:r [:km "w: Medium (network)"]]
[:t [:km "w: Medium (bookmarks)"]]
[:u [:km "w: Product Hunt"]]
[:i [:km "w: Dribble"]]
[:o [:km "w: Pinboard"]]
[:p [:km "w: Indie Hackers"]]
[:open_bracket [:km "w: Reddit Saved"]]
[:close_bracket [:km "w: Twitter Bookmarks"]]
[:a [:km "w: HN"]]
[:s [:km "w: Lobsters"]]
[:d [:km "w: Reddit"]]
[:f [:km "w: Reddit (all)"]]
[:g [:km "w: Alfred Forum"]]
[:h [:km "w: Product Hunt (new)"]]
[:j [:km "w: Reddit (new)"]]
[:k [:km "w: GitHub (front page)"]]
[:l [:km "w: Lobsters (new)"]]
[:semicolon [:km "w: HN (new)"]]
[:quote [:km "w: HckrNews"]]
[:z [:km "w: HN (comments)"]]
[:x [:km "w: Lobsters (comments)"]]
[:n [:km "w: Inoreader"]]
[:m [:km "w: Mastodon"]]
[:comma [:km "w: GitHub (trending)"]]
[:period [:km "w: YouTube (subs)"]]
[:slash [:km "w: GitHub (explore)"]]
[:spacebar :!TOSs]]} ; Selection -> DuckDuckGo
{:des "nkey (alfred)"
:rules [:n-mode
[:1 :!O1]
[:2 :!O2]
[:3 :!O3]
[:4 :!O4]
[:5 :!O5]
[:6 :!O6]
[:q [:alfred "search github" "nikivi.search.the.web"]]
[:w [:alfred "search twitter" "nikivi.search.the.web"]]
[:e [:alfred "search subs" "net.deanishe.alfred-reddit"]]
[:r [:alfred "search reddit" "nikivi.search.the.web"]]
[:t [:alfred "ssh" "net.deanishe.alfred-ssh"]]
[:a [:alfred "search shares" "nikivi.ask.create.share"]]
[:s [:alfred "search websites" "nikivi.web.searches"]]
[:d [:alfred "search stack overflow" "net.deanishe.alfred-stackoverflow"]]
;[:d [:alfred "search packages" "com.sindresorhus.npms"]]
[:f [:alfred "search repos" "me.lachlan.githubjump"]]
[:g [:alfred "search godoc" "nikivi.search.the.web"]]
[:h [:alfred "search hn" "nikivi.search.the.web"]]
[:grave_accent_and_tilde [:alfred "search learn anything" "nikivi.learn.anything"]]
[:z [:alfred "search lobsters" "nikivi.search.the.web"]]
[:x [:alfred "search stack" "net.deanishe.alfred-stackoverflow"]]
[:c [:alfred "search wiki" "nikivi.mind"]]
[:v [:alfred "search links" "nikivi.mind"]]
;[:v [:alfred "search pinboard" "nikivi.search.the.web"]] ; TODO: topics/search/more?
[:b [:alfred "search bookmarks" "net.deanishe.alfred.safari"]]
[:spacebar [:alfred "search history" "net.deanishe.alfred.safari"]]]}
{:des "mkey (dash)"
:rules [:m-mode
[:3 [:alfred "search alfred" "nikivi.utilities" "d3 "]]
[:q [:alfred "search alfred" "nikivi.utilities" "tldr "]]
[:w [:alfred "search alfred" "nikivi.utilities" "django "]]
[:e [:alfred "search alfred" "nikivi.utilities" "html "]]
[:r [:alfred "search alfred" "nikivi.utilities" "react "]]
[:t [:alfred "search alfred" "nikivi.utilities" "ts "]]
[:a [:alfred "search alfred" "nikivi.utilities" "man "]]
[:d [:alfred "search alfred" "nikivi.utilities" "docker "]]
[:f [:alfred "search alfred" "nikivi.utilities" "apple "]]
[:s [:alfred "search alfred" "nikivi.utilities" "lodash "]]
[:d [:alfred "search alfred" "nikivi.utilities" "node "]]
[:g [:alfred "search alfred" "nikivi.utilities" "godoc "]]
[:c [:alfred "search alfred" "nikivi.utilities" "css "]]
[:v [:alfred "search alfred" "nikivi.utilities" "vim "]]
[:b [:alfred "search alfred" "nikivi.utilities" "bash "]]]}
{:des "commakey (words)"
:rules [:comma-mode
[:w [:n :i :k :i :v :i]] ; -> nikivi
[:a [:n :i :k :i :t :a :v :o :l :o :b :o :e :v ]]]} ; -> nikitavoloboev
{:des "dotkey (1-3, q-u, caps, tab)"
:rules [:dot-mode
[:1 [:!Sc :l :o :s :e :spacebar :!S3]] ; -> Close #
[:2 [:!Sr :e :f :spacebar :!S3]] ; -> Ref #
[:3 [:!Sf :i :x :spacebar :!S3]] ; -> Fix #
[:q [:!Sa :spacebar :slash :slash :spacebar]] ; -> // (on same line)
[:w [:km "VSCode/XCode/Sublime comment on top of line"]]
[:e [:!St :!So :!Sd :!So :!Ssemicolon :spacebar]] ; -> TODO:
[:r [:km "VSCode/XCode/Sublime comment on top of line with TODO"]]
[:t [:!Sn :!So :!St :!Se :!Ssemicolon :spacebar]] ; -> NOTE:
[:y [:p :l :e :a :s :e :spacebar]] ; -> please
[:u [:u :p :d :a :t :e :spacebar]] ; -> update
[:caps_lock [:!Cf :!St :!So :!Sd :!So :!Ssemicolon :return_or_enter]] ; -> search TODO: in file
[:grave_accent_and_tilde [:!CSf :!St :!So :!Sd :!So :!Ssemicolon :return_or_enter]] ; -> search TODO: globally
[:left_gui [:!St :h :a :n :k :s :spacebar]] ; -> Thanks
[:spacebar [:!St :h :a :n :k :spacebar :y :o :u :period :spacebar]]]} ; -> Thank you.
{:des "jsdot"
:rules [:js-mode
[:tab [:km "w: MDN"]]
[:a [:c :o :n :s :o :l :e :period :l :o :g :!S9 :!S0 :left_arrow]] ; -> console.log()
;[:a [:c :o :n :s :o :l :e :period :w :a :r :n :!S9 :!S0 :left_arrow]] ; -> console.warn()
[:s [:equal_sign :!Speriod :spacebar]] ; -> =>
[:d [:r :e :t :u :r :n :spacebar]] ; -> return
[:f [:!Cf :c :o :n :s :o :l :e :period :l :o :g :!S9 :return_or_enter]] ; -> search console.log( in file
;[:f [:!Cf :c :o :n :s :o :l :e :period :w :a :r :n :!S9 :return_or_enter]] ; -> search console.warn( in file
[:g [:right_arrow :spacebar :equal_sign :!Speriod :spacebar :!Sopen_bracket :return_or_enter]] ; -> => {}
[:j [:right_arrow :spacebar :equal_sign :spacebar]] ; -> =
[:k [:right_arrow :spacebar :!Sopen_bracket :return_or_enter]] ; -> { }
[:z [:spacebar :c :l :a :s :s :!Sn :a :m :e :equal_sign :!Squote :!Squote :left_arrow]] ; -> className=""
;[:x [:t :a :c :h :y :o :n :s :spacebar]] ; -> tachyons
;[:c [:spacebar :s :t :y :l :e :equal_sign :!Sopen_bracket :!Sopen_bracket :!Sclose_bracket :!Sclose_bracket :left_arrow :left_arrow]] ; -> style={{}}
[:c [:spacebar :s :t :y :l :e :equal_sign :!Sopen_bracket :!Sclose_bracket :left_arrow]] ; -> style={}
[:v [:j :a :v :a :s :c :r :i :p :t :spacebar]] ; -> javascript
[:b [:t :y :p :e :s :c :r :i :p :t :spacebar]]]} ; -> typescript
{:des "godot"
:rules[:go-mode
[:tab [:km "w: GoDoc"]]
[:a [:f :m :t :period :!Sp :r :i :n :t :l :n :!S9 :!S0 :left_arrow]] ; -> fmt.Println()
[:s [:!Ssemicolon :equal_sign :spacebar]] ; -> :=
[:d [:r :e :t :u :r :n :spacebar]] ; -> return
[:f [:!Cf :f :m :t :period :p :return_or_enter]] ; -> search fmt.p in file
[:g [:i :f :spacebar :e :r :r :spacebar :!S1 :equal_sign :spacebar :n :i :l :spacebar :!Sopen_bracket :return_or_enter]] ; -> if err != nil {}
[:j [:grave_accent_and_tilde :j :s :o :n :!Ssemicolon :!Squote :!Squote :grave_accent_and_tilde :left_arrow :left_arrow]] ; -> `json:""`
[:z [:l :o :g :period :!Sp :r :i :n :t :l :n :!S9 :!S0 :left_arrow]] ; -> log.Println()
[:x [:f :m :t :period :!Sp :r :i :n :t :l :n :!S9 :!S0 :left_arrow :!Squote :hyphen :hyphen]] ; -> fmt.Println("--")
[:c [:!STsemicolon]] ; Selection -> Go Playground
[:v [:g :o :l :a :n :g :spacebar]] ; -> golang
[:b [:l :o :g :period :!Sf :a :t :a :l :!S9 :e :r :r :!S0]]]} ; -> log.Fatal(err)
{:des "pydot"
:rules[:py-mode
[:a [:p :r :i :n :t :!S9 :!S0 :left_arrow]] ; -> print()
[:s [:hyphen :!Speriod]] ; -> ->
[:d [:r :e :t :u :r :n :spacebar]] ; -> return
[:v [:p :y :t :h :o :n :spacebar]]]} ; -> python
{:des "swiftdot"
:rules[:swift-mode
[:a [:p :r :i :n :t :!S9 :!S0 :left_arrow]] ; -> print()
[:v [:s :w :i :f :t :spacebar]]]} ; -> swift
{:des "rustdot"
:rules[:rust-mode
[:a [:p :r :i :n :t :l :n :!S1 :!S9 :!S0 :left_arrow]] ; -> println!()
[:v [:r :u :s :t :spacebar]]]} ; -> rust
{:des "elixdot"
:rules[:elixir-mode
[:a [:!Si :!So :period :p :u :t :s :!S9 :!S0 :left_arrow]] ; -> IO.puts()
[:v [:e :l :i :x :i :r :spacebar]]]} ; -> elixir
{:des "spacekey (websites)"
:rules [:spacebar-mode
;[:tab :!CO5] ; TODO: Configure ScreenFlow recording
[:q [:km "open: CleanShot"]]
[:w :!Cw] ;; Cmd+w
[:e :!TO2] ; Screenshot -> Clipboard
[:r :!COS4] ; Screenshot -> CleanShot (cloud)
;[:r :!TOCp] ; Screenshot -> Imgur
;[:r :!TOCp] ; Screenshot -> Imgur (auth)
[:t :!CS4] ; Screenshot -> ~/Desktop
;[:i [:km "w: Google Sheets"]]
[:i [:km "w: GitHub (notifications)"]] ; TODO: jump between GitHub (issues/prs)
[:o [:km "w: Google Docs"]]
[:open_bracket [:km "w: Google Slides"]]
[:close_bracket [:km "w: Beautiful.ai"]]
[:caps_lock :!CTOSg] ; Loom recording
[:a :!TO4] ; CleanShot recording
;[:s :!CO5] ; TODO: Pause/unpause ScreenFlow recording
[:f :!CO5] ; Start/stop ScreenFlow recording
[:h [:km "w: Roam Research"]]
[:j [:km "w: Excalidraw"]]
[:k [:km "w: GitHub"]]
[:l [:km "w: Localhost"]]
[:semicolon [:km "w: StackBlitz"]]
[:quote [:km "w: Learn Anything"]]
[:b [:km "w: Digital Ocean"]]
[:n [:km "w: GCP"]]
[:m [:km "w: AWS"]]
[:comma [:km "w: Diagrams"]]
[:period [:km "w: YouTube"]]
[:slash [:km "w: GitHub PR"]]]} ; TODO:
]}