{ ;; ! | 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 # :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\\.electron\\.lark" "^com\\.tencent\\.xinWeChat" "^com\\.google\\.Chrome"] :finder ["^com\\.apple\\.finder$"] :terminals ["com\\.apple\\.Terminal", "com\\.googlecode\\.iterm2"] } :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[ ;; [ ] ;; -> rule 1 ;; [ ] ;; -> rule 2 ;; ]} ;; rule [:period ["period-mode" 1] nil {:afterup ["period-mode" 0] :alone :period}] ;; |_____| |_______________| |_| |_________________________________________| ;; ;; ;; karabiner docs: ;; https://pqrs.org/osx/karabiner/json.html#complex_modifications-manipulator-definition ;; 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 "okey (alfred)" :rules [:o-mode [:1 :!C1] [:2 :!C2] [:3 :!C3] [:4 :!C4] [:5 :!C5] [:6 :!C6] [:q [:alfred "search downloads" "recentdownloads.ddjfreedom"]] [:w :!CObackslash] ; 1Password search [:e [:km "Make 2Do task"]] [:r [:km "Make 2Do task with note as current URL"]] [:t [:km "Make 2Do task with Safari title as name + note as current URL"]] ;[:i [:alfred "search alfred" "nikivi.utilities" "?"]] [:i [:open "/Applications/iTerm.app"]] [:caps_lock [:alfred "search desktop" "com.vitorgalvao.alfred.directories"]] [:a [:alfred "search files" "nikivi.manage.notes"]] ; TODO: add blog, drafts [:b [:open "/Applications/Obsidian.app"]] [:w [:open "/Applications/Lark.app"]] [:s [:alfred "search code" "nikivi.manage.notes"]] [:d [:alfred "search repos" "net.deanishe.alfred-git-repos"]] [:f [:alfred "search folders" "nikivi.search.folders"]] [:g [:km "2Do with current url as note (github)"]] [:j [:alfred "run" "iansinnott.keyboardmaestro"]] [:k [:alfred "search menu bar" "com.tedwise.menubarsearch"]] [:grave_accent_and_tilde [:alfred "search processes" "com.vitorgalvao.alfred.processcontrol"]] [:x [:alfred "search workflows" "org.jeef.workflowdirectory"]] ;[:c [:alfred "search emoji" "com.github.jsumners.alfred-emoji"]] [:c [:open "/Applications/Google Chrome.app"]] [:v [:alfred "search clones" "com.vitorgalvao.alfred.directories"]] [:n [:alfred "search lists" "nikivi.learn.anything"]] [:m [:alfred "search lists" "nikivi.awesome.lists"]] [: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: ]}