about summary refs log tree commit diff
path: root/config/kak/kakrc
diff options
context:
space:
mode:
authorvenomade <venomade@venomade.com>2026-04-08 15:07:12 +0100
committervenomade <venomade@venomade.com>2026-04-08 15:07:12 +0100
commitd422bc2b77ece72be1098bf05728275ef3306ee5 (patch)
tree8b6b6f0da228dc99f36d91cf7841c425963e73f5 /config/kak/kakrc
parenta6543a0ba0e5399515e3dbe507a8bd12958839cc (diff)
Before the Return of the Mac HEAD master
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
Diffstat (limited to 'config/kak/kakrc')
-rw-r--r--config/kak/kakrc357
1 files changed, 357 insertions, 0 deletions
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+$<ret>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<ret>' -docstring 'buffer...'
+map global buffer-mode d ':delete-buffer<ret>'        -docstring 'delete buffer'
+map global buffer-mode k ':delete-buffer!<ret>'       -docstring 'kill buffer'
+map global buffer-mode n ':buffer-next<ret>'          -docstring 'next buffer'
+map global buffer-mode p ':buffer-previous<ret>'      -docstring 'previous buffer'
+
+# map global buffer-mode b '<esc>:prompt -buffer-completion buffer: %{ buffer %val{text} }<ret>' -docstring 'switch buffer'
+
+# Comment line
+map global normal "#" ":comment-line<ret>"
+
+# File Keybinds
+declare-user-mode file-mode
+map global user f ':enter-user-mode file-mode<ret>' -docstring 'file...'
+# map global file-mode f '<esc>:prompt -shell-script-candidates %{ fd --type f } file: %{ edit %val{text} }<ret>' -docstring "find file"
+map global file-mode c ':e ~/.config/kak/kakrc<ret>'                        -docstring 'open config'
+map global file-mode t ':e ~/Documents/Notes/TODO.md<ret>'                  -docstring 'open todo'
+
+# Search case-insensitive by default
+map global normal "/" "/(?Si)"
+map global normal "?" "?(?Si)"
+map global normal "<a-/>" "<a-/>(?Si)"
+map global normal "<a-?>" "<a-?>(?Si)"
+
+# Select inner line
+map global normal X x_
+
+# Use tab for autocomplete
+# hook global InsertCompletionShow .* %{
+#     try %{
+#         execute-keys -draft 'h<a-K>\h<ret>'
+#         map window insert <tab> <c-n>
+#         map window insert <s-tab> <c-p>
+#         hook -once -always window InsertCompletionHide .* %{
+#             unmap window insert <tab> <c-n>
+#             unmap window insert <s-tab> <c-p>
+#         }
+#     }
+# }
+
+# Tab jumps to next snippet placeholder by default in insert mode
+map global insert <tab> '<esc>: lsp-snippets-select-next-placeholders<ret>i'
+map global insert <s-tab> '<esc>: lsp-snippets-select-next-placeholders<ret>i'  # 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<a-K>\h<ret>'
+        try %{
+            eval %sh{ [ -n "${kak_opt_lsp_snippets_placeholder_groups}" ] && echo "fail" }
+            map window insert <tab> <c-n>
+            map window insert <s-tab> <c-p>
+            hook -once -always window InsertCompletionHide .* %{
+                unmap window insert <tab> <c-n>
+                unmap window insert <s-tab> <c-p>
+            }
+        }
+    }
+}
+
+# Map tab and shift-tab to indent and dedent in normal mode
+map global normal <tab> '>'
+map global normal <s-tab> '<'
+
+# Terminal related bindings
+declare-user-mode terminal-mode
+map global user t ':enter-user-mode terminal-mode<ret>' -docstring 'terminal...'
+map global terminal-mode t ':terminal zsh<ret>' -docstring 'open terminal'
+map global terminal-mode s ':tmux-repl-horizontal <ret>' -docstring 'open terminal split (H)'
+map global terminal-mode v ':tmux-repl-vertical<ret>' -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 <esc>:smart-gh<ret> -docstring 'line begin (smart)'
+
+# Window Management
+declare-user-mode window-mode
+map global user w ':enter-user-mode window-mode<ret>' -docstring 'window...'
+map global window-mode s ':tmux-terminal-horizontal kak -c %val{session}<ret>' -docstring 'open window split (H)'
+map global window-mode v ':tmux-terminal-vertical kak -c %val{session}<ret>' -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<ret>' -docstring 'lsp...'
+
+map global goto d <esc>:lsp-definition<ret> -docstring 'LSP definition'
+map global goto r <esc>:lsp-references<ret> -docstring 'LSP references'
+map global goto y <esc>:lsp-type-definition<ret> -docstring 'LSP type definition'
+
+map global insert <tab> '<a-;>:try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks <lt>tab> }<ret>' -docstring 'Select next snippet placeholder'
+
+map global object a '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
+map global object <a-a> '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
+map global object f '<a-semicolon>lsp-object Function Method<ret>' -docstring 'LSP function or method'
+map global object t '<a-semicolon>lsp-object Class Interface Module Namespace Struct<ret>' -docstring 'LSP class or module'
+map global object d '<a-semicolon>lsp-diagnostic-object error warning<ret>' -docstring 'LSP errors and warnings'
+map global object D '<a-semicolon>lsp-diagnostic-object error<ret>' -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<ret>'             -docstring 'find file'
+map global file-mode p ':require-module fzf-file; fzf-file buffile-dir<ret>' -docstring 'find file at path'
+map global file-mode g ':require-module fzf-grep; fzf-grep<ret>'             -docstring 'grep files'
+map global file-mode d ':require-module fzf-cd; fzf-cd<ret>'                 -docstring 'change directory'
+map global file-mode / ':require-module fzf-search; fzf-buffer-search<ret>'  -docstring 'search current file'
+
+map global buffer-mode b ':require-module fzf-buffer; fzf-buffer<ret>'       -docstring 'switch buffer'
+
+# map global user F ':fzf-mode<ret>' -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<ret>' -docstring 'compile...'
+map global compile-mode c '<esc>:prompt -shell-completion "compile: " %{ evaluate-commands %sh{ echo "compile $kak_text" } }<ret>' -docstring 'compile'
+map global compile-mode r ':recompile<ret>' -docstring 'recompile'
+
+# Kakoune Focus
+declare-user-mode selection-mode
+map global user s ':enter-user-mode selection-mode<ret>' -docstring 'selection...'
+map global selection-mode f ':focus-toggle<ret>' -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