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 @@
. 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'