# Daniel's Personal kakrc # Author: Daniel Fichtinger # See README.md for explanations. # TODO: refactor config s.t. everything defined in autoload # provides a module # Then, use an environment variable to determine whether # we're on a server. If we are, we don't load a bunch of # the modules. This lets us keep a unified config without requiring # all dependencies to be installed. declare-option -hidden bool on_server %sh{ if [ -z "$KAK_ON_SERVER" ]; then printf 'false' else printf 'true' fi } define-command -override true nop define-command -override false fail try %{ %opt{on_server} colorscheme ashen-local } catch %{ evaluate-commands %sh{ kak-tree-sitter -dks --init $kak_session } evaluate-commands %sh{kak-popup init} colorscheme ashen require-module hop-kak require-module fishr require-module title-bar require-module notes require-module plugins require-module yazi require-module luar set-option global luar_interpreter luajit # only set to foot if we are on wayland hook global ModuleLoaded wayland %{ set-option global termcmd 'footclient dash -c' } # needed for tree-sitter to respect show-matching define-command -override tree-sitter-user-after-highlighter %{ add-highlighter -override buffer/show-matching show-matching } # manually requiring needed for some reason 😢 require-module peneira declare-user-mode peneira map -docstring %{ Picker mode } global user f ': enter-user-mode peneira' map -docstring 'pick file' global peneira f ': peneira-files' map -docstring 'pick unopened file' global peneira F ': peneira-files -hide-opened' map -docstring %{ pick line in buffer } global peneira '/' ': peneira-lines' define-command -override -hidden consume %{ nop %sh{ niri msg action consume-or-expel-window-left } } define-command terminal-consume %{ terminal dash -c 'niri msg action consume-or-expel-window-left; exec fish' } alias global tc terminal-consume define-command -docstring %{ Create a new client in vertial split } new-consume %{ new consume } alias global nc new-consume alias global n new define-command -docstring 'open popup shell' popup-shell %{ popup fish } alias global pp popup-shell map -docstring 'popup shell' global user . ': popup-shell' try %{ evaluate-commands %sh{kak-lsp-diags} map -docstring 'enable diagnostic hover' global ui "'" ': lsp-diag-hover-enable' map -docstring 'disable diagnostic hover' global ui '"' ': lsp-diag-hover-disable' } } require-module surround require-module ficgrep require-module byline require-module spell set-option global scrolloff 3,3 require-module ui-mode try %{ set-option global ashen_dynamic_cursor true set-option global ashen_eol_cursor true } # disable clippy set-option -add global ui_options terminal_assistant=none # This gets overridden by editorconfig but we set sane default anyways set-option global tabstop 4 set-option global indentwidth 4 hook global WinSetOption filetype=kak %{ # make brackets gray a-la Ashen add-highlighter window/bracket regex [\[\]\(\)\{\}]{1} 0:rgb:737373 # special highlighting for escaped goodies in regex add-highlighter window/regex-escaped regex \\[\[\]\(\)\{\}fnrtv0\\dwshDWSH] 0:rgb:e5e5e5 } # default window settings # wrap enabled # scrolloff enabled hook global WinCreate .* %{ ui-wrap-enable # TODO: fix ui-scrolloff-enable and use that instead ui-scrolloff-toggle add-highlighter window/number-lines number-lines -hlcursor -relative -separator " " # only-trailing is nice QOL otherwise it gets hard to read the screen # and it makes it easy to see trailing spaces add-highlighter window/show-whitespaces show-whitespaces -only-trailing add-highlighter window/show-matching show-matching } # convenience mappings # quitting & saving map -docstring "quit" global user q ": q" map -docstring "quit" global normal ": q" map -docstring "force quit" global user Q ": q!" map -docstring "force quit" global normal ": q!" map -docstring "kill session" global normal ':kill' map -docstring "force kill session" global normal ':kill!' map -docstring "save" global normal ": write" map -docstring "save" global normal ": write!" # buffer operations map -docstring "close current buffer" global user x ": db" map -docstring "goto previous buffer" global user m ": bp" map -docstring "goto next buffer" global user i ": bn" map -docstring "goto previous buffer" global normal ": bp" map -docstring "goto next buffer" global normal ": bn" # trim whitespace map global normal _ # comments map -docstring "comment line" global normal "#" ": comment-line" map -docstring "comment block" global normal "" ": comment-block" # formatting map -docstring "format" global normal = ": format-buffer" map -docstring "format" global normal ": format-selections" # Case-insensitive Search map -docstring 'case insensitive search' global user '/' /(?i) map -docstring 'case insensitive backward search' global user '' (?i) map -docstring 'case insensitive extend search' global user '?' ?(?i) map -docstring 'case insensitive backward extend-search' global user '' (?i) # TODO: how to bind these to goto mode while respecting g/G?? map -docstring 'Select to file end' global user N "GjL" map -docstring 'Extend to file end' global user n "gjl" define-command -docstring "Create a scratch buffer" scratch %{ edit -scratch } alias global s scratch define-command -params 1 -docstring "Set buffer filetype" filetype %{ set-option buffer filetype %arg{1} } define-command -docstring "New terminal in cwd" cwd-terminal %{ terminal fish } # make easy to open new shell alias global t cwd-terminal map global normal '"_' define-command goto-debug %{ try %{ buffer *debug* ui-scrolloff-disable execute-keys 'gj' } } declare-user-mode debug map -docstring 'open debug buffer' global debug d ':goto-debug' map -docstring 'open debug buffer' global user D ': enter-user-mode debug' define-command exec-selection %{ execute-keys ':.' } map -docstring 'execute selection' global debug x ': exec-selection' define-command repl %{ new %{ edit -scratch; set buffer filetype kak } } # jumplist map -docstring 'jump forward' global normal map -docstring 'save to jumplist' global normal # selection saving map -docstring 'add selection' global normal Y a # hook -once global ClientCreate .* %{ # evaluate-commands %sh{ # if [ "$kak_buflist" != "*debug* *scratch*" ]; then # echo "delete-buffer *scratch*" # else # echo "echo -debug dumping buffers" # echo "echo -debug %val{buflist}" # fi # } # }