--- /dev/null
+##
+## base16.kak by lenormf
+##
+
+evaluate-commands %sh{
+ black_lighterer='rgb:383838'
+ black_lighter='rgb:2D2D2D'
+ black_light='rgb:1C1C1C'
+ cyan_light='rgb:7CB0FF'
+ green_dark='rgb:A1B56C'
+ grey_dark='rgb:585858'
+ grey_medium='rgb:989898'
+ grey_light='rgb:D8D8D8'
+ magenta_dark='rgb:AB4642'
+ magenta_light='rgb:AB4434'
+ orange_dark='rgb:DC9656'
+ orange_light='rgb:F7CA88'
+ purple_dark='rgb:BA8BAF'
+
+ ## code
+ echo "
+ face global value ${orange_dark}+b
+ face global type ${orange_light}
+ face global variable ${magenta_dark}
+ face global module ${green_dark}
+ face global function ${cyan_light}
+ face global string ${green_dark}
+ face global keyword ${purple_dark}+b
+ face global operator ${cyan_light}
+ face global attribute ${orange_dark}
+ face global comment ${grey_medium}
+ face global documentation comment
+ face global meta ${orange_light}
+ face global builtin default+b
+ "
+
+ ## markup
+ echo "
+ face global title blue
+ face global header ${cyan_light}
+ face global mono ${green_dark}
+ face global block ${orange_dark}
+ face global link blue
+ face global bullet ${magenta_light}
+ face global list ${magenta_dark}
+ "
+
+ ## builtin
+ echo "
+ face global Default ${grey_light},${black_light}
+ face global PrimarySelection white,blue+fg
+ face global SecondarySelection black,blue+fg
+ face global PrimaryCursor black,white+fg
+ face global SecondaryCursor black,white+fg
+ face global PrimaryCursorEol black,${cyan_light}+fg
+ face global SecondaryCursorEol black,${cyan_light}+fg
+ face global LineNumbers ${grey_light},${black_lighter}
+ face global LineNumberCursor ${grey_light},rgb:282828+b
+ face global MenuForeground ${grey_light},blue
+ face global MenuBackground blue,${grey_light}
+ face global MenuInfo ${cyan_light}
+ face global Information ${black_light},${cyan_light}
+ face global Error ${grey_light},${magenta_light}
+ face global DiagnosticError ${magenta_light}
+ face global DiagnosticWarning ${cyan_light}
+ face global StatusLine ${grey_light},${black_lighterer}
+ face global StatusLineMode ${orange_dark}
+ face global StatusLineInfo ${cyan_light}
+ face global StatusLineValue ${green_dark}
+ face global StatusCursor ${black_lighterer},${cyan_light}
+ face global Prompt ${black_light},${cyan_light}
+ face global MatchingChar ${cyan_light},${black_light}+b
+ face global BufferPadding ${cyan_light},${black_lighter}
+ face global Whitespace ${grey_dark}+f
+ "
+}
--- /dev/null
+# Clipboard (wayland) integration
+hook global NormalKey y %{ nop %sh{
+ printf %s "$kak_main_reg_dquote" | wl-copy > /dev/null 2>&1 &
+}}
+
+
+# Enable PLUGin manager
+# ─────────────────────
+source "%val{config}/plugins/plug.kak/rc/plug.kak"
+plug "andreyorst/plug.kak" noload
+ plug "Ersikan/bookmarks.kak" %{
+ hook global WinCreate .* bookmarks-enable
+ }
+ plug "andreyorst/smarttab.kak" defer smarttab %{
+ # when 'backspace' is pressed, 4 spaces are deleted at once
+ set-option global softtabstop 4
+ } config %{
+ hook global WinSetOption filetype=(rust|markdown|kak|lisp|scheme|py|sh|perl) expandtab
+ hook global WinSetOption filetype=(makefile|gas) noexpandtab
+ hook global WinSetOption filetype=(c|cpp) smarttab
+ }
+ plug "whereswaldon/shellcheck.kak"
+ plug "kakounedotcom/prelude.kak"
+ plug "occivink/kakoune-find"
+ plug "https://git.sr.ht/~nasmevka/dabruin.kak"
+ plug "https://github.com/enricozb/tabs.kak"
+
+# Look and Feel
+# ─────────────
+set-option global tabs_modelinefmt '%val{cursor_line}:%val{cursor_char_column} {{mode_info}} '
+set-option global tabs_options --minified
+
+add-highlighter global/trailing-whitespace regex '\h+$' 0:Error # trailing whitespaces in red
+add-highlighter global/todos regex '(//|#|/\*)\h*(TODO|WARNING|FIXME)[:]?[^\n]*' 2:+bu # highlight comment tags
+add-highlighter global/ show-matching # show matching brackets
+add-highlighter global/ number-lines -min-digits 3 # absolute line nums everywhere
+colorscheme dabruin
+set-option global tabstop 4
+set-option global indentwidth 4
+
+# dynamic scrolloff
+# ─────────────────
+hook global WinCreate [^*].* %{
+ hook -once window WinDisplay .* %{
+ hook window WinResize [0-9]*\.[0-9]* %{
+ set-option window scrolloff %sh{
+ printf '%u,%u' "$(($kak_window_height / 6))" "$(($kak_window_width / 8))"
+ }
+ }
+ }
+}
+
+# Different Cursor color in insert mode
+# ─────────────────────────────────────
+# Shades of blue/cyan for normal mode
+set-face global PrimarySelection white,blue+F
+set-face global SecondarySelection black,blue+F
+set-face global PrimaryCursor black,bright-cyan+F
+set-face global SecondaryCursor black,bright-blue+F
+set-face global PrimaryCursorEol black,bright-cyan
+set-face global SecondaryCursorEol black,bright-blue
+
+# Shades of green/yellow for insert mode.
+hook global ModeChange (push|pop):.*:insert %{
+ set-face window PrimarySelection white,green+F
+ set-face window SecondarySelection black,green+F
+ set-face window PrimaryCursor black,bright-yellow+F
+ set-face window SecondaryCursor black,bright-green+F
+ set-face window PrimaryCursorEol black,bright-yellow
+ set-face window SecondaryCursorEol black,bright-green
+}
+
+# Undo colour changes when we leave insert mode.
+hook global ModeChange (push|pop):insert:.* %{
+ unset-face window PrimarySelection
+ unset-face window SecondarySelection
+ unset-face window PrimaryCursor
+ unset-face window SecondaryCursor
+ unset-face window PrimaryCursorEol
+ unset-face window SecondaryCursorEol
+}
+
+# Enable editor config
+# ────────────────────
+hook global WinCreate ^[^*]+$ %{ editorconfig-load }
+
+# Extra editor commands
+# ─────────────────────
+# tab replacement
+define-command clean-selections -docstring 'Replace tabs with spaces and trim trailing whitespace' %{ try %{
+ execute-keys -draft @s\h+$<ret>d
+} }
+define-command clean-buffer -docstring 'Replace tabs with spaces and trim trailing whitespace' %{ try %{
+ execute-keys -draft \%@s\h+$<ret>d
+} }
+# Bring back <c-a> and <c-x> from Vim to increment/decrement the number under the cursor
+define-command -hidden -params 2 inc %{ try %{
+ evaluate-commands %sh{
+ [ "$1" = 0 ] && count=1 || count="$1"
+ printf '%s%s' 'exec h"_/\d<ret><a-i>na' "$2($count)<esc>|{<space>cat<semicolon>echo<semicolon>}|bc<ret>"
+ }
+} catch %{
+ execute-keys l
+}}
+
+
+# Various mappings
+# ────────────────
+map global normal '#' :comment-line<ret> -docstring 'comment line'
+map global normal '<a-#>' :comment-block<ret> -docstring 'comment block'
+map global goto m '<esc>m;' -docstring 'matching char'
+map -docstring 'select lines downwards' global normal X T<ret>Lx
+# see #inc
+map global normal <c-a> ': inc %val{count} +<ret>'
+map global normal <c-x> ': inc %val{count} -<ret>'
+map global normal Q q # map q to Q
+map global normal q -docstring 'tabs mode' ': enter-user-mode tabs<ret>' # map q to tabs mode
+
+# default user mode
+# # ──────────
+map global user -docstring 'enable autocomplete' a ': set-option -add buffer autocomplete insert<ret>'
+map global user -docstring 'disable autocomplete' A ': set-option -remove buffer autocomplete insert<ret>'
+map global user -docstring 'edit kakrc' e ': e ~/.config/kak/kakrc<ret>'
+map global user -docstring 'clean tabs and trailing whitespace in selections' c ': clean-selections<ret>'
+map global user -docstring 'clean tabs and trailing whitespace in the buffer' C ': clean-buffer<ret>'
+map global user -docstring 'buffer backward' b ': buffer-previous<ret>'
+map global user -docstring 'buffer forward' n ': buffer-next<ret>'
+map global user -docstring 'lint-buffer' L ': buffer *lint-output*<ret>'
+map global user -docstring 'relative line numbers enable' r ': add-highlighter window/nl number-lines -relative -hlcursor<ret>'
+map global user -docstring 'relative line numbers disable' R ': remove-highlighter window/nl<ret>'
+map global user -docstring 'wrap enable' w ': add-highlighter buffer/bw wrap<ret>'
+map global user -docstring 'wrap disable' W ': remove-highlighter buffer/bw<ret>'
+
+# tabs user mode
+# # ──────────
+map global normal <c-p> -docstring 'kks mode' ': enter-user-mode kks<ret>'
+
+
+# suspend and resume
+# # ──────────
+def suspend-and-resume \
+ -params 1..2 \
+ -docstring 'suspend-and-resume <cli command> [<kak command after resume>]: backgrounds current kakoune client and runs specified cli command. Upon exit of command the optional kak command is executed.' \
+ %{ evaluate-commands %sh{
+
+ # Note we are adding '&& fg' which resumes the kakoune client process after the cli command exits
+ cli_cmd="$1 && fg"
+ post_resume_cmd="$2"
+
+ # automation is different platform to platform
+ platform=$(uname -s)
+ case $platform in
+ Darwin)
+ automate_cmd="sleep 0.01; osascript -e 'tell application \"System Events\" to keystroke \"$cli_cmd\" & return '"
+ kill_cmd="/bin/kill"
+ break
+ ;;
+ Linux)
+ automate_cmd="sleep 0.2; xdotool type '$cli_cmd'; xdotool key Return"
+ kill_cmd="/usr/bin/kill"
+ break
+ ;;
+ esac
+
+ # Uses platforms automation to schedule the typing of our cli command
+ nohup sh -c "$automate_cmd" > /dev/null 2>&1 &
+ # Send kakoune client to the background
+ $kill_cmd -SIGTSTP $kak_client_pid
+
+ # ...At this point the kakoune client is paused until the " && fg " gets run in the $automate_cmd
+
+ # Upon resume, run the kak command is specified
+ if [ ! -z "$post_resume_cmd" ]; then
+ echo "$post_resume_cmd"
+ fi
+}}
+
+def for-each-line \
+ -docstring "for-each-line <command> <path to file>: run command with the value of each line in the file" \
+ -params 2 \
+ %{ evaluate-commands %sh{
+
+ while read f; do
+ printf "$1 $f\n"
+ done < "$2"
+}}
+
+def toggle-ranger %{
+ suspend-and-resume \
+ "ranger --choosefiles=/tmp/ranger-files-%val{client_pid}" \
+ "for-each-line edit /tmp/ranger-files-%val{client_pid}"
+}
+
+map global user f ': toggle-ranger<ret>' -docstring 'select files in ranger'
+
+
+# run on file open
+# ─────────────
+hook global BufOpenFile .* %{
+ modeline-parse
+}
+