# Venomade's kakrc # ------ # SOURCE # ------ # Use Colemak keybinds source ~/.config/kak/colemak.kak source ~/.config/kak/compilation-mode.kak # ------- # OPTIONS # ------- # Set tab width set-option global tabstop 2 set-option global indentwidth 2 # Display line numbers add-highlighter global/ number-lines -hlcursor # Softwrap long lines add-highlighter global/ wrap -word -indent # Set the colorscheme colorscheme 'modus-vivendi' # Move the modeline to the top of the screen set-option global ui_options terminal_status_on_top=yes # Don't show changelog at startup set-option global startup_info_version 10000000000000 # Add scroll margin set-option global scrolloff 5,5 # Use ripgrep instead of grep set-option global grepcmd 'rg -HUn --no-heading --sort path --vimgrep' # Remove trailing whitespace on save hook -group auto-trim-whitespace global BufWritePre .* %{ try %{ execute-keys -draft \%s\h+$d } } # Disable Clippy set-option -add global ui_options terminal_assistant=none # Disable word completion set-option global completers filename # -------- # KEYBINDS # -------- # Buffer Keybinds declare-user-mode buffer-mode map global user b ':enter-user-mode buffer-mode' -docstring 'buffer...' map global buffer-mode d ':delete-buffer' -docstring 'delete buffer' map global buffer-mode k ':delete-buffer!' -docstring 'kill buffer' map global buffer-mode n ':buffer-next' -docstring 'next buffer' map global buffer-mode p ':buffer-previous' -docstring 'previous buffer' # map global buffer-mode b ':prompt -buffer-completion buffer: %{ buffer %val{text} }' -docstring 'switch buffer' # Comment line map global normal "#" ":comment-line" # File Keybinds declare-user-mode file-mode map global user f ':enter-user-mode file-mode' -docstring 'file...' # map global file-mode f ':prompt -shell-script-candidates %{ fd --type f } file: %{ edit %val{text} }' -docstring "find file" map global file-mode c ':e ~/.config/kak/kakrc' -docstring 'open config' map global file-mode t ':e ~/Documents/Notes/TODO.md' -docstring 'open todo' # Search case-insensitive by default map global normal "/" "/(?Si)" map global normal "?" "?(?Si)" map global normal "" "(?Si)" map global normal "" "(?Si)" # Select inner line map global normal X x_ # Use tab for autocomplete # hook global InsertCompletionShow .* %{ # try %{ # execute-keys -draft 'h\h' # map window insert # map window insert # hook -once -always window InsertCompletionHide .* %{ # unmap window insert # unmap window insert # } # } # } # Tab jumps to next snippet placeholder by default in insert mode map global insert ': lsp-snippets-select-next-placeholdersi' map global insert ': lsp-snippets-select-next-placeholdersi' # optional reverse # When completion menu shows, remap tab to cycle completions — but only if not in a snippet hook global InsertCompletionShow .* %{ try %{ execute-keys -draft 'h\h' try %{ eval %sh{ [ -n "${kak_opt_lsp_snippets_placeholder_groups}" ] && echo "fail" } map window insert map window insert hook -once -always window InsertCompletionHide .* %{ unmap window insert unmap window insert } } } } # Map tab and shift-tab to indent and dedent in normal mode map global normal '>' map global normal '<' # Terminal related bindings declare-user-mode terminal-mode map global user t ':enter-user-mode terminal-mode' -docstring 'terminal...' map global terminal-mode t ':terminal zsh' -docstring 'open terminal' map global terminal-mode s ':tmux-repl-horizontal ' -docstring 'open terminal split (H)' map global terminal-mode v ':tmux-repl-vertical' -docstring 'open terminal split (V)' define-command smart-gh \ -docstring "Smart goto line start." \ %{ set-register c %val{cursor_column} execute-keys gi evaluate-commands %sh{ orig_col="${kak_reg_c}" indent_col="${kak_cursor_column}" if [ "${orig_col}" -le "${indent_col}" ]; then echo "execute-keys gh" fi } } map global goto h :smart-gh -docstring 'line begin (smart)' # Window Management declare-user-mode window-mode map global user w ':enter-user-mode window-mode' -docstring 'window...' map global window-mode s ':tmux-terminal-horizontal kak -c %val{session}' -docstring 'open window split (H)' map global window-mode v ':tmux-terminal-vertical kak -c %val{session}' -docstring 'open window split (V)' # ------- # PLUGINS # ------- # Nanoline is a cleaner alternative to the default modeline set-option global nanoline_rw_face_dark rgb:11111b,rgb:b4befe nanoline dark nanoline-format # Use auto-pairs enable-auto-pairs # Enable Copy-Paste with kakboard hook global WinCreate .* %{ kakboard-enable } # Load LSP eval %sh{kak-lsp} set-option global modelinefmt "%opt{lsp_modeline} %opt{modelinefmt}" map global user l ':enter-user-mode lsp' -docstring 'lsp...' map global goto d :lsp-definition -docstring 'LSP definition' map global goto r :lsp-references -docstring 'LSP references' map global goto y :lsp-type-definition -docstring 'LSP type definition' map global insert ':try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks tab> }' -docstring 'Select next snippet placeholder' map global object a 'lsp-object' -docstring 'LSP any symbol' map global object 'lsp-object' -docstring 'LSP any symbol' map global object f 'lsp-object Function Method' -docstring 'LSP function or method' map global object t 'lsp-object Class Interface Module Namespace Struct' -docstring 'LSP class or module' map global object d 'lsp-diagnostic-object error warning' -docstring 'LSP errors and warnings' map global object D 'lsp-diagnostic-object error' -docstring 'LSP errors' hook global WinSetOption lsp_code_action_indicator=.* %{ set-option window lsp_code_action_indicator "[A]" } hook global WinSetOption lsp_progress_indicator=.* %{ set-option window lsp_progress_indicator "[P]" } hook global GlobalSetOption lsp_modeline_message_requests=.* %{ evaluate-commands %sh{ if [ -n "$kak_hook_param_capture_0" ]; then echo "set-option global lsp_modeline_message_requests '[M]'" fi } } # Save with formatting with :W define-command W %{ lsp-formatting-sync w } set-face global InlayDiagnosticHint 'rgb:444444' # FZF require-module fzf set-option global fzf_tmux_popup true set-option global fzf_tmux_popup_width '80%' set-option global fzf_default_opts '--color=base16' set-option global fzf_highlight_command 'bat' require-module fzf-file set-option global fzf_file_command 'fd' require-module fzf-grep set-option global fzf_grep_command 'rg' map global file-mode f ':require-module fzf-file; fzf-file' -docstring 'find file' map global file-mode p ':require-module fzf-file; fzf-file buffile-dir' -docstring 'find file at path' map global file-mode g ':require-module fzf-grep; fzf-grep' -docstring 'grep files' map global file-mode d ':require-module fzf-cd; fzf-cd' -docstring 'change directory' map global file-mode / ':require-module fzf-search; fzf-buffer-search' -docstring 'search current file' map global buffer-mode b ':require-module fzf-buffer; fzf-buffer' -docstring 'switch buffer' # map global user F ':fzf-mode' -docstring 'fzf...' # Harpoon harpoon-add-bindings # Kakpipe require-module kakpipe set-option global compile_run_mode 'tmux_horizontal' declare-user-mode compile-mode map global user c ':enter-user-mode compile-mode' -docstring 'compile...' map global compile-mode c ':prompt -shell-completion "compile: " %{ evaluate-commands %sh{ echo "compile $kak_text" } }' -docstring 'compile' map global compile-mode r ':recompile' -docstring 'recompile' # Kakoune Focus declare-user-mode selection-mode map global user s ':enter-user-mode selection-mode' -docstring 'selection...' map global selection-mode f ':focus-toggle' -docstring "toggle selections focus" define-command focus-live-enable %{ focus-selections hook -group focus window NormalIdle .* %{ focus-extend } } define-command focus-live-disable %{ remove-hooks window focus focus-clear } # --------- # FILETYPES # --------- # Lua hook global BufSetOption filetype=lua %{ set-option buffer lsp_servers %exp{ # Minimal setup for luals (Lua doesn't really work with LSP, I've tried) [luals] filetypes = ["lua"] root_globs = [".git/", ".luarc.json", ".luarc.jsonc", ".editorconfig", ".kakrc"] command = "lua-language-server" [luals.settings.Lua] codeLens.enable = false completion.autoRequire = false # afaik not supported by kakoune completion.enable = true completion.callSnippet = "Replace" completion.showWord = "Disable" completion.postfix = "@" diagnostics.enable = true diagnostics.disable = [ "lowercase-global", "spell-check", ] format.enable = true hint.enable = true hint.paramName = "Disable" hint.paramType = false hover.enable = true runtime.path = [ "?.lua", "?/init.lua", ] runtime.version = "Lua 5.4" semantic.enable = false [luals.settings.Lua.diagnostics.severity] undefined-field = "Warning" undefined-global = "Warning" # [emmylua_ls] # filetypes = ["lua"] # root_globs = [".git/", ".luarc.json", ".editorconfig", ".kakrc", ".emmyrc.json"] # command = "emmylua_ls" } } hook global WinSetOption filetype=lua %{ add-highlighter window/emmylua_direct regex "---\s*(@(?:alias|as|class|enum|generic|return|type|overload))\s+([^\n]*)" 1:attribute 2:type add-highlighter window/emmylua_labeled regex "---\s*(@(?:alias|cast|field|param))\s+([a-zA-Z0-9_\?]*) ([^\n]*)" 1:attribute 2:variable 3:type add-highlighter window/emmylua_enum_variant regex '---\s*\|\s*("[^\n]*")' 1:string } # Markdown hook global BufSetOption filetype=markdown %{ set-option buffer lsp_servers %exp{ [zk_lsp] filetypes = ["markdown"] root_globs = [".git/", ".zk/", ".kakrc"] command = "zk" args = ["lsp"] [harper] filetypes = ["markdown"] root_globs = [".git/", ".zk/", ".kakrc"] command = "harper-ls" args = ["--stdio"] settings_section = "_" [harper.settings._.harper-ls] #isolateEnglish = true # Currently very buggy dialect = "British" [harper.settings._.harper-ls.markdown] IgnoreLinkTitle = true } } # ---- # MISC # ---- # TODO: Fix this TODO Highlighter hook -group todohighlight global BufCreate .* %{ add-highlighter buffer/todo-highlight regex "%opt{comment_line}[ \t]*\b(TODO|FIXME|HACK)\b" 1:default+bu@comment } # Enable LSP (Must come just before settings, after everything else lsp) lsp-enable lsp-diagnostic-lines-disable global lsp-inlay-diagnostics-enable global # lsp-inlay-code-lenses-enable global lsp-inlay-hints-enable global set-option global lsp_hover_anchor true # lsp-auto-hover-enable lsp-auto-signature-help-enable