dotfiles/private_dot_config/karabiner.edn
2024-03-03 03:18:12 +03:00

148 lines
5.8 KiB
Clojure

{ :devices {:adv2 [{:vendor_id 10730 :product_id 258}]
:pedals [{:vendor_id 10730 :product_id 256}]}
:profiles {:Default {:default true
:alone 350
:delay 500
:held 1500
:sim 50}}
:applications {:keykey ["^com\\.chekazuja\\.keykey$"]
:kitty ["^net\\.kovidgoyal\\.kitty$"]
:webapp ["^com\\.apple\\.Safari\\.WebApp\\..+$"]
:openai ["^com\\.Unite\\.openai$"]
:perplexity ["^com\\.Unite\\.Perplexity$"]
:jupyter ["^org\\.jupyter\\.jupyterlab-desktop$"]
:dataspell ["^com\\.jetbrains\\.dataspell$"]
:vikunja ["^com\\.Unite\\.Vikunja$"]}
:input-sources {:en {:language "en"}
:ru {:language "ru"}}
:templates {:open "open -a '%s'"}
:froms {
:left_pedal {:key :f18}
:middle_pedal {:key :f19}
:right_pedal {:key :f20}
}
:main [
{:des "pedals default"
:rules [:pedals [:left_pedal :!Tleft_command]
[:middle_pedal :##left_command]
[:right_pedal :ru nil {:afterdown :ru
:afterup :en}]
]}
{:des "Backslash<->Open_Bracket on Advantage2"
:rules [:adv2 [:open_bracket :!R5 [:ru :keykey]]
[:##open_bracket :!R8 [:ru :keykey]]
[:##open_bracket :backslash [:ru :!keykey]]
[:##backslash :open_bracket :ru]]}
{:des "Delete->Control on Advantage2"
:rules [:adv2 [:##delete_forward :left_control]
[:##equal_sign :grave_accent_and_tilde :ru]
[:##grave_accent_and_tilde :equal_sign :ru]]}
{:des "Alternative language switches: Lcmd->English, Rcmd->Russian, Rshift-> Russian"
:rules [[:left_command :left_command nil {:alone {:input :en}}]
[:right_command :right_command nil {:alone {:input :ru}}]
;; [:right_shift :right_shift nil {:alone {:input :ru}}]
[:!Qt [:!Qt {:input :en}]]
[:!Ql [:!Ql {:input :en}]]
[:!Ct [:!Ct {:input :en}]]
[:!Cl [:!Cl {:input :en}]]
;; [:!Ctab [:!Ctab {:input :en}]]
]}
{:des "Caps->Russian, LShift->English"
:rules [[:##left_shift :left_shift nil {:alone {:input :en}}]
[:##caps_lock ["capskey" 1] :ru {:alone {:input :en}
:afterup ["capskey" 0]}]
[:##caps_lock ["capskey" 1] :en {:alone {:input :ru}
:afterup ["capskey" 0]}]
]}
{:des "Tab as Hyper(⌘+⌥+^+⇧)"
:rules [[:tab [:!!left_shift] [:!left_command] {:alone :tab}]]}
{:des "Caps+↑, Caps+↓ to Control+Opt+arrow"
:rules [[:##up_arrow :!TOup_arrow :capskey]
[:##down_arrow :!TOdown_arrow :capskey]
[:##1 :!!1 :capskey]
[:##2 :!!2 :capskey]
[:##3 :!!3 :capskey]
[:##left_arrow :!!1 :capskey]
[:##right_arrow :!!2 :capskey]]}
{:des "Caps+T to start Kitty, Caps+B->Bing, Caps+G->Bard, Caps+O->Poe, Caps+P->ChatGPT4, Caps+␣->AllGPT"
:rules [:capskey
[:t [[:open "/Applications/kitty.app"] {:input :en}] :!kitty]
[:t [:!Ct {:input :en}] :kitty]
[:a [[:open "/Applications/Arc.app"] {:input :en}]]
[:g [:open "/Users/anton/Applications/Gemini.app"]]
[:m [:open "/Users/anton/Applications/Copilot.app"]]
[:c [:open "/Users/anton/Applications/Claude.app"]]
[:w [:open "/Users/anton/Applications/Setia.wiki.app"]]
[:o [:open "/Applications/openai.app"] :!openai]
[:o :!Ch :openai]
[:p [:open "/Users/anton/Applications/ChatGPT.app"]]
[:i [:open "/Applications/Perplexity.app"] :!perplexity]
[:i :!Ch :perplexity]
[:j [:open "/Applications/JupyterLab.app"] :!jupyter]
[:j :!Ch :jupyter]
[:d [:open "/Users/anton/Applications/DataSpell.app"] :!dataspell]
[:d :!Ch :dataspell]
[:v [:open "/Applications/Vikunja.app"] :!vikunja]
[:v :!Ch :vikunja]
]}
{:des "⌘W->⌘H in Safari ChatGPT app"
:rules [:webapp [:!Cw :!Ch]]}
{:des "Ropt->Comma"
:rules [[:##right_option :right_shift :ru {:alone :!R6}]
[:##right_option :right_shift :en {:alone :comma}]]}
{:des "Rshift->Comma"
:rules [[:##right_shift :right_shift :ru {:alone :!R6
:held :caps_lock}]
[:##right_shift :right_shift :en {:alone :comma
:held :caps_lock}]]}
{:des "Rcommand -> comma, but not on advantage"
:rules [[:##right_command :right_command [:ru :!adv2] {:alone :!R6}]]}]
}
;; this is a little bit weird, but it's convenient
;; the rule [:!Ca :!T1]
;; means from command a to control 1
;; :!Ca is keycode :a and prefix a with !C
;; here's the definition
;; ! | means mandatory
;; # | means optional
;; 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
;; P | caps_lock
;; !! | mandatory command + control + optional + shift (hyper)
;; ## | optional any