mirror of https://codeberg.org/anemofilia/zero
456 lines
14 KiB
Plaintext
456 lines
14 KiB
Plaintext
#________ 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 !<ret>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 <esc> ': enter-user-mode buffer<ret>' \
|
|
-docstring 'enter buffer user mode'
|
|
|
|
map global buffer h ': buffer-previous<ret>' \
|
|
-docstring 'move to the previous buffer in the list'
|
|
|
|
map global buffer l ': buffer-next<ret>' \
|
|
-docstring 'move to the next buffer in the list'
|
|
|
|
map global buffer q ': delete-buffer<ret>' \
|
|
-docstring 'delete current buffer'
|
|
|
|
map global buffer Q ': delete-buffer!<ret>' \
|
|
-docstring 'delete current buffer (force)'
|
|
|
|
map global goto b '<a-;>: pick-buffers<ret>' \
|
|
-docstring 'buffer'
|
|
|
|
## git operations
|
|
try %{ declare-user-mode git }
|
|
map global user g ': enter-user-mode git<ret>' \
|
|
-docstring 'enter git user mode'
|
|
|
|
map global git l ': git log<ret>' \
|
|
-docstring 'log'
|
|
|
|
map global git c ': git commit<ret>' \
|
|
-docstring 'commit'
|
|
|
|
map global git d ': git diff<ret>' \
|
|
-docstring 'diff'
|
|
|
|
map global git s ': git status<ret>' \
|
|
-docstring 'status'
|
|
|
|
map global git h ': git show-diff<ret>' \
|
|
-docstring 'show diff'
|
|
|
|
map global git H ': git-hide-diff<ret>' \
|
|
-docstring 'hide diff'
|
|
|
|
## open selection operations
|
|
try %{ declare-user-mode open-sel }
|
|
map global user o ': enter-user-mode open-sel<ret>' \
|
|
-docstring 'enter open-sel user mode'
|
|
|
|
map global open-sel b '$ $BROWSER $kak_reg_dot & disown<ret>' \
|
|
-docstring "on %sh{echo $BROWSER}"
|
|
|
|
map global open-sel i '$ imv $kak_reg_dot & disown<ret>' \
|
|
-docstring 'on imv'
|
|
|
|
map global open-sel s '$ sioyek $kak_reg_dot & disown<ret>' \
|
|
-docstring 'on sioyek'
|
|
|
|
map global open-sel m '$ mpv $kak_reg_dot & disown<ret>' \
|
|
-docstring 'on mpv'
|
|
|
|
## surrounding operations
|
|
map global object <ret> 'c\n,\n<ret>'\
|
|
-docstring 'newlines'
|
|
map global object <space> 'c<space>,<space><ret>'\
|
|
-docstring 'spaces'
|
|
|
|
### operations relative to current file's directory
|
|
map global user <ret> ': spawn-terminal-here<ret>' \
|
|
-docstring "open a new terminal within the current file's directory"
|
|
|
|
map global user e ": edit-from-here<ret>" \
|
|
-docstring "edit a file, searching from current file's directory"
|
|
|
|
### comments
|
|
map global user c ': comment-line<ret>' \
|
|
-docstring 'comment-line'
|
|
|
|
map global user C ': comment-block<ret>' \
|
|
-docstring 'comment-block'
|
|
|
|
map global user d ': lf-open<ret>' \
|
|
-docstring 'pick a file with lf'
|
|
|
|
### entering user modes
|
|
map global user s ': enter-user-mode surround<ret>' \
|
|
-docstring 'enter surround user mode'
|
|
|
|
map global user l ': enter-user-mode lsp<ret>' \
|
|
-docstring 'enter lsp user mode'
|
|
|
|
### remind
|
|
map global user r ': remind<ret>' \
|
|
-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 '%<a-d>'
|
|
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 <tab> <c-n>
|
|
map window insert <s-tab> <c-p>
|
|
}
|
|
hook global InsertCompletionHide .* %{
|
|
map window insert <tab> <c-n>
|
|
map window insert <s-tab> <c-p>
|
|
} # 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 <a-i>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 </dev/null &
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# __________ plugins __________
|
|
source "%val{config}/plugins/plug.kak/rc/plug.kak"
|
|
plug "andreyorst/plug.kak" noload # manually installed plugin manager
|
|
|
|
# configure this
|
|
plug "occivink/kakoune-phantom-selection" # work on multiple selections, one at a time
|
|
|
|
plug "maximbaz/surround.kak" # easily surround selections with parentesis or quotes
|
|
|
|
plug "https://gitlab.com/Screwtapello/kakoune-texinfo" # read info pages inside kakoune
|
|
|
|
plug "https://gitlab.com/Screwtapello/kakoune-state-save" config %{
|
|
hook global KakBegin .* %{
|
|
evaluate-commands 'state-save-reg-load colon'
|
|
evaluate-commands 'state-save-reg-load pipe'
|
|
evaluate-commands 'state-save-reg-load slash'
|
|
}
|
|
|
|
hook global KakEnd .* %{
|
|
evaluate-commands 'state-save-reg-save colon'
|
|
evaluate-commands 'state-save-reg-save pipe'
|
|
evaluate-commands 'state-save-reg-save slash'
|
|
}
|
|
} # save and restore state between sessions
|
|
|
|
# plug "https://codeberg.org/anemofilia/relapath.kak" demand relapath %{
|
|
# alias global cd relapath-change-directory
|
|
# alias global e relapath-edit
|
|
# alias global e! relapath-edit-bang
|
|
#
|
|
# alias global change-directory relapath-change-directory
|
|
# alias global edit relapath-edit
|
|
# alias global edit! relapath-edit-bang
|
|
# alias global rename-buffer relapath-rename-buffer
|
|
#
|
|
# relapath-modelinefmt-replace global
|
|
# } # no dereference symlinks
|
|
|
|
plug 'delapouite/kakoune-buffers' # ease navigation between opened buffers.
|
|
|
|
plug "https://gitlab.com/Screwtapello/kakoune-texinfo.git" # texinfo
|
|
|
|
plug "jpcornwell/kakoune-sokoban" # sokoban because yes
|
|
|
|
plug "lePerdu/kakboard" config %{
|
|
hook global WinCreate .* %{ kakboard-enable }
|
|
} # sync clipboards
|
|
|
|
plug "JJK96/kakoune-rainbow"
|
|
set-option global rainbow_opening "[[(]"
|
|
declare-option str-list rainbow_faces "rgb:a790d3" "rgb:6cdae0" "rgb:ff7f50" \
|
|
"rgb:ffea8c" "rgb:83dcaf" "rgb:eba4d4" \
|
|
"rgb:8b5be7"
|
|
# add coloring to matching parenthesis
|
|
|
|
plug "alexherbo2/auto-pairs.kak" config %{
|
|
set-option global auto_pairs ( ) { } [ ] '"' '"' "'" "'" ` `
|
|
hook -group config global BufSetOption filetype=latex %{
|
|
set-option buffer auto_pairs ( ) [ ] { } '"' '"' $ $
|
|
}
|
|
hook -group config global BufSetOption filetype=scheme %{
|
|
set-option buffer auto_pairs ( ) [ ] { } '"' '"'
|
|
}
|
|
hook -group config global BufSetOption filetype=typst %{
|
|
set-option buffer auto_pairs ( ) [ ] { } '"' '"' $ $ * *
|
|
}
|
|
evaluate-commands enable-auto-pairs
|
|
} # auto-pairing of characters
|
|
|
|
plug "Delapouite/kakoune-palette" config %{
|
|
hook global BufOpenFile .*colorscheme.kak %{
|
|
evaluate-commands palette-gutter
|
|
}
|
|
} # preview face colors in kakoune
|
|
|
|
# __________ lsp __________
|
|
eval %sh{kak-lsp --kakoune -s $kak_session}
|
|
hook global BufSetOption filetype=(c|cpp|css|haskell|html|json|scheme|sh|latex|zig) %{
|
|
add-highlighter buffer/ column 80 StatusLine
|
|
hook global BufSetOption filetype=scheme %{
|
|
set-option buffer lsp_cmd 'guile-lsp-server'
|
|
}
|
|
lsp-enable-window
|
|
}
|
|
|
|
# latex
|
|
set-option -add global lsp_server_configuration texlab.build.onSave=true
|
|
set-option -add global lsp_server_configuration texlab.build.forwardSearchAfter=true
|
|
set-option -add global lsp_server_configuration texlab.build.args=["-pdf","-new-viewer-","-pdflatex\=pdflatex","-silent","-shell-escape","%f"]
|