198 lines
5.1 KiB
Nix
198 lines
5.1 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
inputs,
|
|
...
|
|
}:
|
|
with lib;
|
|
let
|
|
cfg = config.xyno.helix;
|
|
in
|
|
{
|
|
options.xyno.helix.enable = mkOption { default = false; };
|
|
options.xyno.helix.withLargeLSPs = mkOption { default = false; };
|
|
config = mkIf cfg.enable {
|
|
home.packages =
|
|
with pkgs;
|
|
[
|
|
nixpkgs-fmt
|
|
# omnisharp-roslyn
|
|
## ts
|
|
# nodePackages_latest.prettier
|
|
dprint
|
|
markdown-oxide
|
|
codebook
|
|
## python
|
|
# ruff-lsp
|
|
# nodePackages_latest.pyright
|
|
# inputs.csharp-language-server.packages.${pkgs.system}.csharp-language-server
|
|
]
|
|
++ (optionals cfg.withLargeLSPs [
|
|
netcoredbg
|
|
nodePackages_latest.typescript-language-server
|
|
nodePackages_latest.vscode-langservers-extracted
|
|
typescript
|
|
# jsonnet-language-server
|
|
# jsonnet
|
|
lazygit
|
|
|
|
]);
|
|
programs.helix = {
|
|
# the flake is really slow to download bc it does like 1000 builtins.fetchTree
|
|
# just switch back to using what's in nixpkgs until stuff gets annoying
|
|
# package = inputs.helix.packages.${pkgs.system}.default;
|
|
enable = true;
|
|
defaultEditor = true;
|
|
settings = {
|
|
theme = "gruvbox_dark_hard";
|
|
editor = {
|
|
line-number = "relative";
|
|
bufferline = "multiple";
|
|
color-modes = true;
|
|
cursorline = true;
|
|
auto-format = true;
|
|
end-of-line-diagnostics = "hint";
|
|
inline-diagnostics = {
|
|
cursor-line = "hint";
|
|
};
|
|
lsp = {
|
|
display-messages = true;
|
|
display-inlay-hints = true;
|
|
};
|
|
popup-border = "popup";
|
|
statusline.left = [
|
|
"mode"
|
|
"spinner"
|
|
"spacer"
|
|
"version-control"
|
|
"file-name"
|
|
"diagnostics"
|
|
"read-only-indicator"
|
|
"file-modification-indicator"
|
|
"spacer"
|
|
];
|
|
|
|
statusline.right = [
|
|
"workspace-diagnostics"
|
|
"register"
|
|
"position"
|
|
"selections"
|
|
"file-encoding"
|
|
"file-type"
|
|
];
|
|
idle-timeout = 50;
|
|
completion-timeout = 100;
|
|
indent-guides = {
|
|
render = true;
|
|
character = "│";
|
|
skip-levels = 1;
|
|
};
|
|
soft-wrap = {
|
|
enable = true;
|
|
};
|
|
whitespace = {
|
|
render = {
|
|
space = "none";
|
|
tab = "all";
|
|
newline = "none";
|
|
};
|
|
characters = {
|
|
nbsp = "·";
|
|
tab = "→";
|
|
};
|
|
};
|
|
|
|
};
|
|
keys = {
|
|
normal = {
|
|
space."=" = ":fmt";
|
|
"C-g" =
|
|
":sh tmux popup -d \"#{pane_current_path}\" -xC -yC -w80%% -h80%% -E lazygit";
|
|
"C-t" = ":sh tmux split-window -v -l '35%%'";
|
|
"C-h" = ":sh tmux select-pane -t '{left-of}'";
|
|
"C-l" = ":sh tmux select-pane -t '{right-of}'";
|
|
"C-j" = ":sh tmux select-pane -t '{down-of}'";
|
|
"C-k" = ":sh tmux select-pane -t '{up-of}'";
|
|
|
|
# smart tab++
|
|
tab = "move_parent_node_end";
|
|
S-tab = "move_parent_node_start";
|
|
};
|
|
insert = {
|
|
# smart tab ++
|
|
S-tab = "move_parent_node_start";
|
|
};
|
|
select = {
|
|
# smart tab++
|
|
tab = "extend_parent_node_end";
|
|
S-tab = "extend_parent_node_start";
|
|
};
|
|
};
|
|
|
|
};
|
|
languages = {
|
|
language-server.pyright.config.python.analysis.typeCheckingMode = "basic";
|
|
language-server.ruff = {
|
|
command = "ruff-lsp";
|
|
config.settings.args = [
|
|
"--ignore"
|
|
"E501"
|
|
];
|
|
};
|
|
language-server.csharp = {
|
|
command = "csharp-language-server";
|
|
};
|
|
language-server.codebook = {
|
|
command = "codebook-lsp";
|
|
args = ["serve"];
|
|
};
|
|
language = flatten [
|
|
(map
|
|
(x: {
|
|
name = x;
|
|
language-servers = [
|
|
"typescript-language-server"
|
|
"eslint"
|
|
];
|
|
#formatter = { command = "dprint"; args = [ "fmt" "--stdin" x ]; };
|
|
# formatter = { command = "prettier"; args = [ "--parser" "typescript" ]; };
|
|
})
|
|
[
|
|
"typescript"
|
|
"javascript"
|
|
"jsx"
|
|
"tsx"
|
|
]
|
|
)
|
|
{
|
|
name = "nix";
|
|
formatter = {
|
|
command = "nixpkgs-fmt";
|
|
};
|
|
}
|
|
{
|
|
name = "python";
|
|
language-servers = [
|
|
"pyright"
|
|
"ruff"
|
|
];
|
|
}
|
|
{
|
|
name = "markdown";
|
|
language-servers = ["codebook"];
|
|
}
|
|
{
|
|
name = "c-sharp";
|
|
language-servers = [ "csharp" ];
|
|
formatter = {
|
|
command = "dotnet";
|
|
args = [ "csharpier" ];
|
|
};
|
|
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|