.dotfiles/dot_config/flake/home/helix.nix

234 lines
5.4 KiB
Nix

{pkgs, ...}: {
programs.helix = {
enable = true;
package = pkgs.unstable.helix;
languages = {
language-server = {
clangd = {
command = "clangd";
args = ["--header-insertion=never"];
};
biome = {
command = "biome";
args = ["lsp-proxy"];
};
fish_lsp = {
command = "fish-lsp";
args = ["start"];
};
slangd = {
command = "slangd";
};
};
language = [
{
name = "fish";
scope = "source.fish";
auto-format = true;
language-servers = [{name = "fish_lsp";}];
}
{
name = "meson";
scope = "source.meson";
injection-regex = "meson";
comment-token = "#";
indent = {
tab-width = 2;
unit = " ";
};
auto-format = true;
formatter = {
command = "muon";
args = ["fmt" "-"];
};
}
{
name = "nix";
scope = "source.nix";
auto-format = true;
formatter = {
command = "alejandra";
args = ["-q"];
};
}
{
name = "cpp";
language-servers = ["clangd"];
}
{
name = "python";
language-servers = ["ruff" "basedpyright"];
}
{
name = "objc";
scope = "source.objc";
file-types = ["m" "mm" "M"];
injection-regex = "objc";
roots = ["xcodeproj"];
comment-token = "//";
indent = {
tab-width = 2;
unit = " ";
};
language-servers = [{name = "clangd";}];
}
{
name = "slang";
scope = "source.slang";
file-types = ["slang"];
auto-format = true;
language-servers = [{name = "slangd";}];
comment-token = "//";
}
# BiomeJS Setup
{
name = "javascript";
language-servers = [
{
name = "typescript-language-server";
except-features = ["format"];
}
"biome"
];
auto-format = true;
formatter = {
command = "biome";
args = ["format" "--stdin-file-path" "a.js"];
};
}
{
name = "typescript";
language-servers = [
{
name = "typescript-language-server";
except-features = ["format"];
}
"biome"
];
auto-format = true;
formatter = {
command = "biome";
args = ["format" "--stdin-file-path" "a.ts"];
};
}
{
name = "tsx";
auto-format = true;
language-servers = [
{
name = "typescript-language-server";
except-features = ["format"];
}
"biome"
];
formatter = {
command = "biome";
args = ["format" "--stdin-file-path" "a.tsx"];
};
}
{
name = "jsx";
auto-format = true;
language-servers = [
{
name = "typescript-language-server";
except-features = ["format"];
}
"biome"
];
formatter = {
command = "biome";
args = ["format" "--stdin-file-path" "a.jsx"];
};
}
{
name = "json";
language-servers = [
{
name = "vscode-json-language-server";
except-features = ["format"];
}
"biome"
];
}
];
grammar = [
{
name = "objc";
source = {
git = "https://github.com/tree-sitter-grammars/tree-sitter-objc";
rev = "18802acf31d0b5c1c1d50bdbc9eb0e1636cab9ed";
};
}
{
name = "slang";
source = {
git = "https://github.com/tree-sitter-grammars/tree-sitter-slang";
rev = "3ed23c04a412a0559162d9cadf96dfff7cb36079";
};
}
];
};
settings = {
theme = "base16_terminal";
editor = {
auto-format = false;
end-of-line-diagnostics = "warning";
true-color = true;
color-modes = true;
completion-replace = true;
rulers = [120];
auto-save = {
focus-lost = true;
};
bufferline = "multiple";
line-number = "relative";
inline-diagnostics = {
cursor-line = "error";
};
statusline = {
left = ["mode" "spinner" "spacer" "version-control" "file-name"];
};
file-picker = {
git-ignore = true;
};
lsp = {
display-inlay-hints = true;
display-messages = true;
};
cursor-shape.insert = "bar";
soft-wrap.enable = true;
};
keys = {
normal = {
C-right = "move_next_word_start";
C-left = "move_prev_word_end";
"=" = ":format";
space = {
F = "file_picker_in_current_buffer_directory";
};
g = {
f = "no_op";
};
};
insert = {
C-right = "move_next_word_start";
C-left = "move_prev_word_end";
};
};
};
};
}