theme = "ashen" [editor] line-number = "relative" undercurl = true # true-color = true # Not sure if I should enable this by default... # maybe it's better to just get used to using the clipboards separately? # Wouldn't be a bad idea to encorporate two clipboards into my workflow, # especially for stuff like swapping selections and stuff... default-yank-register = '+' cursorline = true bufferline = "multiple" color-modes = true scrolloff = 2 jump-label-alphabet = "tnseriplfuwydhcxoaqz" # minimum severity to show end-of-line-diagnostics = "disable" # rulers = [120] [editor.whitespace.render] tab = "all" space = "none" newline = "all" [editor.whitespace.characters] newline = "" tab = "" tabpad = " " # tabpad = "·" [editor.cursor-shape] # insert = "bar" normal = "block" # select = "underline" [editor.statusline] mode.normal = "NRM" [editor.lsp] display-inlay-hints = true display-messages = true # TODO: disable auto signature help # and set a binding for it instead auto-signature-help = true [editor.inline-diagnostics] cursor-line = "disable" other-lines = "disable" [editor.indent-guides] render = true # character = "|" skip-levels = 1 [editor.soft-wrap] enable = true # prevents words from being split # max-wrap = 25 wrap-indicator = "" [keys.insert] C-k = "signature_help" C-c = "normal_mode" [keys.normal] # swap select_mode and regex keys S = "select_regex" v = "split_selection" s = "select_mode" # reload file, reload lsp C-r = ":lsp-restart" C-S-r = ":reload" # Treesitter selections # Left <-> Right: Sibling nodes # Up <-> Down: Parent/Child nodes A-S-n = "move_parent_node_end" A-S-e = "move_parent_node_start" A-a = "select_all_siblings" A-m = "select_prev_sibling" A-n = "shrink_selection" A-e = "expand_selection" A-i = "select_next_sibling" "{" = "rotate_selections_backward" "}" = "rotate_selections_forward" "A-{" = "rotate_selection_contents_backward" "A-}" = "rotate_selection_contents_forward" C-f = "jump_forward" # a = "append_mode_same_line" tab = "trim_selections" C-k = "signature_help" "\\" = ":format" "+" = ":reflow" ret = "goto_word" # master m = "move_char_left" i = "move_char_right" # # axel # m = "move_same_line_char_left" # i = "move_same_line_char_right" n = "move_visual_line_down" e = "move_visual_line_up" h = "insert_mode" H = "insert_at_line_start" L = "move_next_long_word_end" j = ["search_next", "align_view_center"] J = ["search_prev", "align_view_center"] N = "join_selections" A-N = "join_selections_space" C-q = ":qa" C-S-q = ":qa!" C-m = ":bp" M = ":bp" C-i = ":bn" I = ":bn" X = "extend_line_above" x = "extend_line" # A-x = "toggle_line_select" D = "kill_to_line_end" A-d = "kill_to_line_start" # Sub-word Movement w = "move_next_word_start" C-w = "move_next_sub_word_start" b = "move_prev_word_start" C-b = "move_prev_sub_word_start" l = "move_next_word_end" C-l = "move_next_sub_word_end" A-l = "move_prev_sub_word_start" # Navigation C-d = ["page_cursor_half_down", "align_view_center"] C-u = ["page_cursor_half_up", "align_view_center"] # git stuff [keys.normal.space.g] # blame b = ":sh git -C $(dirname $(realpath %{buffer_name})) blame -L %{cursor_line},%{cursor_line} $(realpath %{buffer_name})" # lazygit g = ":sh footclient -d error lazygit" # URL to current line o = ":sh ~/.config/helix/scripts/get_git_provider_url.fish %{buffer_name} %{cursor_line} | wl-copy" [keys.normal."["] x = "extend_line_above" [keys.normal.space] # yazi integration space = [ ':sh rm -f /tmp/yazi-path', ':insert-output yazi %{buffer_name} --chooser-file=/tmp/yazi-path', ':open %sh{cat /tmp/yazi-path}', ':redraw', ':set mouse false', ':set mouse true', ] p = ''' :append-output clipcat-menu --finder custom --custom-finder-program-path fuzzel --custom-finder-arguments=--dmenu,--placeholder=Clipboard --config <(printf "[log]\nemit_stdout = true\n") | grep -q 'Nothing is selected' && exit 1 || wl-paste''' P = ''' :insert-output clipcat-menu --finder custom --custom-finder-program-path fuzzel --custom-finder-arguments=--dmenu,--placeholder=Clipboard --config <(printf "[log]\nemit_stdout = true\n") | grep -q 'Nothing is selected' && exit 1 || wl-paste''' x = ":bc" # UI settings and stuff [keys.normal.space.u] # Toggle Cursor Always Centered C = ':toggle cursor-shape.insert bar block' z = ':toggle scrolloff 2 99' D = ':toggle end-of-line-diagnostics hint disable' d = ':toggle inline-diagnostics.cursor-line disable hint' w = ':toggle soft-wrap.enable' s = ':set soft-wrap.wrap-at-text-width true' S = ':set soft-wrap.wrap-at-text-width false' k = ":toggle lsp.auto-signature-help" c = ":toggle auto-completion" h = ':toggle lsp.display-inlay-hints' [keys.select.g] m = "extend_to_line_start" i = "extend_to_line_end" I = "extend_to_line_end_newline" l = "goto_file_end" L = "goto_last_line" [keys.select] tab = "trim_selections" "{" = "rotate_selections_backward" "}" = "rotate_selections_forward" "A-{" = "rotate_selection_contents_backward" "A-}" = "rotate_selection_contents_forward" # swap select_mode and regex keys v = "select_regex" V = "split_selection" s = "normal_mode" # Treesitter selections # Left <-> Right: Sibling nodes # Up <-> Down: Parent/Child nodes A-S-n = "move_parent_node_end" A-S-e = "move_parent_node_start" A-a = "select_all_siblings" A-m = "select_prev_sibling" A-n = "shrink_selection" A-e = "expand_selection" A-i = "select_next_sibling" X = "extend_line_above" x = "extend_line" ret = "extend_to_word" # master m = "extend_char_left" i = "extend_char_right" # # axel # m = "extend_same_line_char_left" # i = "extend_same_line_char_right" n = "extend_visual_line_down" e = "extend_visual_line_up" j = ["extend_search_next", "align_view_center"] J = ["extend_search_prev", "align_view_center"] C-l = "extend_next_sub_word_end" l = "extend_next_word_end" C-w = "extend_next_sub_word_start" C-b = "extend_prev_sub_word_start" L = "extend_next_long_word_end" A-l = "extend_prev_sub_word_start" [keys.normal.k] m = "match_brackets" k = "match_brackets" s = "surround_add" r = "surround_replace" d = "surround_delete" a = "select_textobject_around" i = "select_textobject_inner" [keys.select.k] m = "match_brackets" k = "match_brackets" s = "surround_add" r = "surround_replace" d = "surround_delete" a = "select_textobject_around" i = "select_textobject_inner" # [keys.normal."C-w"] # m = "jump_view_left" # C-m = "jump_view_left" # n = "jump_view_down" # C-n = "jump_view_down" # i = "jump_view_right" # C-i = "jump_view_right" # e = "jump_view_up" # C-e = "jump_view_up" # M = "swap_view_left" # N = "swap_view_down" # E = "swap_view_up" # I = "swap_view_right" # d = "wclose" # V = ":vsplit-new" # S = ":hsplit-new" # h = "no_op" # j = "no_op" # k = "no_op" # l = "no_op" # H = "no_op" # J = "no_op" # K = "no_op" # L = "no_op" # Window Mode [keys.normal.space.w] m = "jump_view_left" C-m = "jump_view_left" n = "jump_view_down" C-n = "jump_view_down" i = "jump_view_right" C-i = "jump_view_right" e = "jump_view_up" C-e = "jump_view_up" M = "swap_view_left" N = "swap_view_down" E = "swap_view_up" I = "swap_view_right" d = "wclose" V = ":vsplit-new" S = ":hsplit-new" h = "no_op" j = "no_op" k = "no_op" l = "no_op" H = "no_op" J = "no_op" K = "no_op" L = "no_op" [keys.normal.g] z = "goto_window_center" m = "goto_first_nonwhitespace" i = "goto_line_end" I = "goto_line_end_newline" n = "move_line_down" e = "move_line_up" l = "goto_file_end" L = "goto_last_line" [keys.normal.backspace] d = "delete_selection_noyank" c = "change_selection_noyank" [keys.select.backspace] d = "delete_selection_noyank" c = "change_selection_noyank"