186 lines
5.1 KiB
Nix
Executable file
186 lines
5.1 KiB
Nix
Executable file
{pkgs, ...}: {
|
||
# read https://docs.helix-editor.com/editor.html
|
||
programs.helix = {
|
||
enable = true;
|
||
settings = {
|
||
theme = "dracula";
|
||
|
||
editor = {
|
||
line-number = "absolute";
|
||
popup-border = "all";
|
||
scroll-lines = 3;
|
||
color-modes = true; # colour the mode indicator depending on mode
|
||
shell = ["zsh" "-c"];
|
||
|
||
auto-format = true;
|
||
auto-completion = true; # enable popup for autocomplete
|
||
completion-timeout = 250; # time before completions display
|
||
preview-completion-insert = true;
|
||
completion-trigger-len = 2; # min word length to trigger completions
|
||
completion-replace = true; # completions replace entire word
|
||
|
||
indent-heuristic = "tree-sitter"; # how indentation is computed
|
||
# TODO: make this configurable (enabled on myputer, disabled on lolcathost)
|
||
middle-click-paste = true;
|
||
insert-final-newline = true; # append newline to file on write
|
||
|
||
gutters = [
|
||
"diagnostics"
|
||
"spacer"
|
||
"line-numbers"
|
||
"spacer"
|
||
"diff"
|
||
];
|
||
|
||
whitespace = {
|
||
render = {
|
||
space = "none"; # "all"
|
||
tab = "none"; #"all"
|
||
nbsp = "none";
|
||
nnbsp = "none";
|
||
newline = "none";
|
||
};
|
||
characters = {
|
||
space = "·";
|
||
nbsp = "⍽";
|
||
nnbsp = "␣";
|
||
tab = "→";
|
||
newline = "⤶";
|
||
tabpad = "·"; # Tabs will look like "→···" (depending on tab width)
|
||
};
|
||
};
|
||
|
||
indent-guides = {
|
||
render = true;
|
||
character = "▏"; # "|"
|
||
skip-levels = 1;
|
||
};
|
||
|
||
lsp = {
|
||
enable = true;
|
||
auto-signature-help = true; # hints for function parameters
|
||
display-inlay-hints = true; # inline hints
|
||
snippets = true;
|
||
};
|
||
|
||
cursor-shape = {
|
||
normal = "block";
|
||
insert = "bar";
|
||
select = "block";
|
||
};
|
||
|
||
file-picker = {
|
||
hidden = true; # show hidden files
|
||
follow-symlinks = true;
|
||
deduplicate-links = true;
|
||
git-ignore = false; # dont read .gitignore files
|
||
ignore = true; # use .ignore for helix instead of .gitignore
|
||
};
|
||
|
||
statusline = {
|
||
left = [
|
||
"mode"
|
||
"spacer"
|
||
"version-control"
|
||
"spinner"
|
||
];
|
||
center = [
|
||
"file-name"
|
||
"read-only-indicator"
|
||
"file-modification-indicator"
|
||
];
|
||
right = [
|
||
"position"
|
||
"total-line-numbers"
|
||
"file-encoding"
|
||
"file-line-ending"
|
||
"file-type"
|
||
];
|
||
separator = "|";
|
||
mode.normal = "NORMAL";
|
||
mode.insert = "INSERT";
|
||
mode.select = "SELECT";
|
||
};
|
||
};
|
||
};
|
||
|
||
languages = {
|
||
language = [
|
||
{
|
||
name = "nix";
|
||
indent = {
|
||
tab-width = 2;
|
||
unit = " ";
|
||
};
|
||
block-comment-tokens = {
|
||
start = "/*";
|
||
end = "*/";
|
||
};
|
||
auto-format = true;
|
||
formatter.command = "${pkgs.alejandra}/bin/alejandra";
|
||
language-servers = ["nixd"];
|
||
}
|
||
{
|
||
name = "python";
|
||
indent = {
|
||
tab-width = 4;
|
||
unit = " ";
|
||
};
|
||
auto-format = false; # my python is beautiful ^_^
|
||
rulers = [80];
|
||
}
|
||
{
|
||
name = "c";
|
||
file-types = ["c" "h"]; # use .hpp for C++
|
||
auto-format = false;
|
||
formatter.command = "${pkgs.clang-tools}/bin/clang-format";
|
||
language-servers = ["clangd"];
|
||
}
|
||
{
|
||
name = "haskell";
|
||
auto-format = true;
|
||
formatter.command = "${pkgs.ormolu}/bin/ormolu";
|
||
language-servers = ["haskell-language-server"];
|
||
}
|
||
# {
|
||
# name = "c-sharp";
|
||
# source = "source.cs";
|
||
# file-types = ["cs"];
|
||
# indent = {
|
||
# tab-width = 4;
|
||
# unit = " ";
|
||
# };
|
||
# block-comment-tokens = {
|
||
# start = "/*";
|
||
# end = "*/";
|
||
# };
|
||
# # auto-format = false;
|
||
# # formatter.command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
|
||
# # language-servers = ["OmniSharp"];
|
||
# }
|
||
];
|
||
|
||
language-server = {
|
||
# use nixd as default nix lsp (I haven't tried nil yet)
|
||
# NOTE: nixd will be supported by default after nix 24.07
|
||
# SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix
|
||
nixd = {
|
||
command = "${pkgs.nixd}/bin/nixd";
|
||
};
|
||
# clangd for C
|
||
clangd = {
|
||
command = "${pkgs.clang-tools}/bin/clangd";
|
||
};
|
||
|
||
haskell-language-server = {
|
||
command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper";
|
||
};
|
||
|
||
# C# language services
|
||
OmniSharp = {
|
||
command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
|
||
};
|
||
};
|
||
};
|
||
};
|
||
}
|