426 lines
10 KiB
Text
426 lines
10 KiB
Text
theme = "ashen"
|
|
|
|
[editor]
|
|
line-number = "relative"
|
|
undercurl = true
|
|
default-yank-register = '+'
|
|
cursorline = true
|
|
bufferline = "multiple"
|
|
color-modes = true
|
|
shell = ['fish', '-c']
|
|
text-width = 80
|
|
|
|
mouse = true
|
|
continue-comments = true
|
|
auto-completion = true
|
|
path-completion = true
|
|
completion-replace = false
|
|
completion-trigger-len = 2
|
|
|
|
scrolloff = 2
|
|
jump-label-alphabet = "tnseriplfuwydhcxoaqz"
|
|
# minimum severity to show
|
|
end-of-line-diagnostics = "disable"
|
|
# rulers = [82]
|
|
|
|
[editor.smart-tab]
|
|
enable = false
|
|
|
|
[editor.whitespace.render]
|
|
tab = "none"
|
|
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"
|
|
left = [
|
|
"mode",
|
|
"spinner",
|
|
"version-control",
|
|
# "spacer",
|
|
# "separator",
|
|
# "file-name",
|
|
"file-base-name",
|
|
"read-only-indicator",
|
|
"file-modification-indicator",
|
|
# "workspace-diagnostics",
|
|
]
|
|
center = ["diagnostics"]
|
|
right = [
|
|
"primary-selection-length",
|
|
"selections",
|
|
"register",
|
|
# "position",
|
|
"position-percentage",
|
|
"total-line-numbers",
|
|
"file-encoding",
|
|
]
|
|
separator = "|"
|
|
diagnostics = ["warning", "error"]
|
|
workspace-diagnostics = ["warning", "error"]
|
|
|
|
[editor.lsp]
|
|
# enable = false
|
|
display-inlay-hints = true
|
|
display-messages = true
|
|
display-progress-messages = true
|
|
# use C-k manually instead
|
|
auto-signature-help = false
|
|
|
|
[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 = "completion"
|
|
S-tab = "move_parent_node_start"
|
|
|
|
# sticky mode!
|
|
[keys.normal.Z]
|
|
e = "scroll_up"
|
|
n = "scroll_down"
|
|
j = "search_next"
|
|
J = "search_prev"
|
|
|
|
[keys.normal.space.p]
|
|
# force inline paste
|
|
p = ':append-output ~/.config/helix/scripts/paste.py'
|
|
P = ':insert-output ~/.config/helix/scripts/paste.py'
|
|
# force linewise paste
|
|
"]" = [
|
|
"ensure_selections_forward",
|
|
"add_newline_below",
|
|
"move_line_down",
|
|
":insert-output ~/.config/helix/scripts/paste.py",
|
|
]
|
|
"[" = [
|
|
"ensure_selections_forward",
|
|
"flip_selections",
|
|
"add_newline_above",
|
|
"move_line_up",
|
|
":insert-output ~/.config/helix/scripts/paste.py",
|
|
]
|
|
c = '''
|
|
:append-output sh -c 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'''
|
|
C = '''
|
|
:insert-output sh -c 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'''
|
|
|
|
[keys.normal]
|
|
tab = "trim_selections"
|
|
# swap select_mode and regex keys
|
|
v = "select_regex"
|
|
V = "split_selection"
|
|
s = "select_mode"
|
|
|
|
# reload lsp
|
|
C-r = ":lsp-restart"
|
|
# toggle lsp
|
|
# C-r = '@:toggle lsp.enable<ret>:echo %sh{sleep 0.1}<ret>:lsp-restart<ret>'
|
|
|
|
A-o = '@o<esc>O<esc>h'
|
|
|
|
C-A-r = ":lsp-stop"
|
|
# config file stuff
|
|
|
|
# execute current file
|
|
# A-x = ':sh "%sh{pwd}/%{buffer_name}"'
|
|
|
|
# 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"
|
|
C-p = "jump_backward"
|
|
# a = "append_mode_same_line"
|
|
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"
|
|
N = "move_line_down"
|
|
E = "move_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"]
|
|
A-j = "join_selections"
|
|
A-J = "join_selections_space"
|
|
C-q = ":qa"
|
|
C-S-q = ":qa!"
|
|
# C-m = ":bp"
|
|
M = ":bp"
|
|
# C-i = ":bn"
|
|
C-m = "jump_view_left"
|
|
C-n = "jump_view_down"
|
|
C-i = "jump_view_right"
|
|
C-e = "jump_view_up"
|
|
I = ":bn"
|
|
X = "extend_line_above"
|
|
x = "extend_line_below"
|
|
# 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"]
|
|
|
|
# language specific commands
|
|
[keys.normal.space.l]
|
|
# open pdf preview for typst
|
|
p = ':sh ~/dev/utils/helix-pdf/hx-typ-zathura.fish --watch --kill-on-exit %{buffer_name}'
|
|
# p = ':sh ~/.config/helix/scripts/hx-typ-zathura.fish -k %{buffer_name}'
|
|
|
|
# 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}"
|
|
r = ":reset-diff-change"
|
|
# minimap fun!
|
|
m = ':sh code-minimap (path resolve %{buffer_name})'
|
|
|
|
[keys.normal."["]
|
|
x = "extend_line_above"
|
|
|
|
[keys.normal.space.m]
|
|
m = '@ks*'
|
|
t = '@:insert-output cat <C-r>% | markdown-toc --bullets - --no-firsth1 -<ret>'
|
|
[keys.select.space.m]
|
|
m = '@ks*'
|
|
t = '@:insert-output cat <C-r>% | markdown-toc --bullets - --no-firsth1 -<ret>'
|
|
|
|
[keys.normal.space]
|
|
A-r = ":config-reload"
|
|
A-o = ":config-open"
|
|
A-w = ":config-open-workspace"
|
|
y = ':w'
|
|
Y = ':w!'
|
|
# create line above and below selection
|
|
O = '@ks<ret>'
|
|
o = '@xks<ret>'
|
|
t = "move_parent_node_end"
|
|
T = "move_parent_node_start"
|
|
# yazi integration
|
|
space = [
|
|
':sh rm -f /tmp/yazi-path',
|
|
':insert-output footclient -d error yazi %{buffer_name} --chooser-file=/tmp/yazi-path',
|
|
':open %sh{cat /tmp/yazi-path}',
|
|
':redraw',
|
|
':set mouse false',
|
|
':set mouse true',
|
|
]
|
|
|
|
# insert markdown toc :)
|
|
|
|
x = ":bc"
|
|
X = ':sh %{buffer_name}'
|
|
|
|
# UI settings and stuff
|
|
[keys.normal.space.u]
|
|
# Toggle insert cursor shape
|
|
C = ':toggle cursor-shape.insert bar block'
|
|
# Toggle Cursor Always Centered
|
|
z = ':toggle scrolloff 2 99'
|
|
d = ':toggle statusline.center ["diagnostics"] ["workspace-diagnostics","diagnostics"] []'
|
|
# # Toggle End of line diagnostics
|
|
# D = ':toggle end-of-line-diagnostics hint disable'
|
|
# # Toggle Inline diagnostics
|
|
# d = ':toggle inline-diagnostics.cursor-line disable hint'
|
|
# Toggle soft-wrap
|
|
w = ':toggle soft-wrap.enable'
|
|
# Soft wrap at specified text width
|
|
s = ':set soft-wrap.wrap-at-text-width true'
|
|
S = ':set soft-wrap.wrap-at-text-width false'
|
|
# Toggle signature help (off by default)
|
|
k = ":toggle lsp.auto-signature-help"
|
|
# toggle auto completion (on by default)
|
|
c = ":toggle auto-completion"
|
|
# toggle inlay hints (on by default)
|
|
h = ':toggle lsp.display-inlay-hints'
|
|
# Toggle git display
|
|
g = ':toggle gutters.layout ["diagnostics", "spacer", "line-numbers", "spacer", "diff"] ["diagnostics", "spacer", "line-numbers", "spacer", "spacer"]'
|
|
# Toggle Ruler
|
|
r = ':toggle rulers [82] []'
|
|
|
|
[keys.select.g]
|
|
m = "extend_to_line_start"
|
|
i = "extend_to_line_end"
|
|
I = "extend_to_line_end_newline"
|
|
l = "extend_to_file_end"
|
|
L = "extend_to_last_line"
|
|
|
|
[keys.select.space]
|
|
t = "extend_parent_node_end"
|
|
T = "extend_parent_node_start"
|
|
# yazi integration
|
|
space = [
|
|
':sh rm -f /tmp/yazi-path',
|
|
':insert-output footclient -d error yazi %{buffer_name} --chooser-file=/tmp/yazi-path',
|
|
':open %sh{cat /tmp/yazi-path}',
|
|
':redraw',
|
|
':set mouse false',
|
|
':set mouse true',
|
|
]
|
|
|
|
# insert markdown toc :)
|
|
|
|
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"
|
|
|
|
|
|
[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"
|
|
|
|
# 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"
|