flake/modules/home/helix/default.nix
2024-03-26 11:39:16 +00:00

177 lines
4.1 KiB
Nix

{
pkgs,
lib,
inputs,
...
}: {
programs.helix = {
enable = true;
settings = {
keys.normal = {
"C" = ["collapse_selection" "extend_to_line_end" "change_selection"];
"D" = ["extend_to_line_end" "delete_selection"];
"Y" = ["extend_to_line_bounds" "yank_main_selection_to_clipboard" "goto_line_start" "collapse_selection"];
"V" = ["select_mode" "extend_to_line_bounds"];
"{" = "goto_prev_paragraph";
"}" = "goto_next_paragraph";
"X" = "extend_line_above";
"esc" = ["collapse_selection" "keep_primary_selection"];
space.space = "file_picker";
space.w = ":w";
# space.q = ":bc";
"C-q" = ":xa";
space.u = {
f = ":format"; # format using LSP formatter
w = ":set whitespace.render all";
W = ":set whitespace.render none";
};
};
keys.select = {
"%" = "match_brackets";
};
editor = {
color-modes = true;
cursorline = true;
mouse = false;
idle-timeout = 1;
line-number = "relative";
scrolloff = 5;
completion-replace = true;
bufferline = "always";
true-color = true;
rulers = [80];
soft-wrap.enable = true;
indent-guides = {
render = true;
};
lsp = {
display-messages = true;
display-inlay-hints = true;
};
statusline = {
separator = "|";
left = ["mode" "selections" "spinner" "file-name" "total-line-numbers"];
center = [];
right = ["diagnostics" "file-encoding" "file-line-ending" "file-type" "position-percentage" "position"];
mode = {
normal = "NORMAL";
insert = "INSERT";
select = "SELECT";
};
};
whitespace.characters = {
space = "·";
nbsp = "";
tab = "";
newline = "";
};
cursor-shape = {
insert = "bar";
normal = "block";
select = "block";
};
};
};
languages = {
language = [
{
name = "bash";
auto-format = true;
formatter = {
command = "${pkgs.shfmt}/bin/shfmt";
args = ["-i" "2" "-"];
};
}
{
name = "html";
file-types = ["html" "tera"];
}
{
name = "clojure";
injection-regex = "(clojure|clj|edn|boot|yuck)";
file-types = ["clj" "cljs" "cljc" "clje" "cljr" "cljx" "edn" "boot" "yuck"];
}
{
name = "latex";
file-types = ["tex"];
config.texlab = {
build = {
forwardSearchAfter = true;
onSave = true;
};
chktex = {
onEdit = true;
};
forwardSearch = {
executable = "zathura";
args = [ "--synctex-forward" "%l:1:%f" "%p" ];
};
};
}
];
language-server = {
bash-language-server = {
command = "${pkgs.nodePackages.bash-language-server}/bin/bash-language-server";
args = ["start"];
};
clangd = {
command = "${pkgs.clang-tools}/bin/clangd";
clangd.fallbackFlags = ["-std=c++2b"];
};
nil = {
command = lib.getExe pkgs.nil;
config.nil.formatting.command = ["${lib.getExe pkgs.alejandra}" "-q"];
};
};
};
themes = {
ui.selection = {bg = "white"; modifiers = ["reversed"];};
ui.primary = {bg = "light-cyan"; modifiers = ["reversed"];};
};
};
home.packages = with pkgs; [
# some other lsp related packages / dev tools
typst
shellcheck
lldb
gopls
clang-tools
nodejs
guile
nim
zig
texlab
zls
jre8
gcc
uncrustify
black
shellcheck
gawk
haskellPackages.haskell-language-server
java-language-server
kotlin-language-server
nodePackages.vls
nodePackages.jsonlint
nodePackages.yarn
# Nix
alejandra
nil
# Rust
cargo
rust-analyzer
];
}