From d422bc2b77ece72be1098bf05728275ef3306ee5 Mon Sep 17 00:00:00 2001 From: venomade Date: Wed, 8 Apr 2026 15:07:12 +0100 Subject: Before the Return of the Mac Asahi Bugs - Forked GL is very annoying to deal with - Fairydust branch requires 8GB of RAM for display - AArch64 Linux is not very compatible with much software - DRM and other video related things are buggy/do not work - Updating can often break fairydust --- config/kak/autoload/auto-pairs | 1 + config/kak/autoload/fzf.kak | 1 + config/kak/autoload/kak-ansi | 1 + config/kak/autoload/kak-harpoon | 1 + config/kak/autoload/kakboard | 1 + config/kak/autoload/kakoune-focus | 1 + config/kak/autoload/kakoune-state-save | 1 + config/kak/autoload/kakoune-sudo-write | 1 + config/kak/autoload/kakpipe | 1 + config/kak/autoload/nanoline.kak | 1 + config/kak/autoload/standard-library | 1 + config/kak/colemak.kak | 38 ++++ config/kak/colors/black_mocha.kak | 82 ++++++++ config/kak/colors/modus-vivendi.kak | 210 +++++++++++++++++++ config/kak/compilation-mode.kak | 61 ++++++ config/kak/compilation-mode_classic.kak | 20 ++ config/kak/kakrc | 357 ++++++++++++++++++++++++++++++++ 17 files changed, 779 insertions(+) create mode 160000 config/kak/autoload/auto-pairs create mode 160000 config/kak/autoload/fzf.kak create mode 160000 config/kak/autoload/kak-ansi create mode 160000 config/kak/autoload/kak-harpoon create mode 160000 config/kak/autoload/kakboard create mode 160000 config/kak/autoload/kakoune-focus create mode 160000 config/kak/autoload/kakoune-state-save create mode 160000 config/kak/autoload/kakoune-sudo-write create mode 160000 config/kak/autoload/kakpipe create mode 160000 config/kak/autoload/nanoline.kak create mode 120000 config/kak/autoload/standard-library create mode 100644 config/kak/colemak.kak create mode 100644 config/kak/colors/black_mocha.kak create mode 100644 config/kak/colors/modus-vivendi.kak create mode 100644 config/kak/compilation-mode.kak create mode 100644 config/kak/compilation-mode_classic.kak create mode 100644 config/kak/kakrc (limited to 'config/kak') diff --git a/config/kak/autoload/auto-pairs b/config/kak/autoload/auto-pairs new file mode 160000 index 0000000..e812ee6 --- /dev/null +++ b/config/kak/autoload/auto-pairs @@ -0,0 +1 @@ +Subproject commit e812ee6006b1c3d8c9afa45a0a90d28714636f81 diff --git a/config/kak/autoload/fzf.kak b/config/kak/autoload/fzf.kak new file mode 160000 index 0000000..8fcce0c --- /dev/null +++ b/config/kak/autoload/fzf.kak @@ -0,0 +1 @@ +Subproject commit 8fcce0c9fcea36d2371877eea4045ac26ad76983 diff --git a/config/kak/autoload/kak-ansi b/config/kak/autoload/kak-ansi new file mode 160000 index 0000000..14feefb --- /dev/null +++ b/config/kak/autoload/kak-ansi @@ -0,0 +1 @@ +Subproject commit 14feefb47012bb03dcbbbc920cc51f54f4eee4b4 diff --git a/config/kak/autoload/kak-harpoon b/config/kak/autoload/kak-harpoon new file mode 160000 index 0000000..28e2019 --- /dev/null +++ b/config/kak/autoload/kak-harpoon @@ -0,0 +1 @@ +Subproject commit 28e2019d4a619e3a4a14d420177532a82c7903f3 diff --git a/config/kak/autoload/kakboard b/config/kak/autoload/kakboard new file mode 160000 index 0000000..5759dcc --- /dev/null +++ b/config/kak/autoload/kakboard @@ -0,0 +1 @@ +Subproject commit 5759dcc5af593ff88a7faecc41a8f549ec440771 diff --git a/config/kak/autoload/kakoune-focus b/config/kak/autoload/kakoune-focus new file mode 160000 index 0000000..d39ee2f --- /dev/null +++ b/config/kak/autoload/kakoune-focus @@ -0,0 +1 @@ +Subproject commit d39ee2f1dcf450f5c8b05c6bfda0227e9b985d98 diff --git a/config/kak/autoload/kakoune-state-save b/config/kak/autoload/kakoune-state-save new file mode 160000 index 0000000..e8b6c26 --- /dev/null +++ b/config/kak/autoload/kakoune-state-save @@ -0,0 +1 @@ +Subproject commit e8b6c269ac91eab45b0fe0d2b1f5dd49515ecd00 diff --git a/config/kak/autoload/kakoune-sudo-write b/config/kak/autoload/kakoune-sudo-write new file mode 160000 index 0000000..ec0d6d2 --- /dev/null +++ b/config/kak/autoload/kakoune-sudo-write @@ -0,0 +1 @@ +Subproject commit ec0d6d26ceaadd93d6824630ba587b31e442214d diff --git a/config/kak/autoload/kakpipe b/config/kak/autoload/kakpipe new file mode 160000 index 0000000..7f29ee3 --- /dev/null +++ b/config/kak/autoload/kakpipe @@ -0,0 +1 @@ +Subproject commit 7f29ee36b26cf1a6aab2ceb74a9d46f71de11f27 diff --git a/config/kak/autoload/nanoline.kak b/config/kak/autoload/nanoline.kak new file mode 160000 index 0000000..a7c5773 --- /dev/null +++ b/config/kak/autoload/nanoline.kak @@ -0,0 +1 @@ +Subproject commit a7c5773e592fbc62341e4f34bf78ee5d0d44c5c4 diff --git a/config/kak/autoload/standard-library b/config/kak/autoload/standard-library new file mode 120000 index 0000000..24049f7 --- /dev/null +++ b/config/kak/autoload/standard-library @@ -0,0 +1 @@ +/nix/store/kr84jgb3bfca47m0njizy2pi61adh2wk-kakoune-2025.06.03/share/kak/rc \ No newline at end of file diff --git a/config/kak/colemak.kak b/config/kak/colemak.kak new file mode 100644 index 0000000..e4af6ff --- /dev/null +++ b/config/kak/colemak.kak @@ -0,0 +1,38 @@ +map global normal n j +map global normal +map global normal +map global normal e k +map global normal i l +map global normal I L +map global normal +map global normal + +map global normal j n +map global normal +map global normal +map global normal J N +map global normal l i +map global normal +map global normal + +map global normal k e +map global normal K E +map global normal +map global normal +map global normal +map global normal + +# Select whole lines when moving selection with J or K +map global normal N Jx +map global normal E Kx + +# Make I insert before every line +map global normal L "I" + +map global goto l '' +map global goto i l -docstring 'line end' +map global goto j '' +map global goto n j -docstring 'buffer bottom' +map global goto e '' +map global goto k '' +map global goto e k -docstring 'buffer top' diff --git a/config/kak/colors/black_mocha.kak b/config/kak/colors/black_mocha.kak new file mode 100644 index 0000000..518400b --- /dev/null +++ b/config/kak/colors/black_mocha.kak @@ -0,0 +1,82 @@ +# Black Mocha + +evaluate-commands %sh{ + rosewater='rgb:f5e0dc' + flamingo='rgb:f2cdcd' + pink='rgb:f5c2e7' + mauve='rgb:cba6f7' + red='rgb:f38ba8' + maroon='rgb:eba0ac' + peach='rgb:fab387' + yellow='rgb:f9e2af' + green='rgb:a6e3a1' + teal='rgb:94e2d5' + sky='rgb:89dceb' + sapphire='rgb:74c7ec' + blue='rgb:89b4fa' + lavender='rgb:b4befe' + text='rgb:cdd6f4' + subtext1='rgb:bac2de' + subtext0='rgb:a6adc8' + overlay2='rgb:9399b2' + overlay1='rgb:7f849c' + overlay0='rgb:6c7086' + surface2='rgb:585b70' + surface1='rgb:45475a' + surface0='rgb:313244' + base='rgb:000000' + mantle='rgb:181825' + crust='rgb:11111b' + + echo " + set-face global title ${text}+b + set-face global header ${subtext0}+b + set-face global bold ${maroon}+b + set-face global italic ${maroon}+i + set-face global mono ${green} + set-face global block ${sapphire} + set-face global link ${blue} + set-face global bullet ${peach} + set-face global list ${peach} + + set-face global Default ${text},${base} + set-face global PrimarySelection ${text},${surface2} + set-face global SecondarySelection ${text},${surface2} + set-face global PrimaryCursor ${crust},${rosewater} + set-face global SecondaryCursor ${text},${overlay0} + set-face global PrimaryCursorEol ${surface2},${lavender} + set-face global SecondaryCursorEol ${surface2},${overlay1} + set-face global LineNumbers ${overlay1},${base} + set-face global LineNumbersWrapped ${base},${base} + set-face global LineNumberCursor ${lavender},${base}+b + set-face global MenuForeground ${text},${surface1}+b + set-face global MenuBackground ${text},${surface0} + set-face global MenuInfo ${crust},${teal} + set-face global Information ${crust},${teal} + set-face global Error ${crust},${red} + set-face global StatusLine ${text},${mantle} + set-face global StatusLineMode ${crust},${yellow} + set-face global StatusLineInfo ${crust},${teal} + set-face global StatusLineValue ${crust},${yellow} + set-face global StatusCursor ${crust},${rosewater} + set-face global Prompt ${teal},${base}+b + set-face global MatchingChar ${maroon},${base} + set-face global Whitespace ${overlay1},${base}+f + set-face global WrapMarker Whitespace + set-face global BufferPadding ${base},${base} + + set-face global value ${peach} + set-face global type ${blue} + set-face global variable ${text} + set-face global module ${maroon} + set-face global function ${blue} + set-face global string ${green} + set-face global keyword ${mauve} + set-face global operator ${sky} + set-face global attribute ${green} + set-face global comment ${overlay0} + set-face global documentation comment + set-face global meta ${yellow} + set-face global builtin ${red} + " +} diff --git a/config/kak/colors/modus-vivendi.kak b/config/kak/colors/modus-vivendi.kak new file mode 100644 index 0000000..32930b9 --- /dev/null +++ b/config/kak/colors/modus-vivendi.kak @@ -0,0 +1,210 @@ +# Modus-Vivendi theme for Kakoune + +# Color palette +# declare-option str black default +declare-option str bg_main 'default' +declare-option str bg_terminal_main 'rgb:000000' +declare-option str fg_main 'rgb:ffffff' +declare-option str bg_dim 'rgb:1e1e1e' +declare-option str fg_dim 'rgb:989898' +declare-option str bg_alt 'rgb:000000' +declare-option str fg_alt 'rgb:c6daff' +declare-option str bg_active 'rgb:535353' +declare-option str bg_inactive 'rgb:303030' +declare-option str red 'rgb:ff5f59' +declare-option str red_bright 'rgb:ff7f86' +declare-option str green 'rgb:44bc44' +declare-option str green_bright 'rgb:00c06f' +declare-option str yellow 'rgb:d0bc00' +declare-option str yellow_bright 'rgb:dfaf7a' +declare-option str blue 'rgb:2fafff' +declare-option str blue_bright 'rgb:00bcff' +declare-option str purple 'rgb:feacd0' +declare-option str purple_bright 'rgb:b6a0ff' +declare-option str bg_mode_line 'rgb:000000' +declare-option str fg_mode_line 'rgb:cdd6f4' +declare-option str cursor 'rgb:ffffff' +declare-option str bg_hl_line 'rgb:2f3849' +declare-option str fg_space 'rgb:646464' +declare-option str magenta_warmer 'rgb:f78fe7' +declare-option str blue_warmer 'rgb:79a8ff' +declare-option str cyan 'rgb:00d3d0' +declare-option str cyan_warmer 'rgb:4ae2f0' +declare-option str cyan_cooler 'rgb:6ae4b9' +declare-option str red_faint 'rgb:ff9580' +declare-option str green_faint 'rgb:88ca9f' +declare-option str yellow_faint 'rgb:d2b580' +declare-option str blue_faint 'rgb:82b0ec' +declare-option str magenta_faint 'rgb:caa6df' +declare-option str cyan_faint 'rgb:9ac8e0' +declare-option str fg_link 'rgb:79a8ff' +declare-option str fg_prose_code 'rgb:6ae4b9' + +declare-option str psel 'rgb:5a5a5a' +declare-option str ssel 'rgb:2f3849' + +# Reference +# https://github.com/mawww/kakoune/blob/master/colors/default.kak +# For code +set-face global value 'rgb:ffffff' +set-face global type 'rgb:6ae4b9' +set-face global variable 'rgb:00d3d0' +set-face global keyword 'rgb:b6a0ff' +set-face global module 'rgb:ffffff' +set-face global function 'rgb:feacd0' +set-face global string 'rgb:79a8ff' +set-face global builtin 'rgb:f78fe7' +set-face global constant 'rgb:00bcff' +set-face global comment 'rgb:989898' +set-face global meta 'rgb:ff7f86' + +set-face global operator 'rgb:ffffff' +set-face global comma 'rgb:ffffff' +set-face global bracket 'rgb:2f7f9f' + +# For markup +set-face global title "%opt{fg_main}+b" +set-face global header "%opt{fg_main}+b" +set-face global bold "%opt{fg_main}+b" +set-face global italic "%opt{fg_main}+i" +set-face global mono "%opt{fg_prose_code}" +set-face global block "%opt{fg_dim}" +set-face global link "%opt{fg_link}+u" +set-face global bullet "%opt{fg_dim}" +set-face global list "%opt{fg_main}" + +# Builtin faces +#set-face global Default "%opt{fg_main},%opt{bg_main}" +set-face global Default "%opt{fg_main},default" +set-face global PrimarySelection "default,%opt{psel}" +set-face global SecondarySelection "default,%opt{ssel}" +set-face global PrimaryCursor "%opt{bg_terminal_main},%opt{cursor}" +set-face global SecondaryCursor "%opt{bg_terminal_main},%opt{fg_alt}" +set-face global PrimaryCursorEol "%opt{bg_terminal_main},%opt{red_bright}" +set-face global SecondaryCursorEol "%opt{bg_terminal_main},%opt{blue}" +set-face global LineNumbers "%opt{fg_dim},%opt{bg_main}" +set-face global LineNumberCursor "%opt{fg_alt},%opt{bg_main}+b" +set-face global LineNumbersWrapped "%opt{bg_dim},%opt{bg_main}+i" +set-face global MenuForeground "%opt{bg_terminal_main},%opt{fg_main}+b" +set-face global MenuBackground "%opt{fg_main},%opt{bg_alt}" +set-face global MenuInfo "%opt{fg_alt},%opt{bg_alt}" +set-face global Information "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global Error "%opt{red},%opt{bg_mode_line}" +set-face global StatusLine "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global StatusLineMode "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global StatusLineInfo "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global StatusLineValue "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global StatusCursor "%opt{fg_main},%opt{blue}" +set-face global Prompt "%opt{fg_mode_line},%opt{bg_mode_line}" +set-face global MatchingChar "%opt{blue},%opt{bg_main}" +set-face global Whitespace "%opt{fg_space},%opt{bg_main}+f" +set-face global WrapMarker Whitespace +set-face global BufferPadding "%opt{bg_terminal_main},%opt{bg_main}" + +# For tree-sitter (kak-tree-sitter) +# -- Keywords -- +set-face global ts_keyword "%opt{purple_bright}" +set-face global ts_keyword_conditional "%opt{purple_bright}+i" +set-face global ts_keyword_control_conditional "%opt{purple_bright}+i" +set-face global ts_keyword_control_import "%opt{purple_bright}+i" +set-face global ts_keyword_directive "%opt{red_bright}+i" +set-face global ts_keyword_storage "%opt{purple_bright}" +set-face global ts_keyword_storage_modifier "%opt{purple_bright}" +set-face global ts_keyword_storage_modifier_mut "%opt{purple_bright}" +set-face global ts_keyword_storage_modifier_ref "%opt{cyan_cooler}" + +# -- Functions -- +set-face global ts_function "%opt{purple}" +set-face global ts_function_builtin "%opt{magenta_warmer}+i" +set-face global ts_function_macro "%opt{red_bright}" +set-face global ts_function_method "%opt{purple}" + +# -- Types -- +set-face global ts_type "%opt{cyan_cooler}" +set-face global ts_type_builtin "%opt{cyan_cooler}" +set-face global ts_type_enum_variant "%opt{cyan_warmer}" +set-face global ts_type_parameter "%opt{cyan}+i" +set-face global ts_constructor "%opt{cyan_cooler}" + +# -- Strings -- +set-face global ts_string "%opt{blue_warmer}" +set-face global ts_string_regexp "%opt{green_bright}" +set-face global ts_string_escape "%opt{purple}" +set-face global ts_string_special "%opt{blue}" +set-face global ts_string_special_path "%opt{green_bright}" +set-face global ts_string_special_symbol "%opt{purple_bright}" +set-face global ts_string_symbol "%opt{red_bright}" + +# -- Constants -- +set-face global ts_constant "%opt{blue_bright}" +set-face global ts_constant_builtin "%opt{blue_bright}" +set-face global ts_constant_builtin_boolean "%opt{blue_bright}" +set-face global ts_constant_character "%opt{blue_bright}" +set-face global ts_constant_macro "%opt{red_bright}" +set-face global ts_constant_numeric "%opt{fg_main}" + +# -- Variables -- +set-face global ts_variable "%opt{cyan}" +set-face global ts_variable_builtin "%opt{purple_bright}" +set-face global ts_variable_other_member "%opt{cyan_warmer}" +set-face global ts_variable_parameter "%opt{cyan}+i" + +# -- Comments & operators -- +set-face global ts_comment "%opt{fg_dim}" +set-face global ts_comment_unused "%opt{fg_dim}+s" +set-face global ts_operator "%opt{fg_main}" +set-face global ts_punctuation "%opt{fg_main}" +set-face global ts_punctuation_special "%opt{purple_bright}" + +# -- Properties, namespaces, labels -- +set-face global ts_property "%opt{cyan}" +set-face global ts_namespace "%opt{cyan}+i" +set-face global ts_label "%opt{cyan}+i" +set-face global ts_attribute "%opt{red_bright}" + +# -- Markup -- +set-face global ts_markup_bold "%opt{fg_main}+b" +set-face global ts_markup_italic "%opt{fg_main}+i" +set-face global ts_markup_strikethrough "%opt{fg_dim}+s" +set-face global ts_markup_heading "%opt{fg_main}+b" +set-face global ts_markup_heading_1 "%opt{fg_main}+b" +set-face global ts_markup_heading_2 "%opt{yellow_faint}+b" +set-face global ts_markup_heading_3 "%opt{blue_faint}+b" +set-face global ts_markup_heading_4 "%opt{purple}+b" +set-face global ts_markup_heading_5 "%opt{green_faint}+b" +set-face global ts_markup_heading_6 "%opt{red_faint}+b" +set-face global ts_markup_heading_marker "%opt{fg_dim}" +set-face global ts_markup_list_checked "%opt{fg_dim}" +set-face global ts_markup_list_numbered "%opt{fg_dim}" +set-face global ts_markup_list_unchecked "%opt{fg_dim}" +set-face global ts_markup_list_unnumbered "%opt{fg_dim}" +set-face global ts_markup_link_label "%opt{fg_link}" +set-face global ts_markup_link_url "%opt{fg_alt}" +set-face global ts_markup_link_uri "%opt{fg_alt}" +set-face global ts_markup_link_text "%opt{fg_link}+u" +set-face global ts_markup_quote "%opt{fg_main}+i" +set-face global ts_markup_raw "%opt{fg_prose_code}" + +# -- Diff -- +set-face global ts_diff_plus "%opt{green}" +set-face global ts_diff_minus "%opt{red}" +set-face global ts_diff_delta "%opt{blue}" +set-face global ts_diff_delta_moved "%opt{purple_bright}" + +# -- Diagnostics -- +set-face global ts_error "%opt{red}+b" +set-face global ts_warning "%opt{yellow}+b" +set-face global ts_hint "%opt{blue}+b" +set-face global ts_info "%opt{green}+b" + +# -- Others -- +set-face global ts_embedded "%opt{purple_bright}" +set-face global ts_include "%opt{purple_bright}" +set-face global ts_load "%opt{purple_bright}" +set-face global ts_tag "%opt{purple_bright}" +set-face global ts_tag_error "%opt{red}" +set-face global ts_text "%opt{fg_main}" +set-face global ts_text_title "%opt{fg_main}+b" +set-face global ts_conceal "%opt{fg_dim}+i" +set-face global ts_special "%opt{blue}" +set-face global ts_spell "%opt{fg_main}" diff --git a/config/kak/compilation-mode.kak b/config/kak/compilation-mode.kak new file mode 100644 index 0000000..bdbb5e2 --- /dev/null +++ b/config/kak/compilation-mode.kak @@ -0,0 +1,61 @@ +# Requires kakpipe and unbuffer + +declare-option -docstring "The last command ran in compilation-mode +"\ +str compile_last_command "" + +declare-option -docstring "How the compile buffer should be displayed +Options: + 'default': Create a new buffer in the current kakoune window + 'new': Create a new window via ':terminal' + 'tmux_vertical': Create a tmux vertical split + 'tmux_horizontal': Create a tmux horizontal split + 'tmux_popup': Create a tmux popup window +"\ +str compile_run_mode "default" + +define-command -hidden -params 1.. compile-exec %{ + evaluate-commands %sh{ + case "$kak_opt_compile_run_mode" in + default) + exec kakpipe fifo -s "$kak_session" -- unbuffer "$@" + ;; + new) + printf 'terminal kak -e "set-option global compile_run_mode default; compile %s"\n' "$*" + ;; + tmux_vertical|tmux_horizontal|tmux_popup) + if [ -z "$kak_client_env_TMUX" ]; then + echo 'fail "tmux is not running"' + exit + fi + case "$kak_opt_compile_run_mode" in + tmux_vertical) + tmux_args="split-window -t '${kak_client_env_TMUX_PANE}' -v" + ;; + tmux_horizontal) + tmux_args="split-window -t '${kak_client_env_TMUX_PANE}' -h" + ;; + tmux_popup) + tmux_args="popup -E -t '${kak_client_env_TMUX_PANE}'" + ;; + esac + printf "nop %%sh{ tmux %s kak -e 'set-option global compile_run_mode default; compile %s' }\n" "$tmux_args" "$*" + ;; + esac + } +} + +define-command -docstring "Compile: run a command in a fifo buffer" compile -params 1.. %{ + set-option global compile_last_command "%arg{@}" + compile-exec %arg{@} +} + +define-command -docstring "Recompile: re-run the last compile command" recompile %{ + evaluate-commands %sh{ + if [ -z "$kak_opt_compile_last_command" ]; then + echo 'fail "No previous compile command"' + else + echo "compile-exec $kak_opt_compile_last_command" + fi + } +} diff --git a/config/kak/compilation-mode_classic.kak b/config/kak/compilation-mode_classic.kak new file mode 100644 index 0000000..348fcf0 --- /dev/null +++ b/config/kak/compilation-mode_classic.kak @@ -0,0 +1,20 @@ +# Requires kakpipe and unbuffer + +declare-option str compile_last_command "" + +define-command -docstring "Compile: run a command in a fifo buffer" compile -params 1.. %{ + set-option global compile_last_command "%arg{@}" + evaluate-commands %sh{ exec kakpipe fifo -s $kak_session -- unbuffer "$@" } +} + +define-command -docstring "Recompile: re-run the last compile command" recompile %{ + evaluate-commands %sh{ + if [ -z "$kak_opt_compile_last_command" ]; then + echo 'fail "No previous compile command"' + else + exec kakpipe fifo -s $kak_session -- unbuffer $kak_opt_compile_last_command + fi + } +} + + diff --git a/config/kak/kakrc b/config/kak/kakrc new file mode 100644 index 0000000..06bf35c --- /dev/null +++ b/config/kak/kakrc @@ -0,0 +1,357 @@ +# 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 -- cgit 1.4.1-2-gfad0