#________ colorscheme _______ source "%val{config}/colorscheme.kak" #________ options ___________ # keep status bar in the default place set-option -add global ui_options terminal_status_on_top=false # set an invisible padding char set-option -add global ui_options terminal_padding_char= # always keep two lines and two columns displayed around the cursor set-option global scrolloff 2,2 # assistant set-option -add global ui_options terminal_assistant=cat # __________ commands __________ define-command -override lf-open \ -docstring 'pick a file with lf' %{ terminal /bin/sh -c %{ # Local variables kak_buffile=$1 kak_session=$2 kak_client=$3 # Create temporary file for selection lf_tmp=$(mktemp "${TMPDIR:-/tmp}"/lf-open.XXXXXXXXXX) # Get working directory of current buffer kak_pwd=$(dirname "${kak_buffile}") # Pick a file with lf $(lf -selection-path "${lf_tmp}" "${kak_pwd}") # Get first line of selection file (ignoring multiple selections) filename=$(head -n 1 "${lf_tmp}") # Only echo a command back if there was a selection if [ -n "$filename" ]; then # Construct the command to pass to kakoune kak_cmd="evaluate-commands -client $kak_client edit $filename" # Echo the command back to the parent session echo $kak_cmd | kak -p $kak_session fi } -- %val{buffile} %val{session} %val{client} } define-command -override todo \ -docstring 'edit todo list' %{ edit '~/areas/meta/todo' } define-command -override guix-todo \ -docstring 'edit todo list' %{ edit '~/projects/code/org/guix-todo/todo.org' } declare-option str radix '~/projects/code/scm/radix' define-command -override radix \ -docstring 'edit files in the radix git repository' %{ execute-keys ":e %opt{radix}/" } declare-option str radix_modules "%opt{radix}/radix" define-command -override modules \ -docstring 'edit radix modules' %{ execute-keys ":e %opt{radix_modules}/" } declare-option str radix_services "%opt{radix_modules}/services" define-command -override services \ -docstring 'edit radix services' %{ execute-keys ":e %opt{radix_services}/" } declare-option str radix_packages "%opt{radix_modules}/packages" define-command -override packages \ -docstring 'edit radix packages' %{ execute-keys ":e %opt{radix_packages}/" } declare-option str radix_home_services "%opt{radix_modules}/home/services" define-command -override home-services \ -docstring 'edit radix home services' %{ execute-keys ":e %opt{radix_home_services}/" } declare-option str zero '~/projects/code/scm/zero' define-command -override zero \ -docstring 'edit files in the zero git repository' %{ execute-keys ":e %opt{zero}/" } declare-option str home "%opt{zero}/home-environments" define-command -override home \ -docstring 'edit home declaration' %{ execute-keys ":e %opt{home}/" } declare-option str system "%opt{zero}/operating-systems" define-command -override system \ -docstring 'edit system declaration' %{ execute-keys ":e %opt{system}/" } declare-option str home_files "%opt{home}/%sh{whoami}/files" define-command -override files \ -docstring 'edit dotfiles' %{ execute-keys ":e %opt{home_files}/" } define-command -override colorscheme-config \ -docstring 'edit colorscheme configuration file' %{ edit "%opt{home_files}/.config/kak/autoload/colorscheme.kak" } define-command -override config \ -docstring 'edit kakoune main configuration file' %{ edit "%opt{home_files}/.config/kak/kakrc" } define-command -override rss \ -docstring 'edit rss feeds file' %{ edit "%opt{home_files}/.config/newsraft/feeds" } define-command -override remind \ -docstring 'edit reminders' %{ execute-keys ': e /home/radio/.local/share/reminders/' } define-command -override open-buffer-picker \ -docstring 'open-buffer-picker: Opens buffer picker.' %{ prompt buffer: -buffer-completion %{ buffer %val{text} } } define-command -override toggle-readonly \ -docstring 'changes buffer readonly option current state' %{ set-option buffer readonly %sh{ "$kak_opt_readonly" && echo false || echo true } } define-command -override qalc \ -params .. %{echo %sh{qalc ${@}}} \ -docstring 'compute equation with Qalculate!' complete-command qalc shell-script-candidates %{ { echo $(qalc --list-functions | head -n -3) echo $(qalc --list-variables | head -n -3) } | tr ' ' '\n' | sort | uniq } define-command diff-buffers -override -params 2 \ -docstring 'show the diff of two buffers'%{ evaluate-commands %sh{ file1=$(mktemp) file2=$(mktemp) echo " evaluate-commands -buffer '$1' write -force $file1 evaluate-commands -buffer '$2' write -force $file2 edit! -scratch *diff-buffers* set buffer filetype diff set-register | 'diff -u $file1 $file2; rm $file1 $file2' execute-keys !gg " } } complete-command diff-buffers buffer # __________ hidden commands __________ define-command -override -hidden edit-from-here %{ execute-keys ":edit %sh{dirname $kak_buffile}/" } # edit a file, searching from current file's directory define-command -override -hidden spawn-terminal-here %{ set-register b "%sh{pwd}" change-directory "%sh{dirname $kak_buffile}" evaluate-commands "terminal %sh{echo $SHELL}" change-directory "%reg{b}" } # Spawn a terminal in the current buffer's file directory # __________ mappings __________ ## buffer navigation try %{ declare-user-mode buffer } map global normal ': enter-user-mode buffer' \ -docstring 'enter buffer user mode' map global buffer h ': buffer-previous' \ -docstring 'move to the previous buffer in the list' map global buffer l ': buffer-next' \ -docstring 'move to the next buffer in the list' map global buffer q ': delete-buffer' \ -docstring 'delete current buffer' map global buffer Q ': delete-buffer!' \ -docstring 'delete current buffer (force)' map global goto b ': pick-buffers' \ -docstring 'buffer' ## git operations try %{ declare-user-mode git } map global user g ': enter-user-mode git' \ -docstring 'enter git user mode' map global git l ': git log' \ -docstring 'log' map global git c ': git commit' \ -docstring 'commit' map global git d ': git diff' \ -docstring 'diff' map global git s ': git status' \ -docstring 'status' map global git h ': git show-diff' \ -docstring 'show diff' map global git H ': git-hide-diff' \ -docstring 'hide diff' ## open selection operations try %{ declare-user-mode open-sel } map global user o ': enter-user-mode open-sel' \ -docstring 'enter open-sel user mode' map global open-sel b '$ $BROWSER $kak_reg_dot & disown' \ -docstring "on %sh{echo $BROWSER}" map global open-sel i '$ imv $kak_reg_dot & disown' \ -docstring 'on imv' map global open-sel s '$ sioyek $kak_reg_dot & disown' \ -docstring 'on sioyek' map global open-sel m '$ mpv $kak_reg_dot & disown' \ -docstring 'on mpv' ## surrounding operations map global object 'c\n,\n'\ -docstring 'newlines' map global object 'c,'\ -docstring 'spaces' ### operations relative to current file's directory map global user ': spawn-terminal-here' \ -docstring "open a new terminal within the current file's directory" map global user e ": edit-from-here" \ -docstring "edit a file, searching from current file's directory" ### comments map global user c ': comment-line' \ -docstring 'comment-line' map global user C ': comment-block' \ -docstring 'comment-block' map global user d ': lf-open' \ -docstring 'pick a file with lf' ### entering user modes map global user s ': enter-user-mode surround' \ -docstring 'enter surround user mode' map global user l ': enter-user-mode lsp' \ -docstring 'enter lsp user mode' ### remind map global user r ': remind' \ -docstring 'edit reminders' # __________ hooks __________ hook -group config global BufCreate 'kakrc' %{ set-option buffer filetype kak } # set kakrc's filetype to kak hook global BufCreate '\*scratch\*' %{ execute-keys '%' add-highlighter buffer/ wrap -indent -word -marker '↩' add-highlighter buffer/ show-whitespaces -indent '' -tab '→' } # remove the *scratch* message, and set highlighters hook global BufCreate .* %{ add-highlighter buffer/ number-lines -relative -hlcursor } # set relative line numbers and visual line break hook global BufWritePost ".*/.config/kak/kakrc" %{ source "%val{buffile}" } # source kakrc on save hook global BufWritePost "%val{config}/colorscheme.kak" %{ source "%val{config}/colorscheme.kak" evaluate-commands palette-gutter } # automatically source colorscheme.kak on save hook global BufOpenFile "%val{config}/colorscheme.kak" %{ evaluate-commands palette-gutter } # display faces in the colorscheme file hook global BufOpenFile .* %{ add-highlighter buffer/ wrap -word -marker '↩' add-highlighter buffer/ show-whitespaces -indent '' -tab '→' } # set highlighters for file buffers hook global BufOpenFile .*\.typ %{ set-option buffer filetype typst } hook global InsertCompletionShow .* %{ map window insert map window insert } hook global InsertCompletionHide .* %{ map window insert map window insert } # use tab for completion movement try %{ declare-option str line_comment_token '' } hook -group config global BufSetOption filetype=kak %{ set-option buffer indentwidth 2 set-option buffer line_comment_token '#' } # Kakscript comment tokens hook -group config global BufSetOption filetype=scheme %{ set-option buffer indentwidth 2 set-option buffer line_comment_t ';;' set-option buffer block_comment_tokens '#|' '|#' } # Scheme comment tokens hook -group config global BufSetOption filetype=(c|cpp) %{ set-option window formatcmd 'clazy' set-option buffer line_comment_token '//' set-option buffer block_comment_tokens '/*' '*/' } # C and C++ comment tokens hook -group config global BufSetOption filetype=(sh|dash) %{ set-option window formatcmd 'shfmt' set-option window lintcmd 'shellharden' set-option buffer line_comment_token '#' set-option buffer block_comment_tokens "<<'####'" '###' } # Shell comment tokens hook -group config global BufSetOption filetype=zig %{ set-option buffer line_comment_token '//' } # Zig comment tokens hook global WinSetOption filetype=kak %{ hook global NormalIdle .* %{ evaluate-commands -save-regs 'a' %{ try %{ execute-keys -draft w"ay evaluate-commands %sh{ ( color="${kak_reg_a}" inverted_color=$(echo "${color}" | perl -pe 'tr/0123456789abcdefABCDEF/fedcba9876543210543210/') printf "%s\n" "evaluate-commands -client $kak_client %{ try %{ echo -markup %{{rgb:${inverted_color},rgb:${color}+b} #${color} } }}" | kak -p $kak_session ) >/dev/null 2>&1