diff --git a/.chezmoiignore b/.chezmoiignore new file mode 100644 index 0000000..73d52b6 --- /dev/null +++ b/.chezmoiignore @@ -0,0 +1,3 @@ +README.md +.gitignore +.DS_Store diff --git a/README.md b/README.md index ba68af0..9558910 100644 --- a/README.md +++ b/README.md @@ -1 +1,36 @@

~/.dotfiles

+ +This branch uses [chezmoi](https://www.chezmoi.io/) as the dotfile manager. + +## Usage + +Preview changes: + +```sh +chezmoi --source "$PWD" diff +``` + +Apply changes: + +```sh +chezmoi --source "$PWD" apply +``` + +## Layout + +- `dot_gitconfig` -> `~/.gitconfig` +- `private_dot_config/` -> `~/.config/` + +Git identity is intentionally kept out of the public repository. Put local +identity in `~/.gitconfig.local`, for example: + +```ini +[user] + name = Your Name + email = you@example.com +``` + +Generated and local-only files are intentionally not managed, including Neovim +compiled packer output, `.DS_Store`, Kitty backups, and Karabiner automatic +backups. Fish universal variables are also local-only, so `fish_variables` is +not tracked. diff --git a/dot_gitconfig b/dot_gitconfig new file mode 100644 index 0000000..203b4de --- /dev/null +++ b/dot_gitconfig @@ -0,0 +1,30 @@ +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true +[core] + editor = nvim + pager = delta +[include] + path = ~/.gitconfig.local +[init] + defaultBranch = main +[alias] + st = status + ch = checkout + chb = checkout -b + aa = add --all + cm = commit + fe = fetch -p + di = diff +[interactive] + diffFilter = delta --color-only +[merge] + conflictstyle = diff3 +[diff] + colorMoved = default +[delta] + navigate = true # use n and N to move between diff sections + light = false # set to true if you're in a terminal w/ a light background color (e.g. the default macOS terminal) + side-by-side = true diff --git a/fish/.config/fish/config.fish b/fish/.config/fish/config.fish deleted file mode 100644 index 521003a..0000000 --- a/fish/.config/fish/config.fish +++ /dev/null @@ -1,9 +0,0 @@ -if status is-interactive - # Commands to run in interactive sessions can go here -end - -set -Ux EDITOR nvim -alias vi="nvim" -alias vim="nvim" -alias view="nvim -R" -alias vimdiff="nvim -d" diff --git a/fish/.config/fish/fish_variables b/fish/.config/fish/fish_variables deleted file mode 100644 index c6e17db..0000000 --- a/fish/.config/fish/fish_variables +++ /dev/null @@ -1,45 +0,0 @@ -# This file contains fish universal variable definitions. -# VERSION: 3.0 -SETUVAR --export EDITOR:nvim -SETUVAR __fish_initialized:3800 -SETUVAR fish_color_autosuggestion:6c7086 -SETUVAR fish_color_cancel:f38ba8 -SETUVAR fish_color_command:89b4fa -SETUVAR fish_color_comment:7f849c -SETUVAR fish_color_cwd:f9e2af -SETUVAR fish_color_cwd_root:red -SETUVAR fish_color_end:fab387 -SETUVAR fish_color_error:f38ba8 -SETUVAR fish_color_escape:eba0ac -SETUVAR fish_color_gray:6c7086 -SETUVAR fish_color_history_current:\x2d\x2dbold -SETUVAR fish_color_host:89b4fa -SETUVAR fish_color_host_remote:a6e3a1 -SETUVAR fish_color_keyword:f38ba8 -SETUVAR fish_color_match:\x2d\x2dbackground\x3dbrblue -SETUVAR fish_color_normal:cdd6f4 -SETUVAR fish_color_operator:f5c2e7 -SETUVAR fish_color_option:a6e3a1 -SETUVAR fish_color_param:f2cdcd -SETUVAR fish_color_quote:a6e3a1 -SETUVAR fish_color_redirection:f5c2e7 -SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d313244 -SETUVAR fish_color_selection:\x2d\x2dbackground\x3d313244 -SETUVAR fish_color_status:f38ba8 -SETUVAR fish_color_user:94e2d5 -SETUVAR fish_color_valid_path:\x2d\x2dunderline -SETUVAR fish_key_bindings:fish_default_key_bindings -SETUVAR fish_pager_color_background:\x1d -SETUVAR fish_pager_color_completion:cdd6f4 -SETUVAR fish_pager_color_description:6c7086 -SETUVAR fish_pager_color_prefix:f5c2e7 -SETUVAR fish_pager_color_progress:6c7086 -SETUVAR fish_pager_color_secondary_background:\x1d -SETUVAR fish_pager_color_secondary_completion:\x1d -SETUVAR fish_pager_color_secondary_description:\x1d -SETUVAR fish_pager_color_secondary_prefix:\x1d -SETUVAR fish_pager_color_selected_background:\x1d -SETUVAR fish_pager_color_selected_completion:\x1d -SETUVAR fish_pager_color_selected_description:\x1d -SETUVAR fish_pager_color_selected_prefix:\x1d -SETUVAR fish_user_paths:/Users/doanthieu/\x2easdf/shims\x1e/opt/homebrew/opt/asdf/libexec/bin\x1e/opt/homebrew/bin diff --git a/fish/.config/fish/functions/fish_user_key_bindings.fish b/fish/.config/fish/functions/fish_user_key_bindings.fish deleted file mode 100644 index 18b4fc9..0000000 --- a/fish/.config/fish/functions/fish_user_key_bindings.fish +++ /dev/null @@ -1,3 +0,0 @@ -function fish_user_key_bindings - fzf --fish | source -end diff --git a/fish/.config/fish/themes/Catppuccin Frappe.theme b/fish/.config/fish/themes/Catppuccin Frappe.theme deleted file mode 100644 index b4c1994..0000000 --- a/fish/.config/fish/themes/Catppuccin Frappe.theme +++ /dev/null @@ -1,30 +0,0 @@ -# name: 'Catppuccin Frappé' -# url: 'https://github.com/catppuccin/fish' -# preferred_background: 303446 - -fish_color_normal c6d0f5 -fish_color_command 8caaee -fish_color_param eebebe -fish_color_keyword e78284 -fish_color_quote a6d189 -fish_color_redirection f4b8e4 -fish_color_end ef9f76 -fish_color_comment 838ba7 -fish_color_error e78284 -fish_color_gray 737994 -fish_color_selection --background=414559 -fish_color_search_match --background=414559 -fish_color_option a6d189 -fish_color_operator f4b8e4 -fish_color_escape ea999c -fish_color_autosuggestion 737994 -fish_color_cancel e78284 -fish_color_cwd e5c890 -fish_color_user 81c8be -fish_color_host 8caaee -fish_color_host_remote a6d189 -fish_color_status e78284 -fish_pager_color_progress 737994 -fish_pager_color_prefix f4b8e4 -fish_pager_color_completion c6d0f5 -fish_pager_color_description 737994 \ No newline at end of file diff --git a/fish/.config/fish/themes/Catppuccin Latte.theme b/fish/.config/fish/themes/Catppuccin Latte.theme deleted file mode 100644 index 002dace..0000000 --- a/fish/.config/fish/themes/Catppuccin Latte.theme +++ /dev/null @@ -1,30 +0,0 @@ -# name: 'Catppuccin Latte' -# url: 'https://github.com/catppuccin/fish' -# preferred_background: eff1f5 - -fish_color_normal 4c4f69 -fish_color_command 1e66f5 -fish_color_param dd7878 -fish_color_keyword d20f39 -fish_color_quote 40a02b -fish_color_redirection ea76cb -fish_color_end fe640b -fish_color_comment 8c8fa1 -fish_color_error d20f39 -fish_color_gray 9ca0b0 -fish_color_selection --background=ccd0da -fish_color_search_match --background=ccd0da -fish_color_option 40a02b -fish_color_operator ea76cb -fish_color_escape e64553 -fish_color_autosuggestion 9ca0b0 -fish_color_cancel d20f39 -fish_color_cwd df8e1d -fish_color_user 179299 -fish_color_host 1e66f5 -fish_color_host_remote 40a02b -fish_color_status d20f39 -fish_pager_color_progress 9ca0b0 -fish_pager_color_prefix ea76cb -fish_pager_color_completion 4c4f69 -fish_pager_color_description 9ca0b0 \ No newline at end of file diff --git a/fish/.config/fish/themes/Catppuccin Macchiato.theme b/fish/.config/fish/themes/Catppuccin Macchiato.theme deleted file mode 100644 index c8be912..0000000 --- a/fish/.config/fish/themes/Catppuccin Macchiato.theme +++ /dev/null @@ -1,30 +0,0 @@ -# name: 'Catppuccin Macchiato' -# url: 'https://github.com/catppuccin/fish' -# preferred_background: 24273a - -fish_color_normal cad3f5 -fish_color_command 8aadf4 -fish_color_param f0c6c6 -fish_color_keyword ed8796 -fish_color_quote a6da95 -fish_color_redirection f5bde6 -fish_color_end f5a97f -fish_color_comment 8087a2 -fish_color_error ed8796 -fish_color_gray 6e738d -fish_color_selection --background=363a4f -fish_color_search_match --background=363a4f -fish_color_option a6da95 -fish_color_operator f5bde6 -fish_color_escape ee99a0 -fish_color_autosuggestion 6e738d -fish_color_cancel ed8796 -fish_color_cwd eed49f -fish_color_user 8bd5ca -fish_color_host 8aadf4 -fish_color_host_remote a6da95 -fish_color_status ed8796 -fish_pager_color_progress 6e738d -fish_pager_color_prefix f5bde6 -fish_pager_color_completion cad3f5 -fish_pager_color_description 6e738d \ No newline at end of file diff --git a/git/.gitconfig b/git/.gitconfig deleted file mode 100644 index 5481c5d..0000000 --- a/git/.gitconfig +++ /dev/null @@ -1,19 +0,0 @@ -[core] - pager = delta -[delta] - syntax-theme = Nord - plus-color = "#a3be8c" - minus-color = "#bf616a" - line-numbers = true -[user] - name = Doan Le Thieu - email = thieurom@gmail.com -[alias] - ll = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -[filter "lfs"] - process = git-lfs filter-process - required = true - clean = git-lfs clean -- %f - smudge = git-lfs smudge -- %f -[init] - defaultBranch = main diff --git a/karabiner/karabiner.json b/karabiner/karabiner.json deleted file mode 100644 index a08414f..0000000 --- a/karabiner/karabiner.json +++ /dev/null @@ -1,7898 +0,0 @@ -{ - "global": { - "ask_for_confirmation_before_quitting": true, - "check_for_updates_on_startup": true, - "show_in_menu_bar": true, - "show_profile_name_in_menu_bar": true, - "unsafe_ui": false - }, - "profiles": [ - { - "complex_modifications": { - "parameters": { - "basic.simultaneous_threshold_milliseconds": 50, - "basic.to_delayed_action_delay_milliseconds": 500, - "basic.to_if_alone_timeout_milliseconds": 1000, - "basic.to_if_held_down_threshold_milliseconds": 500, - "mouse_motion_to_scroll.speed": 100 - }, - "rules": [ - { - "description": "Post left_ctrl when return_or_enter is hold.", - "manipulators": [ - { - "from": { - "key_code": "return_or_enter", - "modifiers": { - "optional": [ - "any" - ] - } - }, - "to": [ - { - "key_code": "right_control" - } - ], - "to_if_alone": [ - { - "key_code": "return_or_enter" - } - ], - "type": "basic" - } - ] - }, - { - "description": "Post escape if caps is pressed alone, left_ctrl otherwise", - "manipulators": [ - { - "from": { - "key_code": "caps_lock", - "modifiers": { - "optional": [ - "any" - ] - } - }, - "to": [ - { - "key_code": "left_control" - } - ], - "to_if_alone": [ - { - "key_code": "escape" - } - ], - "type": "basic" - } - ] - }, - { - "description": "Map left_ctrl to caps_lock.", - "manipulators": [ - { - "from": { - "key_code": "left_control", - "modifiers": { - "optional": [ - "any" - ] - } - }, - "to": [ - { - "key_code": "caps_lock" - } - ], - "type": "basic" - } - ] - }, - { - "description": "Colemak Mod-DH", - "manipulators": [ - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "caps_lock" - }, - "to": [ - { - "key_code": "delete_or_backspace" - } - ], - "type": "basic" - } - ] - } - ] - }, - "devices": [ - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 51966, - "vendor_id": 65261 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 4694, - "vendor_id": 51984 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 4871, - "vendor_id": 65261 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 832, - "vendor_id": 1452 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 34304, - "vendor_id": 1452 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 615, - "vendor_id": 76 - }, - "ignore": true, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 256, - "vendor_id": 2131 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": false, - "is_pointing_device": true, - "product_id": 832, - "vendor_id": 1452 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": true, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 668, - "vendor_id": 76 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": false, - "is_pointing_device": true, - "product_id": 617, - "vendor_id": 76 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - } - ], - "fn_function_keys": [ - { - "from": { - "key_code": "f1" - }, - "to": [ - { - "consumer_key_code": "display_brightness_decrement" - } - ] - }, - { - "from": { - "key_code": "f2" - }, - "to": [ - { - "consumer_key_code": "display_brightness_increment" - } - ] - }, - { - "from": { - "key_code": "f3" - }, - "to": [ - { - "key_code": "mission_control" - } - ] - }, - { - "from": { - "key_code": "f4" - }, - "to": [ - { - "key_code": "launchpad" - } - ] - }, - { - "from": { - "key_code": "f5" - }, - "to": [ - { - "key_code": "illumination_decrement" - } - ] - }, - { - "from": { - "key_code": "f6" - }, - "to": [ - { - "key_code": "illumination_increment" - } - ] - }, - { - "from": { - "key_code": "f7" - }, - "to": [ - { - "consumer_key_code": "rewind" - } - ] - }, - { - "from": { - "key_code": "f8" - }, - "to": [ - { - "consumer_key_code": "play_or_pause" - } - ] - }, - { - "from": { - "key_code": "f9" - }, - "to": [ - { - "consumer_key_code": "fast_forward" - } - ] - }, - { - "from": { - "key_code": "f10" - }, - "to": [ - { - "consumer_key_code": "mute" - } - ] - }, - { - "from": { - "key_code": "f11" - }, - "to": [ - { - "consumer_key_code": "volume_decrement" - } - ] - }, - { - "from": { - "key_code": "f12" - }, - "to": [ - { - "consumer_key_code": "volume_increment" - } - ] - } - ], - "name": "Apple", - "parameters": { - "delay_milliseconds_before_open_device": 1000 - }, - "selected": true, - "simple_modifications": [ - { - "from": { - "key_code": "backslash" - }, - "to": [ - { - "key_code": "delete_or_backspace" - } - ] - }, - { - "from": { - "key_code": "delete_or_backspace" - }, - "to": [ - { - "key_code": "backslash" - } - ] - } - ], - "virtual_hid_keyboard": { - "country_code": 0, - "indicate_sticky_modifier_keys_state": true, - "mouse_key_xy_scale": 100 - } - }, - { - "complex_modifications": { - "parameters": { - "basic.simultaneous_threshold_milliseconds": 50, - "basic.to_delayed_action_delay_milliseconds": 500, - "basic.to_if_alone_timeout_milliseconds": 1000, - "basic.to_if_held_down_threshold_milliseconds": 500, - "mouse_motion_to_scroll.speed": 100 - }, - "rules": [ - { - "description": "Colemak Mod-DH", - "manipulators": [ - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash" - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "mandatory": [ - "left_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash", - "modifiers": [ - "left_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "grave_accent_and_tilde", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "grave_accent_and_tilde", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "1", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "1", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "2", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "2", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "4", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "4", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "5", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "5", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "6", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "6", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "7", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "7", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "8", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "8", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "9", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "9", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "0", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "0", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "hyphen", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "hyphen", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "equal_sign", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "equal_sign", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "q", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "q", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "w", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "w", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "e", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "f", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "r", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "p", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "t", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "b", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "y", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "j", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "u", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "l", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "i", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "u", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "o", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "y", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "p", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "semicolon", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "open_bracket", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "open_bracket", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "close_bracket", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "close_bracket", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "backslash", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "backslash", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "a", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "a", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "s", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "r", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "d", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "s", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "f", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "t", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "g", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "g", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "h", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "m", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "n", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "e", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "i", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "semicolon", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "o", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "quote", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "quote", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "z", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "z", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "x", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "x", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "c", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "c", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "v", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "d", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "b", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "v", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "n", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "k", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "m", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "h", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "comma", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "comma", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "period", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "period", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "slash", - "modifiers": { - "mandatory": [ - "right_shift" - ], - "optional": [ - "caps_lock", - "left_command", - "left_control", - "left_alt", - "right_command", - "right_control", - "right_alt" - ] - } - }, - "to": [ - { - "key_code": "slash", - "modifiers": [ - "right_shift" - ] - } - ], - "type": "basic" - }, - { - "from": { - "key_code": "caps_lock" - }, - "to": [ - { - "key_code": "delete_or_backspace" - } - ], - "type": "basic" - } - ] - }, - { - "description": "Post escape if left_control is pressed alone.", - "manipulators": [ - { - "from": { - "key_code": "left_control", - "modifiers": { - "optional": [ - "any" - ] - } - }, - "to": [ - { - "key_code": "left_control" - } - ], - "to_if_alone": [ - { - "key_code": "escape" - } - ], - "type": "basic" - } - ] - } - ] - }, - "devices": [ - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 51966, - "vendor_id": 65261 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 4694, - "vendor_id": 51984 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 4871, - "vendor_id": 65261 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 832, - "vendor_id": 1452 - }, - "ignore": true, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 34304, - "vendor_id": 1452 - }, - "ignore": true, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 615, - "vendor_id": 76 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": true, - "is_pointing_device": false, - "product_id": 256, - "vendor_id": 2131 - }, - "ignore": false, - "manipulate_caps_lock_led": true, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - }, - { - "disable_built_in_keyboard_if_exists": false, - "fn_function_keys": [], - "identifiers": { - "is_keyboard": false, - "is_pointing_device": true, - "product_id": 832, - "vendor_id": 1452 - }, - "ignore": true, - "manipulate_caps_lock_led": false, - "simple_modifications": [], - "treat_as_built_in_keyboard": false - } - ], - "fn_function_keys": [ - { - "from": { - "key_code": "f1" - }, - "to": [ - { - "consumer_key_code": "display_brightness_decrement" - } - ] - }, - { - "from": { - "key_code": "f2" - }, - "to": [ - { - "consumer_key_code": "display_brightness_increment" - } - ] - }, - { - "from": { - "key_code": "f3" - }, - "to": [ - { - "key_code": "mission_control" - } - ] - }, - { - "from": { - "key_code": "f4" - }, - "to": [ - { - "key_code": "launchpad" - } - ] - }, - { - "from": { - "key_code": "f5" - }, - "to": [ - { - "key_code": "illumination_decrement" - } - ] - }, - { - "from": { - "key_code": "f6" - }, - "to": [ - { - "key_code": "illumination_increment" - } - ] - }, - { - "from": { - "key_code": "f7" - }, - "to": [ - { - "consumer_key_code": "rewind" - } - ] - }, - { - "from": { - "key_code": "f8" - }, - "to": [ - { - "consumer_key_code": "play_or_pause" - } - ] - }, - { - "from": { - "key_code": "f9" - }, - "to": [ - { - "consumer_key_code": "fast_forward" - } - ] - }, - { - "from": { - "key_code": "f10" - }, - "to": [ - { - "consumer_key_code": "mute" - } - ] - }, - { - "from": { - "key_code": "f11" - }, - "to": [ - { - "consumer_key_code": "volume_decrement" - } - ] - }, - { - "from": { - "key_code": "f12" - }, - "to": [ - { - "consumer_key_code": "volume_increment" - } - ] - } - ], - "name": "HHKB", - "parameters": { - "delay_milliseconds_before_open_device": 1000 - }, - "selected": false, - "simple_modifications": [ - { - "from": { - "key_code": "escape" - }, - "to": [ - { - "key_code": "grave_accent_and_tilde" - } - ] - } - ], - "virtual_hid_keyboard": { - "country_code": 0, - "indicate_sticky_modifier_keys_state": true, - "mouse_key_xy_scale": 100 - } - } - ] -} \ No newline at end of file diff --git a/kitty/.config/kitty/kitty.conf b/kitty/.config/kitty/kitty.conf deleted file mode 100644 index 6317167..0000000 --- a/kitty/.config/kitty/kitty.conf +++ /dev/null @@ -1,1294 +0,0 @@ -# vim:fileencoding=utf-8:ft=conf:foldmethod=marker - -#: Fonts {{{ - -#: kitty has very powerful font management. You can configure -#: individual font faces and even specify special fonts for particular -#: characters. - -font_family SourceCodePro-Medium -bold_font auto -italic_font auto -bold_italic_font auto - -#: You can specify different fonts for the bold/italic/bold-italic -#: variants. To get a full list of supported fonts use the `kitty -#: list-fonts` command. By default they are derived automatically, by -#: the OSes font system. Setting them manually is useful for font -#: families that have many weight variants like Book, Medium, Thick, -#: etc. For example:: - -#: font_family Operator Mono Book -#: bold_font Operator Mono Medium -#: italic_font Operator Mono Book Italic -#: bold_italic_font Operator Mono Medium Italic - -font_size 18.0 - -#: Font size (in pts) - -# force_ltr no - -#: kitty does not support BIDI (bidirectional text), however, for RTL -#: scripts, words are automatically displayed in RTL. That is to say, -#: in an RTL script, the words "HELLO WORLD" display in kitty as -#: "WORLD HELLO", and if you try to select a substring of an RTL- -#: shaped string, you will get the character that would be there had -#: the the string been LTR. For example, assuming the Hebrew word -#: ירושלים, selecting the character that on the screen appears to be ם -#: actually writes into the selection buffer the character י. - -#: kitty's default behavior is useful in conjunction with a filter to -#: reverse the word order, however, if you wish to manipulate RTL -#: glyphs, it can be very challenging to work with, so this option is -#: provided to turn it off. Furthermore, this option can be used with -#: the command line program GNU FriBidi -#: to get BIDI -#: support, because it will force kitty to always treat the text as -#: LTR, which FriBidi expects for terminals. - -adjust_line_height 110% -# adjust_column_width 0 - -#: Change the size of each character cell kitty renders. You can use -#: either numbers, which are interpreted as pixels or percentages -#: (number followed by %), which are interpreted as percentages of the -#: unmodified values. You can use negative pixels or percentages less -#: than 100% to reduce sizes (but this might cause rendering -#: artifacts). - -# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols - -#: Map the specified unicode codepoints to a particular font. Useful -#: if you need special rendering for some symbols, such as for -#: Powerline. Avoids the need for patched fonts. Each unicode code -#: point is specified in the form U+. You -#: can specify multiple code points, separated by commas and ranges -#: separated by hyphens. symbol_map itself can be specified multiple -#: times. Syntax is:: - -#: symbol_map codepoints Font Family Name - -# disable_ligatures never - -#: Choose how you want to handle multi-character ligatures. The -#: default is to always render them. You can tell kitty to not render -#: them when the cursor is over them by using cursor to make editing -#: easier, or have kitty never render them at all by using always, if -#: you don't like them. The ligature strategy can be set per-window -#: either using the kitty remote control facility or by defining -#: shortcuts for it in kitty.conf, for example:: - -#: map alt+1 disable_ligatures_in active always -#: map alt+2 disable_ligatures_in all never -#: map alt+3 disable_ligatures_in tab cursor - -#: Note that this refers to programming ligatures, typically -#: implemented using the calt OpenType feature. For disabling general -#: ligatures, use the font_features setting. - -# font_features none - -#: Choose exactly which OpenType features to enable or disable. This -#: is useful as some fonts might have features worthwhile in a -#: terminal. For example, Fira Code Retina includes a discretionary -#: feature, zero, which in that font changes the appearance of the -#: zero (0), to make it more easily distinguishable from Ø. Fira Code -#: Retina also includes other discretionary features known as -#: Stylistic Sets which have the tags ss01 through ss20. - -#: Note that this code is indexed by PostScript name, and not the font -#: family. This allows you to define very precise feature settings; -#: e.g. you can disable a feature in the italic font but not in the -#: regular font. - -#: To get the PostScript name for a font, use kitty + list-fonts -#: --psnames:: - -#: $ kitty + list-fonts --psnames | grep Fira -#: Fira Code -#: Fira Code Bold (FiraCode-Bold) -#: Fira Code Light (FiraCode-Light) -#: Fira Code Medium (FiraCode-Medium) -#: Fira Code Regular (FiraCode-Regular) -#: Fira Code Retina (FiraCode-Retina) - -#: The part in brackets is the PostScript name. - -#: Enable alternate zero and oldstyle numerals:: - -#: font_features FiraCode-Retina +zero +onum - -#: Enable only alternate zero:: - -#: font_features FiraCode-Retina +zero - -#: Disable the normal ligatures, but keep the calt feature which (in -#: this font) breaks up monotony:: - -#: font_features TT2020StyleB-Regular -liga +calt - -#: In conjunction with force_ltr, you may want to disable Arabic -#: shaping entirely, and only look at their isolated forms if they -#: show up in a document. You can do this with e.g.:: - -#: font_features UnifontMedium +isol -medi -fina -init - -# box_drawing_scale 0.001, 1, 1.5, 2 - -#: Change the sizes of the lines used for the box drawing unicode -#: characters These values are in pts. They will be scaled by the -#: monitor DPI to arrive at a pixel value. There must be four values -#: corresponding to thin, normal, thick, and very thick lines. - -#: }}} - -#: Cursor customization {{{ - -# cursor #81a1c1 - -# Url corsor -url_color #0087bd - -#: Default cursor color - -# cursor_text_color #111111 - -#: Choose the color of text under the cursor. If you want it rendered -#: with the background color of the cell underneath instead, use the -#: special keyword: background - -# cursor_shape block - -#: The cursor shape can be one of (block, beam, underline) - -# cursor_beam_thickness 1.5 - -#: Defines the thickness of the beam cursor (in pts) - -# cursor_underline_thickness 2.0 - -#: Defines the thickness of the underline cursor (in pts) - -# cursor_blink_interval -1 - -#: The interval (in seconds) at which to blink the cursor. Set to zero -#: to disable blinking. Negative values mean use system default. Note -#: that numbers smaller than repaint_delay will be limited to -#: repaint_delay. - -# cursor_stop_blinking_after 15.0 - -#: Stop blinking cursor after the specified number of seconds of -#: keyboard inactivity. Set to zero to never stop blinking. - -shell_integration no-cursor - -#: }}} - -#: Scrollback {{{ - -# scrollback_lines 2000 - -#: Number of lines of history to keep in memory for scrolling back. -#: Memory is allocated on demand. Negative numbers are (effectively) -#: infinite scrollback. Note that using very large scrollback is not -#: recommended as it can slow down resizing of the terminal and also -#: use large amounts of RAM. - -# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER - -#: Program with which to view scrollback in a new window. The -#: scrollback buffer is passed as STDIN to this program. If you change -#: it, make sure the program you use can handle ANSI escape sequences -#: for colors and text formatting. INPUT_LINE_NUMBER in the command -#: line above will be replaced by an integer representing which line -#: should be at the top of the screen. Similarly CURSOR_LINE and -#: CURSOR_COLUMN will be replaced by the current cursor position. - -# scrollback_pager_history_size 0 - -#: Separate scrollback history size, used only for browsing the -#: scrollback buffer (in MB). This separate buffer is not available -#: for interactive scrolling but will be piped to the pager program -#: when viewing scrollback buffer in a separate window. The current -#: implementation stores one character in 4 bytes, so approximatively -#: 2500 lines per megabyte at 100 chars per line. A value of zero or -#: less disables this feature. The maximum allowed size is 4GB. - -# wheel_scroll_multiplier 5.0 - -#: Modify the amount scrolled by the mouse wheel. Note this is only -#: used for low precision scrolling devices, not for high precision -#: scrolling on platforms such as macOS and Wayland. Use negative -#: numbers to change scroll direction. - -# touch_scroll_multiplier 1.0 - -#: Modify the amount scrolled by a touchpad. Note this is only used -#: for high precision scrolling devices on platforms such as macOS and -#: Wayland. Use negative numbers to change scroll direction. - -#: }}} - -#: Mouse {{{ - -# mouse_hide_wait 0.0 - -#: Hide mouse cursor after the specified number of seconds of the -#: mouse not being used. Set to zero to disable mouse cursor hiding. -#: Set to a negative value to hide the mouse cursor immediately when -#: typing text. Disabled by default on macOS as getting it to work -#: robustly with the ever-changing sea of bugs that is Cocoa is too -#: much effort. - -# url_color #0087bd -# url_style curly - -#: The color and style for highlighting URLs on mouse-over. url_style -#: can be one of: none, single, double, curly - -# open_url_modifiers kitty_mod - -#: The modifier keys to press when clicking with the mouse on URLs to -#: open the URL - -# open_url_with default - -#: The program with which to open URLs that are clicked on. The -#: special value default means to use the operating system's default -#: URL handler. - -# url_prefixes http https file ftp - -#: The set of URL prefixes to look for when detecting a URL under the -#: mouse cursor. - -# copy_on_select no - -#: Copy to clipboard or a private buffer on select. With this set to -#: clipboard, simply selecting text with the mouse will cause the text -#: to be copied to clipboard. Useful on platforms such as macOS that -#: do not have the concept of primary selections. You can instead -#: specify a name such as a1 to copy to a private kitty buffer -#: instead. Map a shortcut with the paste_from_buffer action to paste -#: from this private buffer. For example:: - -#: map cmd+shift+v paste_from_buffer a1 - -#: Note that copying to the clipboard is a security risk, as all -#: programs, including websites open in your browser can read the -#: contents of the system clipboard. - -# strip_trailing_spaces never - -#: Remove spaces at the end of lines when copying to clipboard. A -#: value of smart will do it when using normal selections, but not -#: rectangle selections. always will always do it. - -# rectangle_select_modifiers ctrl+alt - -#: The modifiers to use rectangular selection (i.e. to select text in -#: a rectangular block with the mouse) - -# terminal_select_modifiers shift - -#: The modifiers to override mouse selection even when a terminal -#: application has grabbed the mouse - -# select_by_word_characters @-./_~?&=%+# - -#: Characters considered part of a word when double clicking. In -#: addition to these characters any character that is marked as an -#: alphanumeric character in the unicode database will be matched. - -# click_interval -1.0 - -#: The interval between successive clicks to detect double/triple -#: clicks (in seconds). Negative numbers will use the system default -#: instead, if available, or fallback to 0.5. - -# focus_follows_mouse no - -#: Set the active window to the window under the mouse when moving the -#: mouse around - -# pointer_shape_when_grabbed arrow - -#: The shape of the mouse pointer when the program running in the -#: terminal grabs the mouse. Valid values are: arrow, beam and hand - -#: }}} - -#: Performance tuning {{{ - -# repaint_delay 10 - -#: Delay (in milliseconds) between screen updates. Decreasing it, -#: increases frames-per-second (FPS) at the cost of more CPU usage. -#: The default value yields ~100 FPS which is more than sufficient for -#: most uses. Note that to actually achieve 100 FPS you have to either -#: set sync_to_monitor to no or use a monitor with a high refresh -#: rate. Also, to minimize latency when there is pending input to be -#: processed, repaint_delay is ignored. - -# input_delay 3 - -#: Delay (in milliseconds) before input from the program running in -#: the terminal is processed. Note that decreasing it will increase -#: responsiveness, but also increase CPU usage and might cause flicker -#: in full screen programs that redraw the entire screen on each loop, -#: because kitty is so fast that partial screen updates will be drawn. - -# sync_to_monitor yes - -#: Sync screen updates to the refresh rate of the monitor. This -#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing) -#: when scrolling. However, it limits the rendering speed to the -#: refresh rate of your monitor. With a very high speed mouse/high -#: keyboard repeat rate, you may notice some slight input latency. If -#: so, set this to no. - -#: }}} - -#: Terminal bell {{{ - -# enable_audio_bell yes - -#: Enable/disable the audio bell. Useful in environments that require -#: silence. - -# visual_bell_duration 0.0 - -#: Visual bell duration. Flash the screen when a bell occurs for the -#: specified number of seconds. Set to zero to disable. - -# window_alert_on_bell yes - -#: Request window attention on bell. Makes the dock icon bounce on -#: macOS or the taskbar flash on linux. - -# bell_on_tab yes - -#: Show a bell symbol on the tab if a bell occurs in one of the -#: windows in the tab and the window is not the currently focused -#: window - -# command_on_bell none - -#: Program to run when a bell occurs. - -#: }}} - -#: Window layout {{{ - -# remember_window_size yes -# initial_window_width 640 -# initial_window_height 400 - -#: If enabled, the window size will be remembered so that new -#: instances of kitty will have the same size as the previous -#: instance. If disabled, the window will initially have size -#: configured by initial_window_width/height, in pixels. You can use a -#: suffix of "c" on the width/height values to have them interpreted -#: as number of cells instead of pixels. - -# enabled_layouts * - -#: The enabled window layouts. A comma separated list of layout names. -#: The special value all means all layouts. The first listed layout -#: will be used as the startup layout. Default configuration is all -#: layouts in alphabetical order. For a list of available layouts, see -#: the https://sw.kovidgoyal.net/kitty/index.html#layouts. - -# window_resize_step_cells 2 -# window_resize_step_lines 2 - -#: The step size (in units of cell width/cell height) to use when -#: resizing windows. The cells value is used for horizontal resizing -#: and the lines value for vertical resizing. - -# window_border_width 1.0 - -#: The width (in pts) of window borders. Will be rounded to the -#: nearest number of pixels based on screen resolution. Note that -#: borders are displayed only when more than one window is visible. -#: They are meant to separate multiple windows. - -# draw_minimal_borders yes - -#: Draw only the minimum borders needed. This means that only the -#: minimum needed borders for inactive windows are drawn. That is only -#: the borders that separate the inactive window from a neighbor. Note -#: that setting a non-zero window margin overrides this and causes all -#: borders to be drawn. - -# window_margin_width 0 - -#: The window margin (in pts) (blank area outside the border). A -#: single value sets all four sides. Two values set the vertical and -#: horizontal sides. Three values set top, horizontal and bottom. Four -#: values set top, right, bottom and left. - -# single_window_margin_width -1 - -#: The window margin (in pts) to use when only a single window is -#: visible. Negative values will cause the value of -#: window_margin_width to be used instead. A single value sets all -#: four sides. Two values set the vertical and horizontal sides. Three -#: values set top, horizontal and bottom. Four values set top, right, -#: bottom and left. - -window_padding_width 4 - -#: The window padding (in pts) (blank area between the text and the -#: window border). A single value sets all four sides. Two values set -#: the vertical and horizontal sides. Three values set top, horizontal -#: and bottom. Four values set top, right, bottom and left. - -# placement_strategy center - -#: When the window size is not an exact multiple of the cell size, the -#: cell area of the terminal window will have some extra padding on -#: the sides. You can control how that padding is distributed with -#: this option. Using a value of center means the cell area will be -#: placed centrally. A value of top-left means the padding will be on -#: only the bottom and right edges. - -# active_border_color #00ff00 - -#: The color for the border of the active window. Set this to none to -#: not draw borders around the active window. - -# inactive_border_color #cccccc - -#: The color for the border of inactive windows - -# bell_border_color #ff5a00 - -#: The color for the border of inactive windows in which a bell has -#: occurred - -# inactive_text_alpha 1.0 - -#: Fade the text in inactive windows by the specified amount (a number -#: between zero and one, with zero being fully faded). - -# hide_window_decorations no - -#: Hide the window decorations (title-bar and window borders) with -#: yes. On macOS, titlebar-only can be used to only hide the titlebar. -#: Whether this works and exactly what effect it has depends on the -#: window manager/operating system. - -# resize_debounce_time 0.1 - -#: The time (in seconds) to wait before redrawing the screen when a -#: resize event is received. On platforms such as macOS, where the -#: operating system sends events corresponding to the start and end of -#: a resize, this number is ignored. - -# resize_draw_strategy static - -#: Choose how kitty draws a window while a resize is in progress. A -#: value of static means draw the current window contents, mostly -#: unchanged. A value of scale means draw the current window contents -#: scaled. A value of blank means draw a blank window. A value of size -#: means show the window size in cells. - -# resize_in_steps no - -#: Resize the OS window in steps as large as the cells, instead of -#: with the usual pixel accuracy. Combined with an -#: initial_window_width and initial_window_height in number of cells, -#: this option can be used to keep the margins as small as possible -#: when resizing the OS window. Note that this does not currently work -#: on Wayland. - -# confirm_os_window_close 0 - -#: Ask for confirmation when closing an OS window or a tab that has at -#: least this number of kitty windows in it. A value of zero disables -#: confirmation. This confirmation also applies to requests to quit -#: the entire application (all OS windows, via the quit action). - -#: }}} - -#: Tab bar {{{ - -# tab_bar_edge bottom - -#: Which edge to show the tab bar on, top or bottom - -# tab_bar_margin_width 0.0 - -#: The margin to the left and right of the tab bar (in pts) - -tab_bar_style fade - -#: The tab bar style, can be one of: fade, separator, powerline, or -#: hidden. In the fade style, each tab's edges fade into the -#: background color, in the separator style, tabs are separated by a -#: configurable separator, and the powerline shows the tabs as a -#: continuous line. - -# tab_bar_min_tabs 2 - -#: The minimum number of tabs that must exist before the tab bar is -#: shown - -# tab_switch_strategy previous - -#: The algorithm to use when switching to a tab when the current tab -#: is closed. The default of previous will switch to the last used -#: tab. A value of left will switch to the tab to the left of the -#: closed tab. A value of last will switch to the right-most tab. - -# tab_fade 0.25 0.5 0.75 1 - -#: Control how each tab fades into the background when using fade for -#: the tab_bar_style. Each number is an alpha (between zero and one) -#: that controls how much the corresponding cell fades into the -#: background, with zero being no fade and one being full fade. You -#: can change the number of cells used by adding/removing entries to -#: this list. - -# tab_separator " ┇" - -#: The separator between tabs in the tab bar when using separator as -#: the tab_bar_style. - -# tab_title_template "{title}" - -#: A template to render the tab title. The default just renders the -#: title. If you wish to include the tab-index as well, use something -#: like: {index}: {title}. Useful if you have shortcuts mapped for -#: goto_tab N. In addition you can use {layout_name} for the current -#: layout name and {num_windows} for the number of windows in the tab. -#: Note that formatting is done by Python's string formatting -#: machinery, so you can use, for instance, {layout_name[:2].upper()} -#: to show only the first two letters of the layout name, upper-cased. - -# active_tab_title_template none - -#: Template to use for active tabs, if not specified falls back to -#: tab_title_template. - -# active_tab_foreground #000 -# active_tab_background #eee -# active_tab_font_style bold-italic -# inactive_tab_foreground #444 -# inactive_tab_background #999 -# inactive_tab_font_style normal - -#: Tab bar colors and styles - -# tab_bar_background none - -#: Background color for the tab bar. Defaults to using the terminal -#: background color. - -#: }}} - -#: Color scheme {{{ - -foreground #d8dee9 -background #2e3440 - -#: The foreground and background colors - -# background_opacity 1.0 - -#: The opacity of the background. A number between 0 and 1, where 1 is -#: opaque and 0 is fully transparent. This will only work if -#: supported by the OS (for instance, when using a compositor under -#: X11). Note that it only sets the background color's opacity in -#: cells that have the same background color as the default terminal -#: background. This is so that things like the status bar in vim, -#: powerline prompts, etc. still look good. But it means that if you -#: use a color theme with a background color in your editor, it will -#: not be rendered as transparent. Instead you should change the -#: default background color in your kitty config and not use a -#: background color in the editor color scheme. Or use the escape -#: codes to set the terminals default colors in a shell script to -#: launch your editor. Be aware that using a value less than 1.0 is a -#: (possibly significant) performance hit. If you want to dynamically -#: change transparency of windows set dynamic_background_opacity to -#: yes (this is off by default as it has a performance cost) - -# background_image none - -#: Path to a background image. Must be in PNG format. - -# background_image_layout tiled - -#: Whether to tile or scale the background image. - -# background_image_linear no - -#: When background image is scaled, whether linear interpolation -#: should be used. - -# dynamic_background_opacity no - -#: Allow changing of the background_opacity dynamically, using either -#: keyboard shortcuts (increase_background_opacity and -#: decrease_background_opacity) or the remote control facility. - -# background_tint 0.0 - -#: How much to tint the background image by the background color. The -#: tint is applied only under the text area, not margin/borders. Makes -#: it easier to read the text. Tinting is done using the current -#: background color for each window. This setting applies only if -#: background_opacity is set and transparent windows are supported or -#: background_image is set. - -# dim_opacity 0.75 - -#: How much to dim text that has the DIM/FAINT attribute set. One -#: means no dimming and zero means fully dimmed (i.e. invisible). - -selection_foreground #000000 - -#: The foreground for text selected with the mouse. A value of none -#: means to leave the color unchanged. - -selection_background #fffacd - -#: The background for text selected with the mouse. - - -#: The 16 terminal colors. There are 8 basic colors, each color has a -#: dull and bright version. You can also set the remaining colors from -#: the 256 color table as color16 to color255. - -#: black -color0 #3b4252 -color8 #616e88 - -#: red -color1 #bf616a -color9 #bf616a - -#: green -color2 #a3be8c -color10 #a3be8c - -#: yellow -color3 #ebcb8b -color11 #ebcb8b - -#: blue -color4 #81a1c1 -color12 #81a1c1 - -#: magenta -color5 #b48ead -color13 #b48ead - -#: cyan -color6 #88c0d0 -color14 #8fbcbb - -#: white -color7 #e5e9f0 -color15 #eceff4 - -# mark1_foreground black - -#: Color for marks of type 1 - -# mark1_background #98d3cb - -#: Color for marks of type 1 (light steel blue) - -# mark2_foreground black - -#: Color for marks of type 2 - -# mark2_background #f2dcd3 - -#: Color for marks of type 1 (beige) - -# mark3_foreground black - -#: Color for marks of type 3 - -# mark3_background #f274bc - -#: Color for marks of type 1 (violet) - -#: }}} - -#: Advanced {{{ - -# shell . - -#: The shell program to execute. The default value of . means to use -#: whatever shell is set as the default shell for the current user. -#: Note that on macOS if you change this, you might need to add -#: --login to ensure that the shell starts in interactive mode and -#: reads its startup rc files. - -# editor . - -#: The console editor to use when editing the kitty config file or -#: similar tasks. A value of . means to use the environment variables -#: VISUAL and EDITOR in that order. Note that this environment -#: variable has to be set not just in your shell startup scripts but -#: system-wide, otherwise kitty will not see it. - -# close_on_child_death no - -#: Close the window when the child process (shell) exits. If no (the -#: default), the terminal will remain open when the child exits as -#: long as there are still processes outputting to the terminal (for -#: example disowned or backgrounded processes). If yes, the window -#: will close as soon as the child process exits. Note that setting it -#: to yes means that any background processes still using the terminal -#: can fail silently because their stdout/stderr/stdin no longer work. - -# allow_remote_control no - -#: Allow other programs to control kitty. If you turn this on other -#: programs can control all aspects of kitty, including sending text -#: to kitty windows, opening new windows, closing windows, reading the -#: content of windows, etc. Note that this even works over ssh -#: connections. You can chose to either allow any program running -#: within kitty to control it, with yes or only programs that connect -#: to the socket specified with the kitty --listen-on command line -#: option, if you use the value socket-only. The latter is useful if -#: you want to prevent programs running on a remote computer over ssh -#: from controlling kitty. - -# listen_on none - -#: Tell kitty to listen to the specified unix/tcp socket for remote -#: control connections. Note that this will apply to all kitty -#: instances. It can be overridden by the kitty --listen-on command -#: line flag. This option accepts only UNIX sockets, such as -#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment -#: variables are expanded. If {kitty_pid} is present then it is -#: replaced by the PID of the kitty process, otherwise the PID of the -#: kitty process is appended to the value, with a hyphen. This option -#: is ignored unless you also set allow_remote_control to enable -#: remote control. See the help for kitty --listen-on for more -#: details. - -# env - -#: Specify environment variables to set in all child processes. Note -#: that environment variables are expanded recursively, so if you -#: use:: - -#: env MYVAR1=a -#: env MYVAR2=${MYVAR1}/${HOME}/b - -#: The value of MYVAR2 will be a//b. - -# update_check_interval 24 - -#: Periodically check if an update to kitty is available. If an update -#: is found a system notification is displayed informing you of the -#: available update. The default is to check every 24 hrs, set to zero -#: to disable. - -# startup_session none - -#: Path to a session file to use for all kitty instances. Can be -#: overridden by using the kitty --session command line option for -#: individual instances. See -#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty -#: documentation for details. Note that relative paths are interpreted -#: with respect to the kitty config directory. Environment variables -#: in the path are expanded. - -# clipboard_control write-clipboard write-primary - -#: Allow programs running in kitty to read and write from the -#: clipboard. You can control exactly which actions are allowed. The -#: set of possible actions is: write-clipboard read-clipboard write- -#: primary read-primary. You can additionally specify no-append to -#: disable kitty's protocol extension for clipboard concatenation. The -#: default is to allow writing to the clipboard and primary selection -#: with concatenation enabled. Note that enabling the read -#: functionality is a security risk as it means that any program, even -#: one running on a remote server via SSH can read your clipboard. - -# term xterm-kitty - -#: The value of the TERM environment variable to set. Changing this -#: can break many terminal programs, only change it if you know what -#: you are doing, not because you read some advice on Stack Overflow -#: to change it. The TERM variable is used by various programs to get -#: information about the capabilities and behavior of the terminal. If -#: you change it, depending on what programs you run, and how -#: different the terminal you are changing it to is, various things -#: from key-presses, to colors, to various advanced features may not -#: work. - -#: }}} - -#: OS specific tweaks {{{ - -macos_titlebar_color #15202b - -#: Change the color of the kitty window's titlebar on macOS. A value -#: of system means to use the default system color, a value of -#: background means to use the background color of the currently -#: active window and finally you can use an arbitrary color, such as -#: #12af59 or red. WARNING: This option works by using a hack, as -#: there is no proper Cocoa API for it. It sets the background color -#: of the entire window and makes the titlebar transparent. As such it -#: is incompatible with background_opacity. If you want to use both, -#: you are probably better off just hiding the titlebar with -#: hide_window_decorations. - -# macos_option_as_alt no - -#: Use the option key as an alt key. With this set to no, kitty will -#: use the macOS native Option+Key = unicode character behavior. This -#: will break any Alt+key keyboard shortcuts in your terminal -#: programs, but you can use the macOS unicode input technique. You -#: can use the values: left, right, or both to use only the left, -#: right or both Option keys as Alt, instead. - -# macos_hide_from_tasks no - -#: Hide the kitty window from running tasks (Option+Tab) on macOS. - -# macos_quit_when_last_window_closed no - -#: Have kitty quit when all the top-level windows are closed. By -#: default, kitty will stay running, even with no open windows, as is -#: the expected behavior on macOS. - -# macos_window_resizable yes - -#: Disable this if you want kitty top-level (OS) windows to not be -#: resizable on macOS. - -# macos_thicken_font 0 - -#: Draw an extra border around the font with the given width, to -#: increase legibility at small font sizes. For example, a value of -#: 0.75 will result in rendering that looks similar to sub-pixel -#: antialiasing at common font sizes. - -# macos_traditional_fullscreen no - -#: Use the traditional full-screen transition, that is faster, but -#: less pretty. - -# macos_show_window_title_in all - -#: Show or hide the window title in the macOS window or menu-bar. A -#: value of window will show the title of the currently active window -#: at the top of the macOS window. A value of menubar will show the -#: title of the currently active window in the macOS menu-bar, making -#: use of otherwise wasted space. all will show the title everywhere -#: and none hides the title in the window and the menu-bar. - -# macos_custom_beam_cursor no - -#: Enable/disable custom mouse cursor for macOS that is easier to see -#: on both light and dark backgrounds. WARNING: this might make your -#: mouse cursor invisible on dual GPU machines. - -# linux_display_server auto - -#: Choose between Wayland and X11 backends. By default, an appropriate -#: backend based on the system state is chosen automatically. Set it -#: to x11 or wayland to force the choice. - -#: }}} - -#: Keyboard shortcuts {{{ - -#: For a list of key names, see: the GLFW key macros -#: . -#: The name to use is the part after the GLFW_KEY_ prefix. For a list -#: of modifier names, see: GLFW mods -#: - -#: On Linux you can also use XKB key names to bind keys that are not -#: supported by GLFW. See XKB keys -#: for a list of key names. The name to use is the part -#: after the XKB_KEY_ prefix. Note that you can only use an XKB key -#: name for keys that are not known as GLFW keys. - -#: Finally, you can use raw system key codes to map keys, again only -#: for keys that are not known as GLFW keys. To see the system key -#: code for a key, start kitty with the kitty --debug-keyboard option. -#: Then kitty will output some debug text for every key event. In that -#: text look for ``native_code`` the value of that becomes the key -#: name in the shortcut. For example: - -#: .. code-block:: none - -#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a' - -#: Here, the key name for the A key is 0x61 and you can use it with:: - -#: map ctrl+0x61 something - -#: to map ctrl+a to something. - -#: You can use the special action no_op to unmap a keyboard shortcut -#: that is assigned in the default configuration:: - -#: map kitty_mod+space no_op - -#: You can combine multiple actions to be triggered by a single -#: shortcut, using the syntax below:: - -#: map key combine action1 action2 action3 ... - -#: For example:: - -#: map kitty_mod+e combine : new_window : next_layout - -#: this will create a new window and switch to the next available -#: layout - -#: You can use multi-key shortcuts using the syntax shown below:: - -#: map key1>key2>key3 action - -#: For example:: - -#: map ctrl+f>2 set_font_size 20 - -# kitty_mod ctrl+shift - -#: The value of kitty_mod is used as the modifier for all default -#: shortcuts, you can change it in your kitty.conf to change the -#: modifiers for all the default shortcuts. - -# clear_all_shortcuts no - -#: You can have kitty remove all shortcut definition seen up to this -#: point. Useful, for instance, to remove the default shortcuts. - -# kitten_alias hints hints --hints-offset=0 - -#: You can create aliases for kitten names, this allows overriding the -#: defaults for kitten options and can also be used to shorten -#: repeated mappings of the same kitten with a specific group of -#: options. For example, the above alias changes the default value of -#: kitty +kitten hints --hints-offset to zero for all mappings, -#: including the builtin ones. - -#: Clipboard {{{ - -# map kitty_mod+c copy_to_clipboard - -#: There is also a copy_or_interrupt action that can be optionally -#: mapped to Ctrl+c. It will copy only if there is a selection and -#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt -#: will copy and clear the selection or send an interrupt if there is -#: no selection. - -# map cmd+c copy_to_clipboard -# map kitty_mod+v paste_from_clipboard -# map cmd+v paste_from_clipboard -# map kitty_mod+s paste_from_selection -# map shift+insert paste_from_selection -# map kitty_mod+o pass_selection_to_program - -#: You can also pass the contents of the current selection to any -#: program using pass_selection_to_program. By default, the system's -#: open program is used, but you can specify your own, the selection -#: will be passed as a command line argument to the program, for -#: example:: - -#: map kitty_mod+o pass_selection_to_program firefox - -#: You can pass the current selection to a terminal program running in -#: a new kitty window, by using the @selection placeholder:: - -#: map kitty_mod+y new_window less @selection - -#: }}} - -#: Scrolling {{{ - -# map kitty_mod+up scroll_line_up -# map alt+cmd+page_up scroll_line_up -# map cmd+up scroll_line_up -# map kitty_mod+k scroll_line_up -# map kitty_mod+down scroll_line_down -# map kitty_mod+j scroll_line_down -# map alt+cmd+page_down scroll_line_down -# map cmd+down scroll_line_down -# map kitty_mod+page_up scroll_page_up -# map cmd+page_up scroll_page_up -# map kitty_mod+page_down scroll_page_down -# map cmd+page_down scroll_page_down -# map kitty_mod+home scroll_home -# map cmd+home scroll_home -# map kitty_mod+end scroll_end -# map cmd+end scroll_end -# map kitty_mod+h show_scrollback - -#: You can pipe the contents of the current screen + history buffer as -#: STDIN to an arbitrary program using the ``launch`` function. For -#: example, the following opens the scrollback buffer in less in an -#: overlay window:: - -#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R - -#: For more details on piping screen and buffer contents to external -#: programs, see launch. - -#: }}} - -#: Window management {{{ - -# map kitty_mod+enter new_window - -#: You can open a new window running an arbitrary program, for -#: example:: - -#: map kitty_mod+y launch mutt - -#: You can open a new window with the current working directory set to -#: the working directory of the current window using:: - -#: map ctrl+alt+enter launch --cwd=current - -#: You can open a new window that is allowed to control kitty via the -#: kitty remote control facility by prefixing the command line with @. -#: Any programs running in that window will be allowed to control -#: kitty. For example:: - -#: map ctrl+enter launch --allow-remote-control some_program - -#: You can open a new window next to the currently active window or as -#: the first window, with:: - -#: map ctrl+n launch --location=neighbor some_program -#: map ctrl+f launch --location=first some_program - -#: For more details, see launch. - -# map cmd+enter new_window -# map kitty_mod+n new_os_window - -#: Works like new_window above, except that it opens a top level OS -#: kitty window. In particular you can use new_os_window_with_cwd to -#: open a window with the current working directory. - -# map cmd+n new_os_window -# map kitty_mod+w close_window -# map shift+cmd+d close_window -# map kitty_mod+] next_window -# map kitty_mod+[ previous_window -# map kitty_mod+f move_window_forward -# map kitty_mod+b move_window_backward -# map kitty_mod+` move_window_to_top -# map kitty_mod+r start_resizing_window -# map cmd+r start_resizing_window -# map kitty_mod+1 first_window -# map cmd+1 first_window -# map kitty_mod+2 second_window -# map cmd+2 second_window -# map kitty_mod+3 third_window -# map cmd+3 third_window -# map kitty_mod+4 fourth_window -# map cmd+4 fourth_window -# map kitty_mod+5 fifth_window -# map cmd+5 fifth_window -# map kitty_mod+6 sixth_window -# map cmd+6 sixth_window -# map kitty_mod+7 seventh_window -# map cmd+7 seventh_window -# map kitty_mod+8 eighth_window -# map cmd+8 eighth_window -# map kitty_mod+9 ninth_window -# map cmd+9 ninth_window -# map kitty_mod+0 tenth_window -#: }}} - -#: Tab management {{{ - -# map kitty_mod+right next_tab -# map ctrl+tab next_tab -# map shift+cmd+] next_tab -# map kitty_mod+left previous_tab -# map shift+ctrl+tab previous_tab -# map shift+cmd+[ previous_tab -# map kitty_mod+t new_tab -# map cmd+t new_tab -# map kitty_mod+q close_tab -# map cmd+w close_tab -# map shift+cmd+w close_os_window -# map kitty_mod+. move_tab_forward -# map kitty_mod+, move_tab_backward -# map kitty_mod+alt+t set_tab_title -# map shift+cmd+i set_tab_title - -#: You can also create shortcuts to go to specific tabs, with 1 being -#: the first tab, 2 the second tab and -1 being the previously active -#: tab, and any number larger than the last tab being the last tab:: - -#: map ctrl+alt+1 goto_tab 1 -#: map ctrl+alt+2 goto_tab 2 - -#: Just as with new_window above, you can also pass the name of -#: arbitrary commands to run when using new_tab and use -#: new_tab_with_cwd. Finally, if you want the new tab to open next to -#: the current tab rather than at the end of the tabs list, use:: - -#: map ctrl+t new_tab !neighbor [optional cmd to run] -#: }}} - -#: Layout management {{{ - -# map kitty_mod+l next_layout - -#: You can also create shortcuts to switch to specific layouts:: - -#: map ctrl+alt+t goto_layout tall -#: map ctrl+alt+s goto_layout stack - -#: Similarly, to switch back to the previous layout:: - -#: map ctrl+alt+p last_used_layout -#: }}} - -#: Font sizes {{{ - -#: You can change the font size for all top-level kitty OS windows at -#: a time or only the current one. - -# map kitty_mod+equal change_font_size all +2.0 -# map cmd+plus change_font_size all +2.0 -# map cmd+shift+equal change_font_size all +2.0 -# map kitty_mod+minus change_font_size all -2.0 -# map cmd+minus change_font_size all -2.0 -# map kitty_mod+backspace change_font_size all 0 -# map cmd+0 change_font_size all 0 - -#: To setup shortcuts for specific font sizes:: - -#: map kitty_mod+f6 change_font_size all 10.0 - -#: To setup shortcuts to change only the current OS window's font -#: size:: - -#: map kitty_mod+f6 change_font_size current 10.0 -#: }}} - -#: Select and act on visible text {{{ - -#: Use the hints kitten to select text and either pass it to an -#: external program or insert it into the terminal or copy it to the -#: clipboard. - -# map kitty_mod+e kitten hints - -#: Open a currently visible URL using the keyboard. The program used -#: to open the URL is specified in open_url_with. - -# map kitty_mod+p>f kitten hints --type path --program - - -#: Select a path/filename and insert it into the terminal. Useful, for -#: instance to run git commands on a filename output from a previous -#: git command. - -# map kitty_mod+p>shift+f kitten hints --type path - -#: Select a path/filename and open it with the default open program. - -# map kitty_mod+p>l kitten hints --type line --program - - -#: Select a line of text and insert it into the terminal. Use for the -#: output of things like: ls -1 - -# map kitty_mod+p>w kitten hints --type word --program - - -#: Select words and insert into terminal. - -# map kitty_mod+p>h kitten hints --type hash --program - - -#: Select something that looks like a hash and insert it into the -#: terminal. Useful with git, which uses sha1 hashes to identify -#: commits - -# map kitty_mod+p>n kitten hints --type linenum - -#: Select something that looks like filename:linenum and open it in -#: vim at the specified line number. - - -#: The hints kitten has many more modes of operation that you can map -#: to different shortcuts. For a full description see kittens/hints. -#: }}} - -#: Miscellaneous {{{ - -# map kitty_mod+f11 toggle_fullscreen -# map kitty_mod+f10 toggle_maximized -# map kitty_mod+u kitten unicode_input -# map kitty_mod+f2 edit_config_file -# map kitty_mod+escape kitty_shell window - -#: Open the kitty shell in a new window/tab/overlay/os_window to -#: control kitty using commands. - -# map kitty_mod+a>m set_background_opacity +0.1 -# map kitty_mod+a>l set_background_opacity -0.1 -# map kitty_mod+a>1 set_background_opacity 1 -# map kitty_mod+a>d set_background_opacity default -# map kitty_mod+delete clear_terminal reset active - -#: You can create shortcuts to clear/reset the terminal. For example:: - -#: # Reset the terminal -#: map kitty_mod+f9 clear_terminal reset active -#: # Clear the terminal screen by erasing all contents -#: map kitty_mod+f10 clear_terminal clear active -#: # Clear the terminal scrollback by erasing it -#: map kitty_mod+f11 clear_terminal scrollback active -#: # Scroll the contents of the screen into the scrollback -#: map kitty_mod+f12 clear_terminal scroll active - -#: If you want to operate on all windows instead of just the current -#: one, use all instead of active. - -#: It is also possible to remap Ctrl+L to both scroll the current -#: screen contents into the scrollback buffer and clear the screen, -#: instead of just clearing the screen:: - -#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c - - -#: You can tell kitty to send arbitrary (UTF-8) encoded text to the -#: client program when pressing specified shortcut keys. For example:: - -#: map ctrl+alt+a send_text all Special text - -#: This will send "Special text" when you press the ctrl+alt+a key -#: combination. The text to be sent is a python string literal so you -#: can use escapes like \x1b to send control codes or \u21fb to send -#: unicode characters (or you can just input the unicode characters -#: directly as UTF-8 text). The first argument to send_text is the -#: keyboard modes in which to activate the shortcut. The possible -#: values are normal or application or kitty or a comma separated -#: combination of them. The special keyword all means all modes. The -#: modes normal and application refer to the DECCKM cursor key mode -#: for terminals, and kitty refers to the special kitty extended -#: keyboard protocol. - -#: Another example, that outputs a word and then moves the cursor to -#: the start of the line (same as pressing the Home key):: - -#: map ctrl+alt+a send_text normal Word\x1b[H -#: map ctrl+alt+a send_text application Word\x1bOH - -#: }}} - -# }}} diff --git a/nvim/.config/nvim/lua/user/alpha.lua b/nvim/.config/nvim/lua/user/alpha.lua deleted file mode 100644 index 17e462c..0000000 --- a/nvim/.config/nvim/lua/user/alpha.lua +++ /dev/null @@ -1,42 +0,0 @@ -local status_ok, alpha = pcall(require, "alpha") -if not status_ok then - return -end - -local dashboard = require("alpha.themes.dashboard") -dashboard.section.header.val = { - [[ __ ]], - [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], - [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], - [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], - [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], - [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], -} -dashboard.section.buttons.val = { - dashboard.button("f", " Find file", ":Telescope find_files "), - dashboard.button("e", " New file", ":ene startinsert "), - dashboard.button("p", " Find project", ":Telescope projects "), - dashboard.button("r", " Recently used files", ":Telescope oldfiles "), - dashboard.button("t", "󱎸 Find text", ":Telescope live_grep "), - dashboard.button("c", " Configuration", ":e $MYVIMRC "), - dashboard.button("q", " Quit Neovim", ":qa"), -} - -local function footer() --- NOTE: requires the fortune-mod package to work - -- local handle = io.popen("fortune") - -- local fortune = handle:read("*a") - -- handle:close() - -- return fortune - return "thieurom" -end - -dashboard.section.footer.val = footer() - -dashboard.section.footer.opts.hl = "Type" -dashboard.section.header.opts.hl = "Include" -dashboard.section.buttons.opts.hl = "Keyword" - -dashboard.opts.opts.noautocmd = true --- vim.cmd([[autocmd User AlphaReady echo 'ready']]) -alpha.setup(dashboard.opts) diff --git a/nvim/.config/nvim/lua/user/autocommands.lua b/nvim/.config/nvim/lua/user/autocommands.lua deleted file mode 100644 index 8134d10..0000000 --- a/nvim/.config/nvim/lua/user/autocommands.lua +++ /dev/null @@ -1,2 +0,0 @@ --- Automatically close tab/vim when nvim-tree is the last window in the tab -vim.cmd "autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif" diff --git a/nvim/.config/nvim/lua/user/bufferline.lua b/nvim/.config/nvim/lua/user/bufferline.lua deleted file mode 100644 index 7cdb077..0000000 --- a/nvim/.config/nvim/lua/user/bufferline.lua +++ /dev/null @@ -1,13 +0,0 @@ -local status_ok, bufferline = pcall(require, "bufferline") -if not status_ok then - return -end - -bufferline.setup { - options = { - close_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" - right_mouse_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" - offsets = { { filetype = "NvimTree", text = "", padding = 1 } }, - separator_style = "thin", -- | "thick" | "thin" | { 'any', 'any' }, - }, -} diff --git a/nvim/.config/nvim/lua/user/lsp/null-ls.lua b/nvim/.config/nvim/lua/user/lsp/null-ls.lua deleted file mode 100644 index 960ebbb..0000000 --- a/nvim/.config/nvim/lua/user/lsp/null-ls.lua +++ /dev/null @@ -1,19 +0,0 @@ -local null_ls_status_ok, null_ls = pcall(require, "null-ls") -if not null_ls_status_ok then - return -end - --- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting -local formatting = null_ls.builtins.formatting --- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics -local diagnostics = null_ls.builtins.diagnostics - --- https://github.com/prettier-solidity/prettier-plugin-solidity -null_ls.setup { - debug = false, - sources = { - formatting.black.with { extra_args = { "--fast" } }, - formatting.stylua, - diagnostics.flake8, - }, -} diff --git a/nvim/.config/nvim/lua/user/lualine.lua b/nvim/.config/nvim/lua/user/lualine.lua deleted file mode 100644 index dcba84f..0000000 --- a/nvim/.config/nvim/lua/user/lualine.lua +++ /dev/null @@ -1,73 +0,0 @@ -local status_ok, lualine = pcall(require, "lualine") -if not status_ok then - return -end - -local hide_in_width = function() - return vim.fn.winwidth(0) > 80 -end - -local branch = { - "branch", - icon = "󰘬", - separator = { left = "", right = "", }, -} - -local diagnostics = { - "diagnostics", - sources = { "nvim_diagnostic" }, - sections = { "error", "warn" }, - symbols = { error = " ", warn = " " }, - colored = false, - always_visible = true, -} - -local diff = { - "diff", - colored = true, - symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols - cond = hide_in_width, -} - -local location = { - "location", - padding = { left = 0, right = 1 }, -} - -local get_active_lsp = function() - local msg = "No Active Lsp" - local buf_ft = vim.api.nvim_get_option_value("filetype", {}) - local clients = vim.lsp.get_clients { bufnr = 0 } - if next(clients) == nil then - return msg - end - - for _, client in ipairs(clients) do - local filetypes = client.config.filetypes - if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then - return client.name - end - end - return msg -end - -lualine.setup { - options = { - globalstatus = true, - icons_enabled = true, - theme = "auto", - component_separators = { left = "", right = "" }, - section_separators = { left = "", right = "" }, - disabled_filetypes = { "alpha", "dashboard" }, - always_divide_middle = true, - }, - sections = { - lualine_a = { "mode" }, - lualine_b = { branch }, - lualine_c = { diff }, - lualine_x = { diagnostics, "lsp_status" }, - lualine_y = { location }, - lualine_z = { "progress" }, - }, -} - diff --git a/nvim/.config/nvim/lua/user/nvim-dap.lua b/nvim/.config/nvim/lua/user/nvim-dap.lua deleted file mode 100644 index 6b3f26c..0000000 --- a/nvim/.config/nvim/lua/user/nvim-dap.lua +++ /dev/null @@ -1,65 +0,0 @@ -local status_ok, nvim_dap = pcall(require, "dap") -if not status_ok then - return -end - -local function setupListeners() - local dap = require("dap") - local areSet = false - - dap.listeners.after["event_initialized"]["me"] = function() - if not areSet then - areSet = true - vim.keymap.set("n", "dc", dap.continue, { desc = "Continue", noremap = true }) - vim.keymap.set("n", "dC", dap.run_to_cursor, { desc = "Run To Cursor" }) - vim.keymap.set("n", "ds", dap.step_over, { desc = "Step Over" }) - vim.keymap.set("n", "di", dap.step_into, { desc = "Step Into" }) - vim.keymap.set("n", "do", dap.step_out, { desc = "Step Out" }) - vim.keymap.set({ "n", "v" }, "dh", require("dap.ui.widgets").hover, { desc = "Hover" }) - vim.keymap.set({ "n", "v" }, "de", require("dapui").eval, { desc = "Eval" }) - end - end - - dap.listeners.after["event_terminated"]["me"] = function() - if areSet then - areSet = false - vim.keymap.del("n", "dc") - vim.keymap.del("n", "dC") - vim.keymap.del("n", "ds") - vim.keymap.del("n", "di") - vim.keymap.del("n", "do") - vim.keymap.del({ "n", "v" }, "dh") - vim.keymap.del({ "n", "v" }, "de") - end - end -end - -local xcodebuild = require("xcodebuild.integrations.dap") -local codelldbPath = os.getenv("HOME") .. "/tools/codelldb-darwin-arm64/extension/adapter/codelldb" -xcodebuild.setup(codelldbPath) - -local define = vim.fn.sign_define -define("DapBreakpoint", { text = "", texthl = "DiagnosticError", linehl = "", numhl = "" }) -define("DapBreakpointRejected", { text = "", texthl = "DiagnosticError", linehl = "", numhl = "" }) -define("DapStopped", { text = "", texthl = "DiagnosticOk", linehl = "", numhl = "" }) -define("DapLogPoint", { text = "", texthl = "DiagnosticInfo", linehl = "", numhl = "" }) -define("DapLogPoint", { text = "", texthl = "DiagnosticInfo", linehl = "", numhl = "" }) - -setupListeners() - ---when breakpoint is hit, it sets the focus to the buffer with the breakpoint -require("dap").defaults.fallback.switchbuf = "usetab,uselast" - ---stylua: ignore start -vim.keymap.set("n", "dd", xcodebuild.build_and_debug, { desc = "Build & Debug" }) -vim.keymap.set("n", "dr", xcodebuild.debug_without_build, { desc = "Debug Without Building" }) -vim.keymap.set("n", "dt", xcodebuild.debug_tests, { desc = "Debug Tests" }) -vim.keymap.set("n", "dT", xcodebuild.debug_class_tests, { desc = "Debug Class Tests" }) -vim.keymap.set("n", "b", xcodebuild.toggle_breakpoint, { desc = "Toggle Breakpoint" }) -vim.keymap.set("n", "B", xcodebuild.toggle_message_breakpoint, { desc = "Toggle Message Breakpoint" }) ---stylua: ignore end - -vim.keymap.set("n", "dx", function() - xcodebuild.terminate_session() - require("dap").listeners.after["event_terminated"]["me"]() -end, { desc = "Terminate debugger" }) diff --git a/nvim/.config/nvim/lua/user/nvim-dapui.lua b/nvim/.config/nvim/lua/user/nvim-dapui.lua deleted file mode 100644 index 8d2e11a..0000000 --- a/nvim/.config/nvim/lua/user/nvim-dapui.lua +++ /dev/null @@ -1,83 +0,0 @@ -local status_ok, nvim_dapui = pcall(require, "dapui") -if not status_ok then - return -end - -nvim_dapui.setup { - controls = { - element = "repl", - enabled = true, - icons = { - disconnect = "", - run_last = "", - terminate = "⏹︎", - pause = "⏸︎", - play = "", - step_into = "󰆹", - step_out = "󰆸", - step_over = "", - step_back = "", - }, - }, - floating = { - border = "single", - mappings = { - close = { "q", "" }, - }, - }, - icons = { - collapsed = "", - expanded = "", - current_frame = "", - }, - layouts = { - { - elements = { - { id = "stacks", size = 0.25 }, - { id = "scopes", size = 0.25 }, - { id = "breakpoints", size = 0.25 }, - { id = "watches", size = 0.25 }, - }, - position = "left", - size = 40, - }, - { - elements = { - { id = "repl", size = 0.4 }, - { id = "console", size = 0.6 }, - }, - position = "bottom", - size = 10, - }, - }, -} - -local dap, dapui = require("dap"), require("dapui") -local group = vim.api.nvim_create_augroup("dapui_config", { clear = true }) - --- hide ~ in DAPUI -vim.api.nvim_create_autocmd("BufWinEnter", { - group = group, - pattern = "DAP*", - callback = function() - vim.wo.fillchars = "eob: " - end, -}) - -vim.api.nvim_create_autocmd("BufWinEnter", { - group = group, - pattern = "\\[dap\\-repl\\]", - callback = function() - vim.wo.fillchars = "eob: " - end, -}) - -dap.listeners.after.event_initialized["dapui_config"] = function() - dapui.open() -end -dap.listeners.before.event_terminated["dapui_config"] = function() - dapui.close() -end -dap.listeners.before.event_exited["dapui_config"] = function() - dapui.close() -end diff --git a/nvim/.config/nvim/lua/user/nvim-tree.lua b/nvim/.config/nvim/lua/user/nvim-tree.lua deleted file mode 100644 index c05f46a..0000000 --- a/nvim/.config/nvim/lua/user/nvim-tree.lua +++ /dev/null @@ -1,6 +0,0 @@ -local status_ok, nvim_tree = pcall(require, "nvim-tree") -if not status_ok then - return -end - -nvim_tree.setup {} diff --git a/nvim/.config/nvim/lua/user/plugins.lua b/nvim/.config/nvim/lua/user/plugins.lua deleted file mode 100644 index 70c789b..0000000 --- a/nvim/.config/nvim/lua/user/plugins.lua +++ /dev/null @@ -1,100 +0,0 @@ -local fn = vim.fn - --- Automatically install packer -local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" -if fn.empty(fn.glob(install_path)) > 0 then - PACKER_BOOTSTRAP = fn.system({ - "git", - "clone", - "--depth", - "1", - "https://github.com/wbthomason/packer.nvim", - install_path, - }) - print("Installing packer close and reopen Neovim...") - vim.cmd([[packadd packer.nvim]]) -end - --- Autocommand that reloads neovim whenever you save the plugins.lua file -vim.cmd([[ - augroup packer_user_config - autocmd! - autocmd BufWritePost plugins.lua source | PackerSync - augroup end -]]) - --- Use a protected call so we don't error out on first use -local status_ok, packer = pcall(require, "packer") -if not status_ok then - return -end - --- Have packer use a popup window -packer.init({ - display = { - open_fn = function() - return require("packer.util").float({ border = "rounded" }) - end, - }, -}) - --- Install plugins here -return packer.startup(function(use) - use { "wbthomason/packer.nvim", commit = "6afb67460283f0e990d35d229fd38fdc04063e0a" } -- Have packer manage itself - use { "nvim-tree/nvim-tree.lua" } - use { "nvim-lua/plenary.nvim" } - use { "nvim-telescope/telescope.nvim" } - use { "nvim-tree/nvim-web-devicons" } - use { "nvim-lualine/lualine.nvim", commit = "a52f078026b27694d2290e34efa61a6e4a690621" } - use { "akinsho/bufferline.nvim", commit = "99f0932365b34e22549ff58e1bea388465d15e99" } - use { "moll/vim-bbye" } - use { "windwp/nvim-autopairs" } - use { "numToStr/Comment.nvim" } - use { "goolord/alpha-nvim", commit = "a35468cd72645dbd52c0624ceead5f301c566dff" } - use { - "folke/which-key.nvim", - config = function() - vim.o.timeout = true - vim.o.timeoutlen = 300 - end - } - use { "akinsho/toggleterm.nvim" } - - -- Colorschemes - use { "EdenEast/nightfox.nvim" } - use { "neanias/everforest-nvim" } - use { "catppuccin/nvim", as = "catppuccin" } - - -- cmp plugins - use { "hrsh7th/nvim-cmp" } -- The completion plugin - use { "hrsh7th/cmp-buffer" } -- buffer completions - use { "hrsh7th/cmp-path" } -- path completions - use { "saadparwaiz1/cmp_luasnip" } -- snippet completions - use { "hrsh7th/cmp-nvim-lsp" } - - -- snippets - use { "L3MON4D3/LuaSnip", commit = "e81cbe6004051c390721d8570a4a0541ceb0df10" } - use { "rafamadriz/friendly-snippets" } -- a bunch of snippets to use - - -- LSP - use { "neovim/nvim-lspconfig", commit = "b6091272422bb0fbd729f7f5d17a56d37499c54f" } -- enable LSP - use { "williamboman/mason.nvim" } - use { "williamboman/mason-lspconfig.nvim", commit = "e86a4c84ff35240639643ffed56ee1c4d55f538e" } - use { "jose-elias-alvarez/null-ls.nvim" } -- for formatters and linters - - -- Treesitter - use { "nvim-treesitter/nvim-treesitter", commit = "4fd6d9dc175f367cdcec87630d8a3950ba7daef4" } - - -- Git - use { "lewis6991/gitsigns.nvim" } - - -- Tools - use { "MunifTanjim/nui.nvim" } - use { "rcarriga/nvim-dap-ui", requires = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" } } - use { "wojciech-kulik/xcodebuild.nvim" } - - if PACKER_BOOTSTRAP then - require("packer").sync() - end -end) - diff --git a/nvim/.config/nvim/lua/user/toggleterm.lua b/nvim/.config/nvim/lua/user/toggleterm.lua deleted file mode 100644 index c76c640..0000000 --- a/nvim/.config/nvim/lua/user/toggleterm.lua +++ /dev/null @@ -1,39 +0,0 @@ -local status_ok, toggleterm = pcall(require, "toggleterm") -if not status_ok then - return -end - -toggleterm.setup({ - size = 20, - open_mapping = [[]], - hide_numbers = true, - shade_filetypes = {}, - shade_terminals = true, - shading_factor = 2, - start_in_insert = true, - insert_mappings = true, - persist_size = true, - direction = "float", - close_on_exit = true, - shell = vim.o.shell, - float_opts = { - border = "curved", - winblend = 0, - highlights = { - border = "Normal", - background = "Normal", - }, - }, -}) - -function _G.set_terminal_keymaps() - local opts = {noremap = true} - vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) - vim.api.nvim_buf_set_keymap(0, 't', 'jk', [[]], opts) - vim.api.nvim_buf_set_keymap(0, 't', '', [[h]], opts) - vim.api.nvim_buf_set_keymap(0, 't', '', [[j]], opts) - vim.api.nvim_buf_set_keymap(0, 't', '', [[k]], opts) - vim.api.nvim_buf_set_keymap(0, 't', '', [[l]], opts) -end - -vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') diff --git a/nvim/.config/nvim/lua/user/treesitter.lua b/nvim/.config/nvim/lua/user/treesitter.lua deleted file mode 100644 index 80e9eaf..0000000 --- a/nvim/.config/nvim/lua/user/treesitter.lua +++ /dev/null @@ -1,30 +0,0 @@ -local status_ok, treesitter = pcall(require, "nvim-treesitter") -if not status_ok then - return -end - -local status_ok, configs = pcall(require, "nvim-treesitter.configs") -if not status_ok then - return -end - -configs.setup { - ensure_installed = { "lua", "markdown", "markdown_inline", "bash", "python", "swift" }, -- put the language you want in this array - -- ensure_installed = "all", -- one of "all" or a list of languages - ignore_install = { "" }, -- List of parsers to ignore installing - sync_install = false, -- install languages synchronously (only applied to `ensure_installed`) - - highlight = { - enable = true, -- false will disable the whole extension - disable = { "css" }, -- list of language that will be disabled - }, - autopairs = { - enable = true, - }, - indent = { enable = true, disable = { "python", "css" } }, - - context_commentstring = { - enable = true, - enable_autocmd = false, - }, -} diff --git a/nvim/.config/nvim/lua/user/xcodebuild.lua b/nvim/.config/nvim/lua/user/xcodebuild.lua deleted file mode 100644 index 374266a..0000000 --- a/nvim/.config/nvim/lua/user/xcodebuild.lua +++ /dev/null @@ -1,6 +0,0 @@ -local status_ok, xcodebuild = pcall(require, "xcodebuild") -if not status_ok then - return -end - -xcodebuild.setup() diff --git a/nvim/.config/nvim/plugin/packer_compiled.lua b/nvim/.config/nvim/plugin/packer_compiled.lua deleted file mode 100644 index 396270c..0000000 --- a/nvim/.config/nvim/plugin/packer_compiled.lua +++ /dev/null @@ -1,234 +0,0 @@ --- Automatically generated packer.nvim plugin loader code - -if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then - vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') - return -end - -vim.api.nvim_command('packadd packer.nvim') - -local no_errors, error_msg = pcall(function() - -_G._packer = _G._packer or {} -_G._packer.inside_compile = true - -local time -local profile_info -local should_profile = false -if should_profile then - local hrtime = vim.loop.hrtime - profile_info = {} - time = function(chunk, start) - if start then - profile_info[chunk] = hrtime() - else - profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 - end - end -else - time = function(chunk, start) end -end - -local function save_profiles(threshold) - local sorted_times = {} - for chunk_name, time_taken in pairs(profile_info) do - sorted_times[#sorted_times + 1] = {chunk_name, time_taken} - end - table.sort(sorted_times, function(a, b) return a[2] > b[2] end) - local results = {} - for i, elem in ipairs(sorted_times) do - if not threshold or threshold and elem[2] > threshold then - results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' - end - end - if threshold then - table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') - end - - _G._packer.profile_output = results -end - -time([[Luarocks path setup]], true) -local package_path_str = "/Users/doanthieu/.cache/nvim/packer_hererocks/2.1.1692716794/share/lua/5.1/?.lua;/Users/doanthieu/.cache/nvim/packer_hererocks/2.1.1692716794/share/lua/5.1/?/init.lua;/Users/doanthieu/.cache/nvim/packer_hererocks/2.1.1692716794/lib/luarocks/rocks-5.1/?.lua;/Users/doanthieu/.cache/nvim/packer_hererocks/2.1.1692716794/lib/luarocks/rocks-5.1/?/init.lua" -local install_cpath_pattern = "/Users/doanthieu/.cache/nvim/packer_hererocks/2.1.1692716794/lib/lua/5.1/?.so" -if not string.find(package.path, package_path_str, 1, true) then - package.path = package.path .. ';' .. package_path_str -end - -if not string.find(package.cpath, install_cpath_pattern, 1, true) then - package.cpath = package.cpath .. ';' .. install_cpath_pattern -end - -time([[Luarocks path setup]], false) -time([[try_loadstring definition]], true) -local function try_loadstring(s, component, name) - local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) - if not success then - vim.schedule(function() - vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) - end) - end - return result -end - -time([[try_loadstring definition]], false) -time([[Defining packer_plugins]], true) -_G.packer_plugins = { - ["Comment.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/Comment.nvim", - url = "https://github.com/numToStr/Comment.nvim" - }, - LuaSnip = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/LuaSnip", - url = "https://github.com/L3MON4D3/LuaSnip" - }, - ["bufferline.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/bufferline.nvim", - url = "https://github.com/akinsho/bufferline.nvim" - }, - catppuccin = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/catppuccin", - url = "https://github.com/catppuccin/nvim" - }, - ["cmp-buffer"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/cmp-buffer", - url = "https://github.com/hrsh7th/cmp-buffer" - }, - ["cmp-nvim-lsp"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", - url = "https://github.com/hrsh7th/cmp-nvim-lsp" - }, - ["cmp-path"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/cmp-path", - url = "https://github.com/hrsh7th/cmp-path" - }, - cmp_luasnip = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/cmp_luasnip", - url = "https://github.com/saadparwaiz1/cmp_luasnip" - }, - ["everforest-nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/everforest-nvim", - url = "https://github.com/neanias/everforest-nvim" - }, - ["friendly-snippets"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/friendly-snippets", - url = "https://github.com/rafamadriz/friendly-snippets" - }, - ["gitsigns.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/gitsigns.nvim", - url = "https://github.com/lewis6991/gitsigns.nvim" - }, - ["lualine.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/lualine.nvim", - url = "https://github.com/nvim-lualine/lualine.nvim" - }, - ["mason-lspconfig.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim", - url = "https://github.com/williamboman/mason-lspconfig.nvim" - }, - ["mason.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/mason.nvim", - url = "https://github.com/williamboman/mason.nvim" - }, - ["nightfox.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nightfox.nvim", - url = "https://github.com/EdenEast/nightfox.nvim" - }, - ["null-ls.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/null-ls.nvim", - url = "https://github.com/jose-elias-alvarez/null-ls.nvim" - }, - ["nvim-autopairs"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-autopairs", - url = "https://github.com/windwp/nvim-autopairs" - }, - ["nvim-cmp"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-cmp", - url = "https://github.com/hrsh7th/nvim-cmp" - }, - ["nvim-lspconfig"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", - url = "https://github.com/neovim/nvim-lspconfig" - }, - ["nvim-tree.lua"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-tree.lua", - url = "https://github.com/nvim-tree/nvim-tree.lua" - }, - ["nvim-treesitter"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-treesitter", - url = "https://github.com/nvim-treesitter/nvim-treesitter" - }, - ["nvim-web-devicons"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", - url = "https://github.com/nvim-tree/nvim-web-devicons" - }, - ["packer.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/packer.nvim", - url = "https://github.com/wbthomason/packer.nvim" - }, - ["plenary.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/plenary.nvim", - url = "https://github.com/nvim-lua/plenary.nvim" - }, - ["telescope.nvim"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/telescope.nvim", - url = "https://github.com/nvim-telescope/telescope.nvim" - }, - ["vim-bbye"] = { - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/vim-bbye", - url = "https://github.com/moll/vim-bbye" - }, - ["which-key.nvim"] = { - config = { "\27LJ\2\nD\0\0\2\0\4\0\t6\0\0\0009\0\1\0+\1\2\0=\1\2\0006\0\0\0009\0\1\0)\1,\1=\1\3\0K\0\1\0\15timeoutlen\ftimeout\6o\bvim\0" }, - loaded = true, - path = "/Users/doanthieu/.local/share/nvim/site/pack/packer/start/which-key.nvim", - url = "https://github.com/folke/which-key.nvim" - } -} - -time([[Defining packer_plugins]], false) --- Config for: which-key.nvim -time([[Config for which-key.nvim]], true) -try_loadstring("\27LJ\2\nD\0\0\2\0\4\0\t6\0\0\0009\0\1\0+\1\2\0=\1\2\0006\0\0\0009\0\1\0)\1,\1=\1\3\0K\0\1\0\15timeoutlen\ftimeout\6o\bvim\0", "config", "which-key.nvim") -time([[Config for which-key.nvim]], false) - -_G._packer.inside_compile = false -if _G._packer.needs_bufread == true then - vim.cmd("doautocmd BufRead") -end -_G._packer.needs_bufread = false - -if should_profile then save_profiles() end - -end) - -if not no_errors then - error_msg = error_msg:gsub('"', '\\"') - vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') -end diff --git a/private_dot_config/fish/config.fish b/private_dot_config/fish/config.fish new file mode 100644 index 0000000..ef49655 --- /dev/null +++ b/private_dot_config/fish/config.fish @@ -0,0 +1,32 @@ +if test -x /opt/homebrew/bin/brew + eval (/opt/homebrew/bin/brew shellenv) +end + +if test -x /opt/homebrew/bin/mise + /opt/homebrew/bin/mise activate fish | source +end + +for dir in \ + $HOME/.asdf/shims \ + $HOME/go/bin \ + $HOME/.bin \ + $HOME/.local/share/mise/shims \ + $HOME/.local/bin + if test -d $dir + if set -l index (contains -i -- $dir $PATH) + set -e PATH[$index] + end + set -gx PATH $dir $PATH + end +end + +set -gx EDITOR nvim + +if status is-interactive + # Commands to run in interactive sessions can go here +end + +alias vi="nvim" +alias vim="nvim" +alias view="nvim -R" +alias vimdiff="nvim -d" diff --git a/fish/.config/fish/functions/fish_prompt.fish b/private_dot_config/fish/functions/fish_prompt.fish similarity index 100% rename from fish/.config/fish/functions/fish_prompt.fish rename to private_dot_config/fish/functions/fish_prompt.fish diff --git a/private_dot_config/fish/functions/fish_user_key_bindings.fish b/private_dot_config/fish/functions/fish_user_key_bindings.fish new file mode 100644 index 0000000..1c86996 --- /dev/null +++ b/private_dot_config/fish/functions/fish_user_key_bindings.fish @@ -0,0 +1,5 @@ +function fish_user_key_bindings + if type -q fzf + fzf --fish | source + end +end diff --git a/fish/.config/fish/themes/Catppuccin Mocha.theme b/private_dot_config/fish/themes/Catppuccin Mocha.theme similarity index 95% rename from fish/.config/fish/themes/Catppuccin Mocha.theme rename to private_dot_config/fish/themes/Catppuccin Mocha.theme index 892a000..b1fe2b8 100644 --- a/fish/.config/fish/themes/Catppuccin Mocha.theme +++ b/private_dot_config/fish/themes/Catppuccin Mocha.theme @@ -27,4 +27,4 @@ fish_color_status f38ba8 fish_pager_color_progress 6c7086 fish_pager_color_prefix f5c2e7 fish_pager_color_completion cdd6f4 -fish_pager_color_description 6c7086 \ No newline at end of file +fish_pager_color_description 6c7086 diff --git a/private_dot_config/kitty/current-theme.conf b/private_dot_config/kitty/current-theme.conf new file mode 100644 index 0000000..dda305c --- /dev/null +++ b/private_dot_config/kitty/current-theme.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin-Mocha +## author: Pocco81 (https://github.com/Pocco81) +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #CDD6F4 +background #1E1E2E +selection_foreground #1E1E2E +selection_background #F5E0DC + +# Cursor colors +cursor #F5E0DC +cursor_text_color #1E1E2E + +# URL underline color when hovering with mouse +url_color #F5E0DC + +# Kitty window border colors +active_border_color #B4BEFE +inactive_border_color #6C7086 +bell_border_color #F9E2AF + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #11111B +active_tab_background #CBA6F7 +inactive_tab_foreground #CDD6F4 +inactive_tab_background #181825 +tab_bar_background #11111B + +# Colors for marks (marked text in the terminal) +mark1_foreground #1E1E2E +mark1_background #B4BEFE +mark2_foreground #1E1E2E +mark2_background #CBA6F7 +mark3_foreground #1E1E2E +mark3_background #74C7EC + +# The 16 terminal colors + +# black +color0 #45475A +color8 #585B70 + +# red +color1 #F38BA8 +color9 #F38BA8 + +# green +color2 #A6E3A1 +color10 #A6E3A1 + +# yellow +color3 #F9E2AF +color11 #F9E2AF + +# blue +color4 #89B4FA +color12 #89B4FA + +# magenta +color5 #F5C2E7 +color13 #F5C2E7 + +# cyan +color6 #94E2D5 +color14 #94E2D5 + +# white +color7 #BAC2DE +color15 #A6ADC8 diff --git a/private_dot_config/kitty/kitty.conf b/private_dot_config/kitty/kitty.conf new file mode 100644 index 0000000..51a06d9 --- /dev/null +++ b/private_dot_config/kitty/kitty.conf @@ -0,0 +1,40 @@ +# vim:fileencoding=utf-8:ft=conf + +font_family Fira Code +bold_font auto +italic_font auto +bold_italic_font auto +font_size 19.0 +adjust_line_height 125% + +shell_integration no-cursor +cursor_shape block + +enabled_layouts * +window_border_width 1.0 +window_padding_width 4 +inactive_text_alpha 0.4 +tab_bar_min_tabs 1 +tab_bar_style fade +tab_title_template "{'[' if layout_name == 'stack' else ''}{index}{']' if layout_name == 'stack' else ''} - {tab.active_wd.rsplit('/', 1)[-1] or '/'}" + +macos_option_as_alt yes + +map cmd+1 goto_tab 1 +map cmd+2 goto_tab 2 +map cmd+3 goto_tab 3 +map cmd+4 goto_tab 4 +map cmd+5 goto_tab 5 +map cmd+6 goto_tab 6 +map cmd+7 goto_tab 7 +map cmd+8 goto_tab 8 +map cmd+9 goto_tab 9 + +map ctrl+shift+enter launch --cwd=current +map kitty_mod+x toggle_layout stack +map ctrl+shift+o toggle_layout stack +map ctrl+shift+w resize_window wider +map ctrl+shift+t resize_window taller +map ctrl+shift+s resize_window shorter 3 + +include current-theme.conf diff --git a/nvim/.config/nvim/init.lua b/private_dot_config/nvim/init.lua similarity index 75% rename from nvim/.config/nvim/init.lua rename to private_dot_config/nvim/init.lua index 5aa0600..8ebcfee 100644 --- a/nvim/.config/nvim/init.lua +++ b/private_dot_config/nvim/init.lua @@ -1,7 +1,8 @@ require "user.options" require "user.keymaps" require "user.plugins" -require "user.nvim-tree" +require "user.mini-icons" +require "user.neo-tree" require "user.telescope" require "user.lualine" require "user.bufferline" @@ -15,7 +16,4 @@ require "user.comment" require "user.autocommands" require "user.which-key" require "user.toggleterm" -require "user.alpha" -require "user.xcodebuild" -require "user.nvim-dapui" -require "user.nvim-dap" +require "user.indentline" diff --git a/private_dot_config/nvim/lua/user/autocommands.lua b/private_dot_config/nvim/lua/user/autocommands.lua new file mode 100644 index 0000000..8d0e68a --- /dev/null +++ b/private_dot_config/nvim/lua/user/autocommands.lua @@ -0,0 +1,25 @@ +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { "qf", "help", "man", "lspinfo", "spectre_panel" }, + callback = function() + vim.cmd [[ + nnoremap q :close + set nobuflisted + ]] + end, +}) + +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { "gitcommit", "markdown" }, + callback = function() + vim.opt_local.wrap = true + vim.opt_local.spell = true + end, +}) + +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { "dart" }, + callback = function() + vim.opt_local.shiftwidth = 2 + vim.opt_local.tabstop = 2 + end, +}) diff --git a/nvim/.config/nvim/lua/user/autopairs.lua b/private_dot_config/nvim/lua/user/autopairs.lua similarity index 100% rename from nvim/.config/nvim/lua/user/autopairs.lua rename to private_dot_config/nvim/lua/user/autopairs.lua diff --git a/private_dot_config/nvim/lua/user/bufferline.lua b/private_dot_config/nvim/lua/user/bufferline.lua new file mode 100644 index 0000000..f708f9c --- /dev/null +++ b/private_dot_config/nvim/lua/user/bufferline.lua @@ -0,0 +1,27 @@ +local status_ok, bufferline = pcall(require, "bufferline") +if not status_ok then + return +end + +bufferline.setup { + options = { + close_command = "Bdelete! %d", + right_mouse_command = "Bdelete! %d", + separator_style = { " ", " " }, + buffer_close_icon = "x", + close_icon = "x", + show_buffer_close_icons = true, + show_close_icon = true, + indicator = { + style = "none", + }, + }, + highlights = { + fill = { bg = "#1e1e2e" }, + background = { bg = "#11111b" }, + buffer_selected = { bg = "#11111b", bold = true, italic = true }, + separator = { fg = "#1e1e2e", bg = "#1e1e2e" }, + separator_selected = { fg = "#1e1e2e", bg = "#1e1e2e" }, + separator_visible = { fg = "#1e1e2e", bg = "#1e1e2e" }, + }, +} diff --git a/nvim/.config/nvim/lua/user/cmp.lua b/private_dot_config/nvim/lua/user/cmp.lua similarity index 81% rename from nvim/.config/nvim/lua/user/cmp.lua rename to private_dot_config/nvim/lua/user/cmp.lua index 405f108..decb55e 100644 --- a/nvim/.config/nvim/lua/user/cmp.lua +++ b/private_dot_config/nvim/lua/user/cmp.lua @@ -15,35 +15,6 @@ local check_backspace = function() return col == 0 or vim.fn.getline("."):sub(col, col):match "%s" end -local kind_icons = { - Text = "󰉿", - Method = "󰆧", - Function = "󰊕", - Constructor = "", - Field = " ", - Variable = "󰀫", - Class = "󰠱", - Interface = "", - Module = "", - Property = "󰜢", - Unit = "󰑭", - Value = "󰎠", - Enum = "", - Keyword = "󰌋", - Snippet = "", - Color = "󰏘", - File = "󰈙", - Reference = "", - Folder = "󰉋", - EnumMember = "", - Constant = "󰏿", - Struct = "", - Event = "", - Operator = "󰆕", - TypeParameter = " ", - Misc = " ", -} - cmp.setup { snippet = { expand = function(args) @@ -96,7 +67,10 @@ cmp.setup { formatting = { fields = { "kind", "abbr", "menu" }, format = function(entry, vim_item) - vim_item.kind = kind_icons[vim_item.kind] + if MiniIcons then + local icon = MiniIcons.get("lsp", vim_item.kind) + vim_item.kind = icon .. " " .. vim_item.kind + end vim_item.menu = ({ nvim_lsp = "", nvim_lua = "", diff --git a/nvim/.config/nvim/lua/user/colorscheme.lua b/private_dot_config/nvim/lua/user/colorscheme.lua similarity index 100% rename from nvim/.config/nvim/lua/user/colorscheme.lua rename to private_dot_config/nvim/lua/user/colorscheme.lua diff --git a/nvim/.config/nvim/lua/user/comment.lua b/private_dot_config/nvim/lua/user/comment.lua similarity index 100% rename from nvim/.config/nvim/lua/user/comment.lua rename to private_dot_config/nvim/lua/user/comment.lua diff --git a/nvim/.config/nvim/lua/user/gitsigns.lua b/private_dot_config/nvim/lua/user/gitsigns.lua similarity index 89% rename from nvim/.config/nvim/lua/user/gitsigns.lua rename to private_dot_config/nvim/lua/user/gitsigns.lua index dfe30f2..9453e4f 100644 --- a/nvim/.config/nvim/lua/user/gitsigns.lua +++ b/private_dot_config/nvim/lua/user/gitsigns.lua @@ -7,8 +7,8 @@ gitsigns.setup { signs = { add = { hl = "GitSignsAdd", text = "▎", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" }, change = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, - delete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, - topdelete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + delete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + topdelete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, changedelete = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, }, signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` diff --git a/private_dot_config/nvim/lua/user/indentline.lua b/private_dot_config/nvim/lua/user/indentline.lua new file mode 100644 index 0000000..ec15b9d --- /dev/null +++ b/private_dot_config/nvim/lua/user/indentline.lua @@ -0,0 +1,17 @@ +local status_ok, ibl = pcall(require, "ibl") +if not status_ok then + return +end + +ibl.setup { + indent = { + char = "▏", + }, + exclude = { + buftypes = { "terminal", "nofile" }, + filetypes = { + "help", + "query", + }, + }, +} diff --git a/nvim/.config/nvim/lua/user/keymaps.lua b/private_dot_config/nvim/lua/user/keymaps.lua similarity index 61% rename from nvim/.config/nvim/lua/user/keymaps.lua rename to private_dot_config/nvim/lua/user/keymaps.lua index 0b8ca0c..9ff753c 100644 --- a/nvim/.config/nvim/lua/user/keymaps.lua +++ b/private_dot_config/nvim/lua/user/keymaps.lua @@ -10,27 +10,39 @@ vim.g.mapleader = " " -- Save keymap("n", "w", ":write") --- Navigate windows +-- Normal -- +-- Better window navigation keymap("n", "", "h", opts) keymap("n", "", "j", opts) keymap("n", "", "k", opts) keymap("n", "", "l", opts) +-- Resize with arrows +keymap("n", "", ":resize -2", opts) +keymap("n", "", ":resize +2", opts) +keymap("n", "", ":vertical resize -2", opts) +keymap("n", "", ":vertical resize +2", opts) + -- Navigate buffers keymap("n", "", ":bnext", opts) keymap("n", "", ":bprevious", opts) +-- Clear highlights +keymap("n", "h", "nohlsearch", opts) + -- Close buffers keymap("n", "", "Bdelete!", opts) -- Better paste keymap("v", "p", '"_dP', opts) +-- Reindent whole file +keymap("n", "=", "mzgg=G`z", opts) + -- Plugins -- --- NvimTree -keymap("n", "e", ":NvimTreeToggle", opts) -keymap("n", "j", ":NvimTreeFindFile", opts) +-- Neo-tree +keymap("n", "e", ":Neotree filesystem reveal left toggle", opts) -- Telescope keymap("n", "ff", ":Telescope find_files", opts) @@ -41,16 +53,5 @@ keymap("n", "fb", ":Telescope buffers", opts) keymap("n", "/", "lua require('Comment.api').toggle.linewise.current()", opts) keymap("x", "/", "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", opts) --- Xcodebuild -keymap("n", "X", ":XcodebuildPicker", opts) -keymap("n", "xr", ":XcodebuildBuildRun", opts) -keymap("n", "xb", ":XcodebuildBuild", opts) -keymap("n", "xt", ":XcodebuildTest", opts) - --- LSP -keymap("n", "lf", "lua vim.lsp.buf.format{ async = true }", opts) - --- Gitsigns -keymap("n", "gj", ":Gitsigns next_hunk", opts) -keymap("n", "gk", ":Gitsigns prev_hunk", opts) -keymap("n", "gp", ":Gitsigns preview_hunk", opts) +-- Lsp +keymap("n", "lf", "lua require('user.lsp.format').format()", opts) diff --git a/private_dot_config/nvim/lua/user/lsp/format.lua b/private_dot_config/nvim/lua/user/lsp/format.lua new file mode 100644 index 0000000..39ba77f --- /dev/null +++ b/private_dot_config/nvim/lua/user/lsp/format.lua @@ -0,0 +1,31 @@ +local M = {} + +local function supports_format(client) + return client:supports_method("textDocument/formatting") +end + +function M.format() + local bufnr = vim.api.nvim_get_current_buf() + local clients = vim.lsp.get_clients({ bufnr = bufnr }) + local has_null_ls = false + + for _, client in ipairs(clients) do + if client.name == "null-ls" and supports_format(client) then + has_null_ls = true + break + end + end + + vim.lsp.buf.format({ + bufnr = bufnr, + async = false, + filter = function(client) + if has_null_ls then + return client.name == "null-ls" + end + return supports_format(client) + end, + }) +end + +return M diff --git a/nvim/.config/nvim/lua/user/lsp/handlers.lua b/private_dot_config/nvim/lua/user/lsp/handlers.lua similarity index 85% rename from nvim/.config/nvim/lua/user/lsp/handlers.lua rename to private_dot_config/nvim/lua/user/lsp/handlers.lua index 9347c75..15b3c05 100644 --- a/nvim/.config/nvim/lua/user/lsp/handlers.lua +++ b/private_dot_config/nvim/lua/user/lsp/handlers.lua @@ -14,7 +14,7 @@ M.setup = function() { name = "DiagnosticSignError", text = "" }, { name = "DiagnosticSignWarn", text = "" }, - { name = "DiagnosticSignHint", text = "󰌵" }, + { name = "DiagnosticSignHint", text = "" }, { name = "DiagnosticSignInfo", text = "" }, } @@ -42,13 +42,6 @@ M.setup = function() vim.diagnostic.config(config) - vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { - border = "rounded", - }) - - vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { - border = "rounded", - }) end local function lsp_keymaps(bufnr) @@ -56,7 +49,7 @@ local function lsp_keymaps(bufnr) local keymap = vim.api.nvim_buf_set_keymap keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) - keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) + keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover({ border = 'rounded' })", opts) keymap(bufnr, "n", "gI", "lua vim.lsp.buf.implementation()", opts) keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) keymap(bufnr, "n", "gl", "lua vim.diagnostic.open_float()", opts) @@ -66,7 +59,7 @@ local function lsp_keymaps(bufnr) keymap(bufnr, "n", "lj", "lua vim.diagnostic.goto_next({buffer=0})", opts) keymap(bufnr, "n", "lk", "lua vim.diagnostic.goto_prev({buffer=0})", opts) keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) - keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help()", opts) + keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help({ border = 'rounded' })", opts) keymap(bufnr, "n", "lq", "lua vim.diagnostic.setloclist()", opts) end diff --git a/nvim/.config/nvim/lua/user/lsp/init.lua b/private_dot_config/nvim/lua/user/lsp/init.lua similarity index 51% rename from nvim/.config/nvim/lua/user/lsp/init.lua rename to private_dot_config/nvim/lua/user/lsp/init.lua index 6cb90c5..a059cd6 100644 --- a/nvim/.config/nvim/lua/user/lsp/init.lua +++ b/private_dot_config/nvim/lua/user/lsp/init.lua @@ -1,8 +1,3 @@ -local status_ok, _ = pcall(require, "lspconfig") -if not status_ok then - return -end - require "user.lsp.mason" require("user.lsp.handlers").setup() require("user.lsp.null-ls") diff --git a/nvim/.config/nvim/lua/user/lsp/mason.lua b/private_dot_config/nvim/lua/user/lsp/mason.lua similarity index 66% rename from nvim/.config/nvim/lua/user/lsp/mason.lua rename to private_dot_config/nvim/lua/user/lsp/mason.lua index cd66e83..228558f 100644 --- a/nvim/.config/nvim/lua/user/lsp/mason.lua +++ b/private_dot_config/nvim/lua/user/lsp/mason.lua @@ -1,9 +1,21 @@ local servers = { "pyright", "sourcekit", + "dartls", + "ts_ls" +} + +local mason_servers = { + "pyright", "ts_ls", } +local mason_tools = { + "prettier", + "ruff", + "stylua", +} + local settings = { ui = { border = "none", @@ -19,14 +31,14 @@ local settings = { require("mason").setup(settings) require("mason-lspconfig").setup({ - -- ensure_installed = servers, - automatic_installation = true, + ensure_installed = mason_servers, + automatic_enable = false, +}) +require("mason-tool-installer").setup({ + ensure_installed = mason_tools, + auto_update = false, + run_on_start = true, }) - -local lspconfig_status_ok, lspconfig = pcall(require, "lspconfig") -if not lspconfig_status_ok then - return -end local opts = {} @@ -43,5 +55,6 @@ for _, server in pairs(servers) do opts = vim.tbl_deep_extend("force", conf_opts, opts) end - lspconfig[server].setup(opts) + vim.lsp.config(server, opts) + vim.lsp.enable(server) end diff --git a/private_dot_config/nvim/lua/user/lsp/null-ls.lua b/private_dot_config/nvim/lua/user/lsp/null-ls.lua new file mode 100644 index 0000000..66a3977 --- /dev/null +++ b/private_dot_config/nvim/lua/user/lsp/null-ls.lua @@ -0,0 +1,53 @@ +local null_ls_status_ok, null_ls = pcall(require, "null-ls") +if not null_ls_status_ok then + return +end + +-- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting +local formatting = null_ls.builtins.formatting +local helpers = require("null-ls.helpers") +local methods = require("null-ls.methods") + +local ruff_fix_imports = helpers.make_builtin({ + name = "ruff_fix_imports", + meta = { + url = "https://docs.astral.sh/ruff/", + description = "Sort Python imports with Ruff.", + }, + method = methods.internal.FORMATTING, + filetypes = { "python" }, + generator_opts = { + command = "ruff", + args = { "check", "--fix", "--select", "I", "$FILENAME" }, + to_temp_file = true, + check_exit_code = { 0, 1 }, + ignore_stderr = true, + }, + factory = helpers.formatter_factory, +}) + +local ruff_format = helpers.make_builtin({ + name = "ruff_format", + meta = { + url = "https://docs.astral.sh/ruff/formatter/", + description = "Format Python with Ruff.", + }, + method = methods.internal.FORMATTING, + filetypes = { "python" }, + generator_opts = { + command = "ruff", + args = { "format", "--stdin-filename", "$FILENAME", "-" }, + to_stdin = true, + }, + factory = helpers.formatter_factory, +}) + +null_ls.setup { + debug = false, + sources = { + ruff_fix_imports, + ruff_format, + formatting.prettier, + formatting.stylua, + }, +} diff --git a/nvim/.config/nvim/lua/user/lsp/settings/pyright.lua b/private_dot_config/nvim/lua/user/lsp/settings/pyright.lua similarity index 100% rename from nvim/.config/nvim/lua/user/lsp/settings/pyright.lua rename to private_dot_config/nvim/lua/user/lsp/settings/pyright.lua diff --git a/private_dot_config/nvim/lua/user/lualine.lua b/private_dot_config/nvim/lua/user/lualine.lua new file mode 100644 index 0000000..cf1c938 --- /dev/null +++ b/private_dot_config/nvim/lua/user/lualine.lua @@ -0,0 +1,83 @@ +local status_ok, lualine = pcall(require, "lualine") +if not status_ok then + return +end + +local hide_in_width = function() + return vim.fn.winwidth(0) > 80 +end + +local branch = { + "branch", + cond = hide_in_width, +} + +local diagnostics = { + function() + local counts = { + [vim.diagnostic.severity.ERROR] = 0, + [vim.diagnostic.severity.WARN] = 0, + } + + for _, diagnostic in ipairs(vim.diagnostic.get(0)) do + if counts[diagnostic.severity] ~= nil then + counts[diagnostic.severity] = counts[diagnostic.severity] + 1 + end + end + + return string.format( + "E:%d W:%d", + counts[vim.diagnostic.severity.ERROR], + counts[vim.diagnostic.severity.WARN] + ) + end, +} + +local diff = { + "diff", + colored = false, + symbols = { added = "+", modified = "~", removed = "-" }, + cond = hide_in_width, +} + +local filetype = { + "filetype", + icons_enabled = false, +} + +local location = { + function() + return string.format("%d:%d", vim.fn.line("."), vim.fn.col(".") - 1) + end, + color = { fg = "#89b4fa", bg = "#313244", gui = "bold" }, + padding = { left = 1, right = 1 }, +} + +local spaces = function() + return "spaces: " .. vim.api.nvim_buf_get_option(0, "shiftwidth") +end + +lualine.setup { + options = { + globalstatus = true, + icons_enabled = true, + theme = "auto", + component_separators = { left = " ", right = " " }, + section_separators = { left = "", right = "" }, + disabled_filetypes = { "alpha", "dashboard" }, + always_divide_middle = true, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { branch }, + lualine_c = { diagnostics }, + lualine_x = { diff, spaces, "encoding", filetype }, + lualine_y = { location }, + lualine_z = { + { + "progress", + color = { fg = "#11111b", bg = "#89b4fa", gui = "bold" }, + }, + }, + }, +} diff --git a/private_dot_config/nvim/lua/user/mini-icons.lua b/private_dot_config/nvim/lua/user/mini-icons.lua new file mode 100644 index 0000000..11ec000 --- /dev/null +++ b/private_dot_config/nvim/lua/user/mini-icons.lua @@ -0,0 +1,7 @@ +local status_ok, mini_icons = pcall(require, "mini.icons") +if not status_ok then + return +end + +mini_icons.setup() +MiniIcons.mock_nvim_web_devicons() diff --git a/private_dot_config/nvim/lua/user/neo-tree.lua b/private_dot_config/nvim/lua/user/neo-tree.lua new file mode 100644 index 0000000..8400440 --- /dev/null +++ b/private_dot_config/nvim/lua/user/neo-tree.lua @@ -0,0 +1,36 @@ +local status_ok, neo_tree = pcall(require, "neo-tree") +if not status_ok then + return +end + +neo_tree.setup { + close_if_last_window = true, + popup_border_style = "rounded", + enable_git_status = true, + enable_diagnostics = true, + filesystem = { + follow_current_file = { + enabled = true, + leave_dirs_open = true, + }, + filtered_items = { + visible = true, + hide_dotfiles = false, + hide_gitignored = false, + }, + window = { + mappings = { + [""] = "none", + ["h"] = "close_node", + ["l"] = "open", + }, + }, + }, + window = { + position = "left", + width = 35, + mappings = { + ["q"] = "close_window", + }, + }, +} diff --git a/nvim/.config/nvim/lua/user/options.lua b/private_dot_config/nvim/lua/user/options.lua similarity index 100% rename from nvim/.config/nvim/lua/user/options.lua rename to private_dot_config/nvim/lua/user/options.lua diff --git a/private_dot_config/nvim/lua/user/plugins.lua b/private_dot_config/nvim/lua/user/plugins.lua new file mode 100644 index 0000000..6fbc649 --- /dev/null +++ b/private_dot_config/nvim/lua/user/plugins.lua @@ -0,0 +1,65 @@ +local gh = function(repo) + return "https://github.com/" .. repo +end + +vim.api.nvim_create_autocmd("PackChanged", { + callback = function(event) + local name = event.data.spec.name + local kind = event.data.kind + + if name == "nvim-treesitter" and (kind == "install" or kind == "update") then + vim.cmd.packadd("treesitter-parser-registry") + vim.cmd.packadd("nvim-treesitter") + if vim.fn.executable("tree-sitter") == 1 then + vim.cmd("TSUpdate") + end + end + end, +}) + +vim.pack.add({ + { src = gh("nvim-lua/plenary.nvim") }, + { src = gh("nvim-telescope/telescope.nvim") }, + { src = gh("MunifTanjim/nui.nvim") }, + { src = gh("nvim-tree/nvim-web-devicons") }, + { src = gh("nvim-neo-tree/neo-tree.nvim"), version = "v3.x" }, + { src = gh("nvim-mini/mini.icons") }, + { src = gh("nvim-lualine/lualine.nvim") }, + { src = gh("akinsho/bufferline.nvim") }, + { src = gh("moll/vim-bbye") }, + { src = gh("windwp/nvim-autopairs") }, + { src = gh("numToStr/Comment.nvim") }, + { src = gh("folke/which-key.nvim") }, + { src = gh("akinsho/toggleterm.nvim") }, + { src = gh("lukas-reineke/indent-blankline.nvim") }, + + { src = gh("EdenEast/nightfox.nvim") }, + { src = gh("neanias/everforest-nvim") }, + { src = gh("catppuccin/nvim"), name = "catppuccin" }, + + { src = gh("hrsh7th/nvim-cmp") }, + { src = gh("hrsh7th/cmp-buffer") }, + { src = gh("hrsh7th/cmp-path") }, + { src = gh("saadparwaiz1/cmp_luasnip") }, + { src = gh("hrsh7th/cmp-nvim-lsp") }, + + { src = gh("L3MON4D3/LuaSnip") }, + { src = gh("rafamadriz/friendly-snippets") }, + + { src = gh("neovim/nvim-lspconfig") }, + { src = gh("williamboman/mason.nvim") }, + { src = gh("williamboman/mason-lspconfig.nvim") }, + { src = gh("WhoIsSethDaniel/mason-tool-installer.nvim") }, + { src = gh("nvimtools/none-ls.nvim") }, + + { src = gh("neovim-treesitter/treesitter-parser-registry") }, + { src = gh("neovim-treesitter/nvim-treesitter") }, + + { src = gh("lewis6991/gitsigns.nvim") }, +}, { + confirm = false, + load = true, +}) + +vim.o.timeout = true +vim.o.timeoutlen = 300 diff --git a/nvim/.config/nvim/lua/user/telescope.lua b/private_dot_config/nvim/lua/user/telescope.lua similarity index 99% rename from nvim/.config/nvim/lua/user/telescope.lua rename to private_dot_config/nvim/lua/user/telescope.lua index 48de140..a4fca82 100644 --- a/nvim/.config/nvim/lua/user/telescope.lua +++ b/private_dot_config/nvim/lua/user/telescope.lua @@ -7,7 +7,6 @@ local actions = require "telescope.actions" telescope.setup { defaults = { - prompt_prefix = " ", selection_caret = " ", path_display = { "smart" }, diff --git a/private_dot_config/nvim/lua/user/toggleterm.lua b/private_dot_config/nvim/lua/user/toggleterm.lua new file mode 100644 index 0000000..4a464e8 --- /dev/null +++ b/private_dot_config/nvim/lua/user/toggleterm.lua @@ -0,0 +1,32 @@ +local status_ok, toggleterm = pcall(require, "toggleterm") +if not status_ok then + return +end + +toggleterm.setup { + open_mapping = [[]], + hide_numbers = true, + shade_terminals = true, + shading_factor = 2, + start_in_insert = true, + close_on_exit = true, + shell = vim.o.shell, +} + +function _G.set_terminal_keymaps() + local opts = { noremap = true } + -- vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[h]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[j]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[k]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[l]], opts) +end + +vim.cmd "autocmd! TermOpen term://* lua set_terminal_keymaps()" + +local Terminal = require("toggleterm.terminal").Terminal +local lazygit = Terminal:new { cmd = "lazygit", hidden = true } + +function _LAZYGIT_TOGGLE() + lazygit:toggle() +end diff --git a/private_dot_config/nvim/lua/user/treesitter.lua b/private_dot_config/nvim/lua/user/treesitter.lua new file mode 100644 index 0000000..91d69c1 --- /dev/null +++ b/private_dot_config/nvim/lua/user/treesitter.lua @@ -0,0 +1,63 @@ +local languages = { + "lua", + "javascript", + "typescript", + "tsx", + "html", + "html_tags", + "css", + "json", + "ecma", + "jsx", + "markdown", + "markdown_inline", + "yaml", + "bash", + "python", + "swift", + "dart", +} + +local highlight_filetypes = { + "lua", + "javascript", + "typescript", + "typescriptreact", + "html", + "json", + "markdown", + "yaml", + "sh", + "bash", + "python", + "swift", + "dart", +} + +local indent_filetypes = vim.tbl_filter(function(filetype) + return not vim.tbl_contains({ "python" }, filetype) +end, highlight_filetypes) + +local status_ok, treesitter = pcall(require, "nvim-treesitter") +if not status_ok then + return +end + +treesitter.setup() +if vim.fn.executable("tree-sitter") == 1 then + treesitter.install(languages) +end + +vim.api.nvim_create_autocmd("FileType", { + pattern = highlight_filetypes, + callback = function() + pcall(vim.treesitter.start) + end, +}) + +vim.api.nvim_create_autocmd("FileType", { + pattern = indent_filetypes, + callback = function() + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end, +}) diff --git a/nvim/.config/nvim/lua/user/which-key.lua b/private_dot_config/nvim/lua/user/which-key.lua similarity index 88% rename from nvim/.config/nvim/lua/user/which-key.lua rename to private_dot_config/nvim/lua/user/which-key.lua index f9948ad..30301f2 100644 --- a/nvim/.config/nvim/lua/user/which-key.lua +++ b/private_dot_config/nvim/lua/user/which-key.lua @@ -3,4 +3,4 @@ if not status_ok then return end -wk.setup() +wk.setup {} diff --git a/private_dot_config/nvim/nvim-pack-lock.json b/private_dot_config/nvim/nvim-pack-lock.json new file mode 100644 index 0000000..890ea3a --- /dev/null +++ b/private_dot_config/nvim/nvim-pack-lock.json @@ -0,0 +1,133 @@ +{ + "plugins": { + "Comment.nvim": { + "rev": "e30b7f2008e52442154b66f7c519bfd2f1e32acb", + "src": "https://github.com/numToStr/Comment.nvim" + }, + "LuaSnip": { + "rev": "a62e1083a3cfe8b6b206e7d3d33a51091df25357", + "src": "https://github.com/L3MON4D3/LuaSnip" + }, + "bufferline.nvim": { + "rev": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3", + "src": "https://github.com/akinsho/bufferline.nvim" + }, + "catppuccin": { + "rev": "426dbebe06b5c69fd846ceb17b42e12f890aedf1", + "src": "https://github.com/catppuccin/nvim" + }, + "cmp-buffer": { + "rev": "b74fab3656eea9de20a9b8116afa3cfc4ec09657", + "src": "https://github.com/hrsh7th/cmp-buffer" + }, + "cmp-nvim-lsp": { + "rev": "cbc7b02bb99fae35cb42f514762b89b5126651ef", + "src": "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + "cmp-path": { + "rev": "c642487086dbd9a93160e1679a1327be111cbc25", + "src": "https://github.com/hrsh7th/cmp-path" + }, + "cmp_luasnip": { + "rev": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90", + "src": "https://github.com/saadparwaiz1/cmp_luasnip" + }, + "everforest-nvim": { + "rev": "d235ca0aa6a29546e661a020e2618612acbbffbe", + "src": "https://github.com/neanias/everforest-nvim" + }, + "friendly-snippets": { + "rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9", + "src": "https://github.com/rafamadriz/friendly-snippets" + }, + "gitsigns.nvim": { + "rev": "dd3f588bacbeb041be6facf1742e42097f62165d", + "src": "https://github.com/lewis6991/gitsigns.nvim" + }, + "indent-blankline.nvim": { + "rev": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03", + "src": "https://github.com/lukas-reineke/indent-blankline.nvim" + }, + "lualine.nvim": { + "rev": "131a558e13f9f28b15cd235557150ccb23f89286", + "src": "https://github.com/nvim-lualine/lualine.nvim" + }, + "mason-lspconfig.nvim": { + "rev": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e", + "src": "https://github.com/williamboman/mason-lspconfig.nvim" + }, + "mason-tool-installer.nvim": { + "rev": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc", + "src": "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim" + }, + "mason.nvim": { + "rev": "8e921c2b68571e978db5d4d3fef9c9a7f8755473", + "src": "https://github.com/williamboman/mason.nvim" + }, + "mini.icons": { + "rev": "9c7b1b90b15bdd69c52f6e31889dbc9987c30ec4", + "src": "https://github.com/nvim-mini/mini.icons" + }, + "neo-tree.nvim": { + "rev": "ebd66767191714e008ce73b769518a763ff31bdc", + "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", + "version": "'v3.x'" + }, + "nightfox.nvim": { + "rev": "26b61b1f856ec37cae3cb64f5690adb955f246a1", + "src": "https://github.com/EdenEast/nightfox.nvim" + }, + "none-ls.nvim": { + "rev": "f9d557ac7cd28a3a993b5ea49716498bd540b01f", + "src": "https://github.com/nvimtools/none-ls.nvim" + }, + "nui.nvim": { + "rev": "de740991c12411b663994b2860f1a4fd0937c130", + "src": "https://github.com/MunifTanjim/nui.nvim" + }, + "nvim-autopairs": { + "rev": "7b9923abad60b903ece7c52940e1321d39eccc79", + "src": "https://github.com/windwp/nvim-autopairs" + }, + "nvim-cmp": { + "rev": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca", + "src": "https://github.com/hrsh7th/nvim-cmp" + }, + "nvim-lspconfig": { + "rev": "8f7e64066e2641d5e7d494962a9c7051e3d38dd5", + "src": "https://github.com/neovim/nvim-lspconfig" + }, + "nvim-treesitter": { + "rev": "df7489eeea351bece7fd0f9c825be5cb6a1438f0", + "src": "https://github.com/neovim-treesitter/nvim-treesitter" + }, + "nvim-web-devicons": { + "rev": "0d7d35fa946837b8738b17c18d1faa1ac351e7f9", + "src": "https://github.com/nvim-tree/nvim-web-devicons" + }, + "plenary.nvim": { + "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", + "src": "https://github.com/nvim-lua/plenary.nvim" + }, + "telescope.nvim": { + "rev": "7d324792b7943e4aa16ad007212e6acc6f9fe335", + "src": "https://github.com/nvim-telescope/telescope.nvim" + }, + "toggleterm.nvim": { + "rev": "9a88eae817ef395952e08650b3283726786fb5fb", + "src": "https://github.com/akinsho/toggleterm.nvim" + }, + "treesitter-parser-registry": { + "rev": "6eb15358bb9fc88f0d3401d8538d56652e9bdf3c", + "src": "https://github.com/neovim-treesitter/treesitter-parser-registry" + }, + "vim-bbye": { + "rev": "25ef93ac5a87526111f43e5110675032dbcacf56", + "src": "https://github.com/moll/vim-bbye" + }, + "which-key.nvim": { + "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", + "src": "https://github.com/folke/which-key.nvim" + } + } +} diff --git a/private_dot_config/private_karabiner/executable_window-layout b/private_dot_config/private_karabiner/executable_window-layout new file mode 100644 index 0000000..6669fdc --- /dev/null +++ b/private_dot_config/private_karabiner/executable_window-layout @@ -0,0 +1,100 @@ +#!/bin/zsh +set -euo pipefail + +mode="${1:-}" + +osascript -l JavaScript - "$mode" <<'JXA' +ObjC.import('AppKit') + +function run(argv) { +const mode = argv[0] +const se = Application('System Events') + +function frontProcess() { + return se.applicationProcesses.whose({ frontmost: true })[0] +} + +function activeWindow(process) { + const windows = process.windows() + if (windows.length === 0) { + throw new Error(`No windows for ${process.name()}`) + } + return windows[0] +} + +function frameForWindow(win) { + const pos = win.position() + const size = win.size() + return { + x: pos[0], + y: pos[1], + w: size[0], + h: size[1], + cx: pos[0] + size[0] / 2, + cy: pos[1] + size[1] / 2, + } +} + +function screenForWindow(winFrame) { + const screens = $.NSScreen.screens + const count = screens.count + let chosen = screens.objectAtIndex(0) + + for (let i = 0; i < count; i++) { + const screen = screens.objectAtIndex(i) + const full = screen.frame + const visible = screen.visibleFrame + const top = full.size.height - visible.origin.y - visible.size.height + const left = visible.origin.x + const right = left + visible.size.width + const bottom = top + visible.size.height + + if (winFrame.cx >= left && winFrame.cx <= right && winFrame.cy >= top && winFrame.cy <= bottom) { + chosen = screen + break + } + } + + const full = chosen.frame + const visible = chosen.visibleFrame + return { + x: visible.origin.x, + y: full.size.height - visible.origin.y - visible.size.height, + w: visible.size.width, + h: visible.size.height, + } +} + +function targetFrame(screen, mode) { + const halfW = Math.floor(screen.w / 2) + const halfH = Math.floor(screen.h / 2) + + switch (mode) { + case 'top-left': + return { x: screen.x, y: screen.y, w: halfW, h: halfH } + case 'bottom-left': + return { x: screen.x, y: screen.y + halfH, w: halfW, h: screen.h - halfH } + case 'top-right': + return { x: screen.x + halfW, y: screen.y, w: screen.w - halfW, h: halfH } + case 'bottom-right': + return { x: screen.x + halfW, y: screen.y + halfH, w: screen.w - halfW, h: screen.h - halfH } + case 'left-half': + return { x: screen.x, y: screen.y, w: halfW, h: screen.h } + case 'right-half': + return { x: screen.x + halfW, y: screen.y, w: screen.w - halfW, h: screen.h } + case 'max': + return screen + default: + throw new Error(`Unknown window layout mode: ${mode}`) + } +} + +const process = frontProcess() +const win = activeWindow(process) +const screen = screenForWindow(frameForWindow(win)) +const frame = targetFrame(screen, mode) + +win.position = [frame.x, frame.y] +win.size = [frame.w, frame.h] +} +JXA diff --git a/karabiner/assets/complex_modifications/1597572871.json b/private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597572871.json similarity index 100% rename from karabiner/assets/complex_modifications/1597572871.json rename to private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597572871.json diff --git a/karabiner/assets/complex_modifications/1597574790.json b/private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597574790.json similarity index 100% rename from karabiner/assets/complex_modifications/1597574790.json rename to private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597574790.json diff --git a/karabiner/assets/complex_modifications/1597576542.json b/private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597576542.json similarity index 100% rename from karabiner/assets/complex_modifications/1597576542.json rename to private_dot_config/private_karabiner/private_assets/private_complex_modifications/1597576542.json diff --git a/karabiner/assets/complex_modifications/1655107459.json b/private_dot_config/private_karabiner/private_assets/private_complex_modifications/1655107459.json similarity index 100% rename from karabiner/assets/complex_modifications/1655107459.json rename to private_dot_config/private_karabiner/private_assets/private_complex_modifications/1655107459.json diff --git a/private_dot_config/private_karabiner/private_karabiner.json b/private_dot_config/private_karabiner/private_karabiner.json new file mode 100644 index 0000000..b734763 --- /dev/null +++ b/private_dot_config/private_karabiner/private_karabiner.json @@ -0,0 +1,4179 @@ +{ + "global": { "show_profile_name_in_menu_bar": true }, + "profiles": [ + { + "complex_modifications": { + "rules": [ + { + "description": "Post left_ctrl when return_or_enter is hold.", + "manipulators": [ + { + "from": { + "key_code": "return_or_enter", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "key_code": "right_control" }], + "to_if_alone": [{ "key_code": "return_or_enter" }], + "type": "basic" + } + ] + }, + { + "description": "Post escape if caps is pressed alone, left_ctrl otherwise", + "manipulators": [ + { + "from": { + "key_code": "caps_lock", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "key_code": "left_control" }], + "to_if_alone": [{ "key_code": "escape" }], + "type": "basic" + } + ] + }, + { + "description": "Map left_ctrl to caps_lock.", + "manipulators": [ + { + "from": { + "key_code": "left_control", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "key_code": "caps_lock" }], + "type": "basic" + } + ] + }, + { + "description": "Colemak Mod-DH", + "manipulators": [ + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "grave_accent_and_tilde" }], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "1" }], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "2" }], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "4" }], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "5" }], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "6" }], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "7" }], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "8" }], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "9" }], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "0" }], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "hyphen" }], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "equal_sign" }], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "q" }], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "w" }], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "f" }], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "p" }], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "b" }], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "j" }], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "l" }], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "u" }], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "y" }], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "semicolon" }], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "open_bracket" }], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "close_bracket" }], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "backslash" }], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "a" }], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "r" }], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "s" }], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "t" }], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "g" }], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "m" }], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "n" }], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "e" }], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "i" }], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "o" }], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "quote" }], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "z" }], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "x" }], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "c" }], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "d" }], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "v" }], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "k" }], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "h" }], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "comma" }], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "period" }], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "slash" }], + "type": "basic" + }, + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "grave_accent_and_tilde", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "1", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "2", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "4", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "5", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "6", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "7", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "8", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "9", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "0", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "hyphen", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "equal_sign", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "q", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "w", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "f", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "p", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "b", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "j", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "l", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "u", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "y", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "semicolon", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "open_bracket", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "close_bracket", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "backslash", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "a", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "r", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "s", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "t", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "g", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "m", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "n", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "e", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "i", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "o", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "quote", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "z", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "x", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "c", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "d", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "v", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "k", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "h", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "comma", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "period", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "slash", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "grave_accent_and_tilde", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "1", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "2", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "4", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "5", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "6", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "7", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "8", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "9", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "0", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "hyphen", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "equal_sign", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "q", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "w", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "f", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "p", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "b", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "j", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "l", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "u", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "y", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "semicolon", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "open_bracket", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "close_bracket", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "backslash", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "a", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "r", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "s", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "t", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "g", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "m", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "n", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "e", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "i", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "o", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "quote", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "z", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "x", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "c", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "d", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "v", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "k", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "h", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "comma", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "period", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "slash", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { "key_code": "caps_lock" }, + "to": [{ "key_code": "delete_or_backspace" }], + "type": "basic" + } + ] + } + ] + }, + "devices": [ + { + "identifiers": { + "is_keyboard": true, + "product_id": 51966, + "vendor_id": 65261 + }, + "ignore": true, + "manipulate_caps_lock_led": false + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 4694, + "vendor_id": 51984 + }, + "ignore": true, + "manipulate_caps_lock_led": false + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 4871, + "vendor_id": 65261 + }, + "ignore": true, + "manipulate_caps_lock_led": false + } + ], + "fn_function_keys": [ + { + "from": { "key_code": "f3" }, + "to": [{ "key_code": "mission_control" }] + }, + { + "from": { "key_code": "f4" }, + "to": [{ "key_code": "launchpad" }] + }, + { + "from": { "key_code": "f5" }, + "to": [{ "key_code": "illumination_decrement" }] + }, + { + "from": { "key_code": "f6" }, + "to": [{ "key_code": "illumination_increment" }] + } + ], + "name": "Apple", + "simple_modifications": [ + { + "from": { "key_code": "backslash" }, + "to": [{ "key_code": "delete_or_backspace" }] + }, + { + "from": { "key_code": "delete_or_backspace" }, + "to": [{ "key_code": "backslash" }] + } + ], + "virtual_hid_keyboard": { "keyboard_type_v2": "ansi" } + }, + { + "complex_modifications": { + "rules": [ + { + "description": "Window management", + "enabled": true, + "manipulators": [ + { + "from": { + "key_code": "right_shift", + "modifiers": { "optional": ["any"] } + }, + "to": [ + { + "set_variable": { + "name": "hyper_mode", + "value": 1 + } + } + ], + "to_after_key_up": [ + { + "set_variable": { + "name": "hyper_mode", + "value": 0 + } + } + ], + "to_if_alone": [{ "key_code": "right_shift" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "a", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b company.thebrowser.Browser" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "n", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b net.kovidgoyal.kitty" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "x", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b com.apple.dt.Xcode" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "e", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b com.apple.finder" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "b", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b com.apple.Preview" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "r", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b com.1password.1password" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "semicolon", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["any"] + } + }, + "to": [{ "shell_command": "open -b md.obsidian" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "m", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout top-left" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "y", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout bottom-left" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "n", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout top-right" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "u", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout bottom-right" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "open_bracket", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout left-half" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "close_bracket", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout right-half" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "h", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout max" }], + "type": "basic" + }, + { + "conditions": [ + { + "name": "hyper_mode", + "type": "variable_if", + "value": 1 + } + ], + "from": { + "key_code": "e", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "shell_command": "$HOME/.config/karabiner/window-layout max" }], + "type": "basic" + } + ] + }, + { + "description": "Colemak Mod-DH", + "manipulators": [ + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "grave_accent_and_tilde" }], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "1" }], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "2" }], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "4" }], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "5" }], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "6" }], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "7" }], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "8" }], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "9" }], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "0" }], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "hyphen" }], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "equal_sign" }], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "q" }], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "w" }], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "f" }], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "p" }], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "b" }], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "j" }], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "l" }], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "u" }], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "y" }], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "semicolon" }], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "open_bracket" }], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "close_bracket" }], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "backslash" }], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "a" }], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "r" }], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "s" }], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "t" }], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "g" }], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "m" }], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "n" }], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "e" }], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "i" }], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "o" }], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "quote" }], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "z" }], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "x" }], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "c" }], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "d" }], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "v" }], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "k" }], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "h" }], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "comma" }], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "period" }], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] } + }, + "to": [{ "key_code": "slash" }], + "type": "basic" + }, + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "grave_accent_and_tilde", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "1", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "2", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "4", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "5", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "6", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "7", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "8", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "9", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "0", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "hyphen", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "equal_sign", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "q", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "w", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "f", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "p", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "b", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "j", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "l", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "u", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "y", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "semicolon", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "open_bracket", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "close_bracket", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "backslash", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "a", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "r", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "s", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "t", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "g", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "m", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "n", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "e", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "i", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "o", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "quote", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "z", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "x", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "c", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "d", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "v", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "k", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "h", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "comma", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "period", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { + "mandatory": ["left_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "slash", + "modifiers": ["left_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "grave_accent_and_tilde", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "grave_accent_and_tilde", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "1", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "1", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "2", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "2", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "4", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "4", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "5", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "5", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "6", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "6", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "7", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "7", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "8", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "8", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "9", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "9", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "0", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "0", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "hyphen", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "hyphen", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "equal_sign", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "equal_sign", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "q", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "q", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "w", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "w", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "e", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "f", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "r", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "p", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "t", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "b", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "y", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "j", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "u", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "l", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "i", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "u", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "o", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "y", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "p", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "semicolon", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "open_bracket", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "open_bracket", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "close_bracket", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "close_bracket", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "backslash", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "backslash", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "a", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "a", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "s", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "r", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "d", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "s", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "f", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "t", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "g", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "g", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "h", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "m", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "n", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "e", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "i", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "semicolon", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "o", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "quote", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "quote", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "z", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "z", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "x", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "x", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "c", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "c", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "v", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "d", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "b", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "v", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "n", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "k", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "m", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "h", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "comma", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "comma", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "period", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "period", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { + "key_code": "slash", + "modifiers": { + "mandatory": ["right_shift"], + "optional": ["caps_lock", "left_command", "left_control", "left_alt", "right_command", "right_control", "right_alt"] + } + }, + "to": [ + { + "key_code": "slash", + "modifiers": ["right_shift"] + } + ], + "type": "basic" + }, + { + "from": { "key_code": "caps_lock" }, + "to": [{ "key_code": "delete_or_backspace" }], + "type": "basic" + } + ] + }, + { + "description": "Post escape if left_control is pressed alone.", + "manipulators": [ + { + "from": { + "key_code": "left_control", + "modifiers": { "optional": ["any"] } + }, + "to": [{ "key_code": "left_control" }], + "to_if_alone": [{ "key_code": "escape" }], + "type": "basic" + } + ] + } + ] + }, + "devices": [ + { + "identifiers": { + "is_keyboard": true, + "product_id": 51966, + "vendor_id": 65261 + }, + "ignore": true, + "manipulate_caps_lock_led": false + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 4694, + "vendor_id": 51984 + }, + "ignore": true, + "manipulate_caps_lock_led": false + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 4871, + "vendor_id": 65261 + }, + "ignore": true, + "manipulate_caps_lock_led": false + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 832, + "vendor_id": 1452 + }, + "ignore": true + }, + { + "identifiers": { + "is_keyboard": true, + "product_id": 34304, + "vendor_id": 1452 + }, + "ignore": true + } + ], + "fn_function_keys": [ + { + "from": { "key_code": "f3" }, + "to": [{ "key_code": "mission_control" }] + }, + { + "from": { "key_code": "f4" }, + "to": [{ "key_code": "launchpad" }] + }, + { + "from": { "key_code": "f5" }, + "to": [{ "key_code": "illumination_decrement" }] + }, + { + "from": { "key_code": "f6" }, + "to": [{ "key_code": "illumination_increment" }] + } + ], + "name": "HHKB", + "selected": true, + "simple_modifications": [ + { + "from": { "key_code": "escape" }, + "to": [{ "key_code": "grave_accent_and_tilde" }] + } + ], + "virtual_hid_keyboard": { "keyboard_type_v2": "ansi" } + } + ] +} diff --git a/vim/.vimrc b/vim/.vimrc deleted file mode 100644 index aaa5fd2..0000000 --- a/vim/.vimrc +++ /dev/null @@ -1,264 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => General -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Load plugins -call plug#begin() -Plug 'itchyny/lightline.vim' -Plug 'arcticicestudio/nord-vim' -Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } -Plug 'preservim/nerdtree' -Plug 'davidhalter/jedi-vim' -Plug 'sheerun/vim-polyglot' -Plug 'jiangmiao/auto-pairs' -call plug#end() - -" Sets how many lines of history VIM has to remember -set history=500 - -" Enable filetype plugins -filetype plugin on -filetype indent on - -" Set to auto read when a file is changed from the outside -set autoread -au FocusGained,BufEnter * checktime - -" With a map leader it's possible to do extra key combinations -" like w saves the current file -let mapleader = "," - -" Fast saving -nmap w :w! - -" :W sudo saves the file -" (useful for handling the permission-denied error) -command! W execute 'w !sudo tee % > /dev/null' edit! - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => VIM user interface -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Set 7 lines to the cursor - when moving vertically using j/k -set so=7 - -" Avoid garbled characters in Chinese language windows OS -let $LANG='en' -set langmenu=en -" source $VIMRUNTIME/delmenu.vim -" source $VIMRUNTIME/menu.vim - -" Turn on the Wild menu -set wildmenu - -" Ignore compiled files -set wildignore=*.o,*~,*.pyc -if has("win16") || has("win32") - set wildignore+=.git\*,.hg\*,.svn\* -else - set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store -endif - -" Show line numbers -set number - -"Always show current position -set ruler - -" Highlight current line -set cursorline - -" Height of the command bar -set cmdheight=1 - -" A buffer becomes hidden when it is abandoned -set hid - -" Configure backspace so it acts as it should act -set backspace=eol,start,indent -set whichwrap+=<,>,h,l - -" Ignore case when searching -set ignorecase - -" When searching try to be smart about cases -set smartcase - -" Highlight search results -set hlsearch - -" Makes search act like search in modern browsers -set incsearch - -" Don't redraw while executing macros (good performance config) -set lazyredraw - -" For regular expressions turn magic on -set magic - -" Show matching brackets when text indicator is over them -set showmatch - -" Clear search -map :let @/='' " clear search - -" How many tenths of a second to blink when matching brackets -set mat=2 - -" No annoying sound on errors -set noerrorbells -" set novisualbell -set t_vb= -set tm=500 - -" Add a bit extra margin to the left -" set foldcolumn=1 - -" Hide modes -set noshowmode - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Colors and Fonts -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Enable syntax highlighting -syntax enable - -if (has("termguicolors")) - set termguicolors -endif - -" Colorscheme -colorscheme nord - -" Set theme for status line -let g:lightline = { - \ 'colorscheme': 'nord', - \ } - -set background=dark - -" Set utf8 as standard encoding and en_US as the standard language -set encoding=utf8 - -" Use Unix as the standard file type -set ffs=unix,dos,mac - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Files, backups and undo -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Turn backup off, since most stuff is in SVN, git etc. anyway... -set nobackup -set nowb -set noswapfile - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Text, tab and indent related -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Use spaces instead of tabs -set expandtab - -" Be smart when using tabs ;) -set smarttab - -" 1 tab == 4 spaces -set shiftwidth=4 -set tabstop=4 - -" Linebreak on 500 characters -set lbr -set tw=500 - -set ai "Auto indent -set si "Smart indent -set wrap "Wrap lines - - -"""""""""""""""""""""""""""""" -" => Visual mode related -"""""""""""""""""""""""""""""" -" Visual mode pressing * or # searches for the current selection -" Super useful! From an idea by Michael Naumann -vnoremap * :call VisualSelection('', '')/=@/ -vnoremap # :call VisualSelection('', '')?=@/ - -" Return to last edit position when opening files (You want this!) -au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif - - -"""""""""""""""""""""""""""""" -" => Status line -"""""""""""""""""""""""""""""" -" Always show the status line -set laststatus=2 - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Editing mappings -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Remap VIM 0 to first non-blank character -map 0 ^ - -" Move a line of text using ALT+[jk] or Command+[jk] on mac -nmap mz:m+`z -nmap mz:m-2`z -vmap :m'>+`mzgv`yo`z -vmap :m'<-2`>my` - nmap - vmap - vmap -endif - -" Delete trailing white space on save, useful for some filetypes ;) -fun! CleanExtraSpaces() - let save_cursor = getpos(".") - let old_query = getreg('/') - silent! %s/\s\+$//e - call setpos('.', save_cursor) - call setreg('/', old_query) -endfun - -if has("autocmd") - autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() -endif - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => NERDTree -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -nnoremap :NERDTreeToggle - -autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Helper functions -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -function! VisualSelection(direction, extra_filter) range - let l:saved_reg = @" - execute "normal! vgvy" - - let l:pattern = escape(@", "\\/.*'$^~[]") - let l:pattern = substitute(l:pattern, "\n$", "", "") - - if a:direction == 'gv' - call CmdLine("Ack '" . l:pattern . "' " ) - elseif a:direction == 'replace' - call CmdLine("%s" . '/'. l:pattern . '/') - endif - - let @/ = l:pattern - let @" = l:saved_reg -endfunction - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Language support -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -let g:go_def_mode='gopls' -let g:go_info_mode='gopls'