From e0a7e9a533f5ffb3ad85c01df0ca4b7901fc22d8 Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Mon, 28 Oct 2024 21:52:16 +0100 Subject: [PATCH] pain --- hosts/temperance/configuration.nix | 1 - modules/other/module.nix | 2 +- modules/other/users.nix | 4 +- modules/programs/editors/helix/languages.nix | 48 +++++++ modules/programs/editors/kakoune/default.nix | 66 +++++++++ modules/programs/editors/kakoune/kak-lsp.toml | 18 +++ modules/programs/editors/kakoune/kakoune.nix | 135 ++++++++++++++++++ modules/programs/editors/kakoune/kakrc | 88 ++++++++++++ modules/programs/editors/kakoune/mappings.nix | 48 +++++++ .../programs/editors/kakoune/starship.toml | 20 +++ modules/programs/editors/module.nix | 5 + modules/shell/{module.nix => module2.nix} | 0 parts/pkgs/extraPackages/fish/packages.nix | 20 +++ 13 files changed, 451 insertions(+), 4 deletions(-) create mode 100644 modules/programs/editors/kakoune/default.nix create mode 100644 modules/programs/editors/kakoune/kak-lsp.toml create mode 100644 modules/programs/editors/kakoune/kakoune.nix create mode 100644 modules/programs/editors/kakoune/kakrc create mode 100644 modules/programs/editors/kakoune/mappings.nix create mode 100644 modules/programs/editors/kakoune/starship.toml create mode 100644 modules/programs/editors/module.nix rename modules/shell/{module.nix => module2.nix} (100%) diff --git a/hosts/temperance/configuration.nix b/hosts/temperance/configuration.nix index 7d8714e..1341691 100644 --- a/hosts/temperance/configuration.nix +++ b/hosts/temperance/configuration.nix @@ -99,7 +99,6 @@ in { }; other = { system = { - hostname = "temperance"; username = "cr"; }; diff --git a/modules/other/module.nix b/modules/other/module.nix index dc85a56..044212a 100644 --- a/modules/other/module.nix +++ b/modules/other/module.nix @@ -4,6 +4,6 @@ _: { ./system.nix ./xdg.nix ./git.nix - /users.nix + ./users.nix ]; } diff --git a/modules/other/users.nix b/modules/other/users.nix index be1e22f..b702002 100644 --- a/modules/other/users.nix +++ b/modules/other/users.nix @@ -14,9 +14,9 @@ in { "audio" "nix" ]; - hashedPasswordFile = "/etc/passwords/cr"; + # hashedPasswordFile = "/etc/passwords/cr"; }; - root.hashedPasswordFile = "/persist/passwords/root"; + # root.hashedPasswordFile = "/persist/passwords/root"; }; }; } diff --git a/modules/programs/editors/helix/languages.nix b/modules/programs/editors/helix/languages.nix index 9d51eb7..01ed9b4 100644 --- a/modules/programs/editors/helix/languages.nix +++ b/modules/programs/editors/helix/languages.nix @@ -66,6 +66,54 @@ in { auto-format = true; language-servers = ["dprint" "typescript-language-server"]; } + { + name = "rust"; + debugger = { + command = "${pkgs.lldb_19}/bin/lldb-dap"; + name = "lldb"; + transport = "stdio"; + templates = [ + { + name = "binary"; + request = "launch"; + completion = [ + { + name = "binary"; + completion = "filename"; + } + ]; + args = { + program = "{0}"; + runInTerminal = true; + }; + } + ]; + }; + } + { + name = "c"; + debugger = { + name = "gdb"; + command = "${pkgs.gdb}/bin/gdb"; + transport = "stdio"; + templates = [ + { + name = "binary"; + request = "launch"; + completion = [ + { + name = "binary"; + completion = "filename"; + } + ]; + args = { + program = "{0}"; + runInTerminal = true; + }; + } + ]; + }; + } ]; language-server = { diff --git a/modules/programs/editors/kakoune/default.nix b/modules/programs/editors/kakoune/default.nix new file mode 100644 index 0000000..c667665 --- /dev/null +++ b/modules/programs/editors/kakoune/default.nix @@ -0,0 +1,66 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (config.modules.other.system) username; + cfg = config.modules.system.programs.editors.kakoune; + inherit (lib) mkIf mkEnableOption; +in { + imports = [./mappings.nix]; + options.modules.editors.kakoune.enable = mkEnableOption "kakoune"; + config.home-manager.users.${username}.programs.kakoune = mkIf cfg.enable { + enable = true; + package = pkgs.kakoune-unwrapped; + config = { + autoComplete = ["insert"]; + autoReload = "yes"; + indentWidth = 4; + tabStop = 4; + incrementalSearch = false; + numberLines = { + enable = true; + relative = true; + highlightCursor = true; + separator = "|"; + }; + + scrollOff = { + lines = 4; + columns = 4; + }; + wrapLines = { + enable = true; + indent = true; + word = true; + }; + + ui = { + enableMouse = true; + assistant = "none"; + statusLine = "bottom"; + }; + }; + + plugins = with pkgs.kakounePlugins; [ + active-window-kak + auto-pairs-kak + byline-kak # ope + prelude-kak # dependency of byline + fzf-kak + kakboard + kakoune-buffer-switcher + kakoune-buffers + kakoune-lsp + kakoune-rainbow + kakoune-registers + kakoune-vertical-selection + powerline-kak + quickscope-kak + smarttab-kak + zig-kak + ]; + # extraConfig = ./kakrc; + }; +} diff --git a/modules/programs/editors/kakoune/kak-lsp.toml b/modules/programs/editors/kakoune/kak-lsp.toml new file mode 100644 index 0000000..51a4a17 --- /dev/null +++ b/modules/programs/editors/kakoune/kak-lsp.toml @@ -0,0 +1,18 @@ +[language.haskell] +filetypes = ["haskell"] +roots = ["Setup.hs", "stack.yaml", "*.cabal"] +command = "haskell-language-server-wrapper" +args = ["--lsp"] + +[language.rust] +filetypes = ["rust"] +roots = ["Cargo.toml"] +command = "rust-analyzer" +settings_section = "rust-analyzer" +[language.rust.settings.rust-analyzer] +"proMacro.enable" = true + +[language.nix] +filetypes = ["nix"] +roots = ["shell.nix", "default.nix", "home.nix", "flake.nix"] +command = "rnix-lsp" diff --git a/modules/programs/editors/kakoune/kakoune.nix b/modules/programs/editors/kakoune/kakoune.nix new file mode 100644 index 0000000..c00e5d8 --- /dev/null +++ b/modules/programs/editors/kakoune/kakoune.nix @@ -0,0 +1,135 @@ +{ + config, + lib, + pkgs, + buildGoModule, + ... +}: +with lib; let + cfg = config.modules.programs.kakoune; + username = config.modules.other.system.username; + kakship = pkgs.rustPlatform.buildRustPackage rec { + pname = "kakship"; + version = "0.2.8"; + src = pkgs.fetchFromGitHub { + owner = "mesabloo"; + repo = "kakship"; + rev = "937d904a893daf59f70dc955e60209cd8866a7c3"; + sha256 = "1pk0v0b31bppjzl08qgrjld40pc7rqc257zzgdl4r8zaamqsmkz9"; + }; + cargoLock = { + lockFile = "${src}/Cargo.lock"; + outputHashes = { + "kak-0.1.2" = "sha256-RhtHQkC9yCSJtr/kbC5c9MavbL79acrsiEGXyoAST8U="; + "yew-ansi-0.1.0" = "sha256-dSaEzqiOon+OqCZKQudzLRNP+Iv97kC+XZcTElKNrzs="; + }; + }; + + # patchPhase = '' + # substituteInPlace src/main.rs \ + # --replace '"starship"' "\"${pkgs.starship}/bin/starship\"" + # ''; + + postInstall = '' + # Copy rc files to /share/kak/autoload + mkdir -p $out/share/kak/autoload/plugins/${pname} + cp $src/rc/*.kak $out/share/kak/autoload/plugins/${pname} + ''; + }; + kak-rainbow = pkgs.kakouneUtils.buildKakounePluginFrom2Nix rec { + pname = "kak-rainbow"; + version = "1.0.0"; + src = pkgs.fetchFromGitHub { + owner = "Bodhizafa"; + repo = "kak-rainbow"; + rev = "9c3d0aa62514134ee5cb86e80855d9712c4e8c4b"; + sha256 = "sha256-ryYq4A89wVUsxgvt4YqBPXsTFMDrMJM6BDBEHrWHD1c="; + }; + + postInstall = '' + mkdir -p $out/lib + mv $out/share/kak/autoload/plugins/${pname}/rainbow.kak $out/lib + cat >$out/share/kak/autoload/plugins/${pname}/rainbow.kak <\S[^\h\n,=;*(){}\[\]]\z'" +set-option global lsp_diagnostic_line_error_sign "!" +set-option global lsp_diagnostic_line_warning_sign "?" + +hook global WinSetOption filetype=(rust) %{ + map window user "l" ':enter-user-mode lsp' -docstring "LSP mode" + lsp-enable-window + lsp-auto-hover-insert-mode-disable + set-option window lsp_hover_anchor true + set-face window DiagnosticError default+u + set-face window DiagnosticWarning default+u + set-option window lsp_server_configuration rust.clippy_preference="on" +} + +# hook global WinSetOption filetype=rust %{ +# lsp-enable-window hook window BufWritePre .* lsp-formatting-sync +# hook window -group rust-inlay-hints BufWritePost .* rust-analyzer-inlay-hints +# hook -once -always window WinSetOption filetype=.* %{ +# remove-hooks window rust-inlay-hints +# } +# } + +map global normal ':lsp-definition' + +# --- kakoune-rainbow +hook global ModuleLoaded rainbow %{ + set-option global rainbow_colors rgb:FF3B2F+db rgb:FF9500+db rgb:FFCC02+db rgb:27cd41+db rgb:007AFF+db rgb:AF52DE+db + hook global WinSetOption filetype=(rust|python|c|cpp|scheme|lisp|clojure|javascript|json|kak|haskell|python|latex|nix) %{ + rainbow-enable-window + } +} + +# --- alacritty.kak +hook global ModuleLoaded x11 %{ + alias global terminal kitty-terminal + alias global popup alacritty-terminal-popup +} + +# --- Kakship +hook global ModuleLoaded kakship %{ + kakship-enable +} + +# --- Broot +define-command -override broot-oneoff-select -docstring 'focus broot' %{ + evaluate-commands %sh{ + d="$(dirname "$kak_buffile")" + b="$(basename "$kak_buffile")" + echo echo -debug "$d" + broot_cmd="broot" + if [ -d "$d" ]; then + broot_cmd="$broot_cmd --cmd \":focus $d;:select $b\"" + fi + echo "kks-connect ala-popup sh -c '""kks send edit $broot_cmd""'" + } +} + +define-command ala-popup -params .. -shell-completion -docstring 'alacritty-terminal-popup [arguments]: create a new terminal as an Alacritty window (class: popup, app_id: popup)' %{ + nop %sh{ + setsid alacritty -o window.dimensions.columns=200 window.dimensions.lines=57 --title popup --class 'alacritty-popup' --command "$@" < /dev/null > /dev/null 2>&1 & + } +} + +# --- Map +map global normal ':fzf-modef' +map global normal ':alacritty-popup' + +require-module fzf +set-option global fzf_terminal_command 'ala-popup kak -c %val{session} -e "%arg{@}"' + + +require-module alacritty +require-module rainbow diff --git a/modules/programs/editors/kakoune/mappings.nix b/modules/programs/editors/kakoune/mappings.nix new file mode 100644 index 0000000..59a0c99 --- /dev/null +++ b/modules/programs/editors/kakoune/mappings.nix @@ -0,0 +1,48 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (config.modules.other.system) username; +in { + config.home-manager.users.${username}.programs.kakoune.config.keyMappings = [ + { + mode = "normal"; + key = ""; + effect = ";,"; + docstring = "Press escape to clear highlighted text and collapse cursors"; + } + { + mode = "normal"; + key = ""; + effect = ":comment-line"; + docstring = "Comment a line with !"; + } + { + mode = "normal"; + key = "b"; + effect = ":db"; + docstring = "close current buffer"; + } + + { + mode = "normal"; + key = "n"; + effect = ":bp"; + docstring = "go to next buffer"; + } + { + mode = "normal"; + key = "m"; + effect = ":bn"; + docstring = "go to next buffer"; + } + { + mode = "normal"; + key = " f"; + effect = ":fzf-mode"; + docstring = "open fzf"; + } + ]; +} diff --git a/modules/programs/editors/kakoune/starship.toml b/modules/programs/editors/kakoune/starship.toml new file mode 100644 index 0000000..dfb7573 --- /dev/null +++ b/modules/programs/editors/kakoune/starship.toml @@ -0,0 +1,20 @@ +# add_newline = false + +format = """ +\$directory +\${custom.separator} +""" + +[directory] +format = '[$path/]($style)' +truncate_length = 2 +truncate_to_repo = false +use_logical_pat = true +style = "fg:cyan" +truncate_symbol = "../" +disabled = false + +[custom.separator] +format = "[ ||| ]($style)" +style = "fg:purple" +disabled = false diff --git a/modules/programs/editors/module.nix b/modules/programs/editors/module.nix new file mode 100644 index 0000000..8a59a55 --- /dev/null +++ b/modules/programs/editors/module.nix @@ -0,0 +1,5 @@ +_: { + imports = [ + ./kakoune + ]; +} diff --git a/modules/shell/module.nix b/modules/shell/module2.nix similarity index 100% rename from modules/shell/module.nix rename to modules/shell/module2.nix diff --git a/parts/pkgs/extraPackages/fish/packages.nix b/parts/pkgs/extraPackages/fish/packages.nix index 2376cd3..c148f0f 100644 --- a/parts/pkgs/extraPackages/fish/packages.nix +++ b/parts/pkgs/extraPackages/fish/packages.nix @@ -7,6 +7,26 @@ # better cat bat + # clipboard + yazi + serpl + diff-so-fancy + tig + + sesh + mprocs + curlie + entr + procs + sd + # mult + glow + + gdb + # dua-cli + dust + kondo + # better grep ripgrep