Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2af142ffa7 | |||
| 5abd1c4eda |
@@ -0,0 +1,470 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
account = config.facts.account;
|
||||
in
|
||||
{
|
||||
flake.modules.homeManager.helix =
|
||||
{
|
||||
lib,
|
||||
osConfig,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
indent = {
|
||||
tab-width = 2;
|
||||
unit = " ";
|
||||
};
|
||||
|
||||
oxfmt = {
|
||||
name = "oxfmt";
|
||||
only-features = [ "format" ];
|
||||
};
|
||||
|
||||
oxlint = {
|
||||
name = "oxlint";
|
||||
only-features = [
|
||||
"code-action"
|
||||
"diagnostics"
|
||||
];
|
||||
};
|
||||
|
||||
webLanguageServers = [
|
||||
oxfmt
|
||||
"vtsls"
|
||||
oxlint
|
||||
"tailwindcss-ls"
|
||||
];
|
||||
|
||||
markupLanguageServers = primary: [
|
||||
oxfmt
|
||||
primary
|
||||
"tailwindcss-ls"
|
||||
"emmet-ls"
|
||||
];
|
||||
|
||||
ruffFormatter = pkgs.writeShellApplication {
|
||||
name = "helix-ruff-format";
|
||||
runtimeInputs = [ pkgs.ruff ];
|
||||
text = ''
|
||||
if (( $# != 1 )); then
|
||||
echo "usage: helix-ruff-format <filename>" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
filename=$1
|
||||
ruff check \
|
||||
--fix \
|
||||
--force-exclude \
|
||||
--exit-zero \
|
||||
--no-cache \
|
||||
--stdin-filename "$filename" \
|
||||
- \
|
||||
| ruff format \
|
||||
--force-exclude \
|
||||
--stdin-filename "$filename" \
|
||||
- \
|
||||
| ruff check \
|
||||
--fix \
|
||||
--force-exclude \
|
||||
--select=I001 \
|
||||
--exit-zero \
|
||||
--no-cache \
|
||||
--stdin-filename "$filename" \
|
||||
-
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
ripgrep
|
||||
fd
|
||||
wl-clipboard
|
||||
stylua
|
||||
taplo
|
||||
yamlfmt
|
||||
lua-language-server
|
||||
nixd
|
||||
nixfmt
|
||||
dafny
|
||||
vscode-langservers-extracted
|
||||
tailwindcss-language-server
|
||||
rust-analyzer
|
||||
rustfmt
|
||||
astro-language-server
|
||||
tinymist
|
||||
typstyle
|
||||
ty
|
||||
ruff
|
||||
vtsls
|
||||
pkgs.oxlint
|
||||
pkgs.oxfmt
|
||||
emmet-language-server
|
||||
svelte-language-server
|
||||
];
|
||||
|
||||
settings = {
|
||||
theme = "lux-kanagawa";
|
||||
|
||||
editor = {
|
||||
scrolloff = 10;
|
||||
default-yank-register = "+";
|
||||
cursorline = true;
|
||||
completion-timeout = 5;
|
||||
color-modes = true;
|
||||
popup-border = "all";
|
||||
|
||||
file-picker.hidden = false;
|
||||
|
||||
indent-guides.render = true;
|
||||
|
||||
inline-diagnostics.cursor-line = "hint";
|
||||
|
||||
lsp.display-inlay-hints = true;
|
||||
|
||||
soft-wrap.enable = true;
|
||||
|
||||
statusline = {
|
||||
left = [
|
||||
"mode"
|
||||
"spinner"
|
||||
"version-control"
|
||||
"file-name"
|
||||
"read-only-indicator"
|
||||
"file-modification-indicator"
|
||||
];
|
||||
right = [
|
||||
"diagnostics"
|
||||
"selections"
|
||||
"position-percentage"
|
||||
"position"
|
||||
"file-type"
|
||||
];
|
||||
separator = "";
|
||||
mode = {
|
||||
normal = "NORMAL";
|
||||
insert = "INSERT";
|
||||
select = "SELECT";
|
||||
};
|
||||
diagnostics = [
|
||||
"error"
|
||||
"warning"
|
||||
"info"
|
||||
"hint"
|
||||
];
|
||||
workspace-diagnostics = [
|
||||
"error"
|
||||
"warning"
|
||||
"info"
|
||||
"hint"
|
||||
];
|
||||
};
|
||||
|
||||
whitespace = {
|
||||
render = {
|
||||
tab = "all";
|
||||
nbsp = "all";
|
||||
nnbsp = "all";
|
||||
};
|
||||
characters = {
|
||||
tab = "»";
|
||||
nbsp = "␣";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keys = {
|
||||
insert."C-g" = "signature_help";
|
||||
|
||||
normal = {
|
||||
esc = [
|
||||
"collapse_selection"
|
||||
"keep_primary_selection"
|
||||
];
|
||||
|
||||
"C-h" = "jump_view_left";
|
||||
"C-j" = "jump_view_down";
|
||||
"C-k" = "jump_view_up";
|
||||
"C-l" = "jump_view_right";
|
||||
|
||||
"[".h = "goto_prev_change";
|
||||
"]".h = "goto_next_change";
|
||||
|
||||
g.I = "goto_implementation";
|
||||
|
||||
space = {
|
||||
space = "buffer_picker";
|
||||
f = ":format";
|
||||
q = "diagnostics_picker";
|
||||
"/" = "search";
|
||||
|
||||
b.d = ":buffer-close";
|
||||
c.a = "code_action";
|
||||
d.s = "symbol_picker";
|
||||
h.r = ":reset-diff-change";
|
||||
r.n = "rename_symbol";
|
||||
t.h = ":toggle lsp.display-inlay-hints";
|
||||
|
||||
s = {
|
||||
f = "file_picker";
|
||||
g = "global_search";
|
||||
d = "diagnostics_picker";
|
||||
r = "last_picker";
|
||||
"/" = "global_search";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
themes.lux-kanagawa = {
|
||||
inherits = "kanagawa";
|
||||
"ui.gutter" = {
|
||||
fg = "sumiInk6";
|
||||
};
|
||||
};
|
||||
|
||||
languages = {
|
||||
language-server = {
|
||||
dafny = {
|
||||
command = "dafny";
|
||||
args = [ "server" ];
|
||||
};
|
||||
|
||||
emmet-ls = {
|
||||
command = "emmet-language-server";
|
||||
args = [ "--stdio" ];
|
||||
};
|
||||
|
||||
lua-language-server = {
|
||||
config.Lua = {
|
||||
runtime.version = "LuaJIT";
|
||||
signatureHelp.enable = true;
|
||||
diagnostics.globals = [ "vim" ];
|
||||
telemetry.enable = false;
|
||||
completion.callSnippet = "Replace";
|
||||
hint.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixd = {
|
||||
config.nixd = {
|
||||
nixpkgs.expr = "import ${pkgs.path} {}";
|
||||
options = {
|
||||
nixos.expr = ''(builtins.getFlake "path://${account.nixosConfigurationPath}").nixosConfigurations.${osConfig.facts.machine.name}.options'';
|
||||
home-manager.expr = ''(builtins.getFlake "path://${account.nixosConfigurationPath}").nixosConfigurations.${osConfig.facts.machine.name}.options.home-manager.users.type.getSubOptions []'';
|
||||
};
|
||||
formatting.command = [ "nixfmt" ];
|
||||
};
|
||||
};
|
||||
|
||||
oxfmt = {
|
||||
command = "oxfmt";
|
||||
args = [ "--lsp" ];
|
||||
required-root-patterns = [
|
||||
".oxfmtrc.json"
|
||||
".oxfmtrc.jsonc"
|
||||
"oxfmt.config.ts"
|
||||
"package.json"
|
||||
"vite.config.ts"
|
||||
];
|
||||
};
|
||||
|
||||
oxlint = {
|
||||
command = "oxlint";
|
||||
args = [ "--lsp" ];
|
||||
required-root-patterns = [
|
||||
".oxlintrc.json"
|
||||
".oxlintrc.jsonc"
|
||||
"oxlint.config.ts"
|
||||
"package.json"
|
||||
"vite.config.ts"
|
||||
];
|
||||
};
|
||||
|
||||
tinymist = {
|
||||
config.formatterMode = "typstyle";
|
||||
};
|
||||
|
||||
vtsls = {
|
||||
command = "vtsls";
|
||||
args = [ "--stdio" ];
|
||||
config.vtsls.autoUseWorkspaceTsdk = true;
|
||||
};
|
||||
};
|
||||
|
||||
language = [
|
||||
{
|
||||
name = "lua";
|
||||
auto-format = true;
|
||||
formatter = {
|
||||
command = "stylua";
|
||||
args = [
|
||||
"--indent-type"
|
||||
"Spaces"
|
||||
"--indent-width"
|
||||
"2"
|
||||
"--search-parent-directories"
|
||||
"--respect-ignores"
|
||||
"--stdin-filepath"
|
||||
"%{buffer_name}"
|
||||
"-"
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "nix";
|
||||
auto-format = true;
|
||||
language-servers = [ "nixd" ];
|
||||
}
|
||||
{
|
||||
name = "dafny";
|
||||
scope = "source.dafny";
|
||||
injection-regex = "dafny";
|
||||
file-types = [
|
||||
"dfy"
|
||||
"dafny"
|
||||
];
|
||||
roots = [ ".git" ];
|
||||
comment-token = "//";
|
||||
block-comment-tokens = {
|
||||
start = "/*";
|
||||
end = "*/";
|
||||
};
|
||||
inherit indent;
|
||||
auto-format = true;
|
||||
language-servers = [ "dafny" ];
|
||||
}
|
||||
{
|
||||
name = "json";
|
||||
language-servers = [
|
||||
oxfmt
|
||||
"vscode-json-language-server"
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "jsonc";
|
||||
language-servers = [
|
||||
oxfmt
|
||||
"vscode-json-language-server"
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "javascript";
|
||||
auto-format = true;
|
||||
language-servers = webLanguageServers;
|
||||
}
|
||||
{
|
||||
name = "jsx";
|
||||
auto-format = true;
|
||||
language-servers = webLanguageServers ++ [ "emmet-ls" ];
|
||||
}
|
||||
{
|
||||
name = "typescript";
|
||||
auto-format = true;
|
||||
language-servers = webLanguageServers;
|
||||
}
|
||||
{
|
||||
name = "tsx";
|
||||
auto-format = true;
|
||||
language-servers = webLanguageServers ++ [ "emmet-ls" ];
|
||||
}
|
||||
{
|
||||
name = "css";
|
||||
language-servers = markupLanguageServers "vscode-css-language-server";
|
||||
}
|
||||
{
|
||||
name = "scss";
|
||||
language-servers = markupLanguageServers "vscode-css-language-server";
|
||||
}
|
||||
{
|
||||
name = "less";
|
||||
scope = "source.css.less";
|
||||
injection-regex = "less";
|
||||
file-types = [ "less" ];
|
||||
grammar = "css";
|
||||
block-comment-tokens = {
|
||||
start = "/*";
|
||||
end = "*/";
|
||||
};
|
||||
inherit indent;
|
||||
auto-format = true;
|
||||
language-servers = markupLanguageServers "vscode-css-language-server";
|
||||
}
|
||||
{
|
||||
name = "html";
|
||||
language-servers = markupLanguageServers "vscode-html-language-server";
|
||||
}
|
||||
{
|
||||
name = "rust";
|
||||
inherit indent;
|
||||
}
|
||||
{
|
||||
name = "python";
|
||||
inherit indent;
|
||||
auto-format = true;
|
||||
language-servers = [
|
||||
"ty"
|
||||
"ruff"
|
||||
];
|
||||
formatter = {
|
||||
command = lib.getExe ruffFormatter;
|
||||
args = [ "%{buffer_name}" ];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "astro";
|
||||
auto-format = true;
|
||||
language-servers = [
|
||||
"astro-ls"
|
||||
oxlint
|
||||
"tailwindcss-ls"
|
||||
"emmet-ls"
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "svelte";
|
||||
auto-format = true;
|
||||
language-servers = [
|
||||
oxfmt
|
||||
"svelteserver"
|
||||
oxlint
|
||||
"tailwindcss-ls"
|
||||
"emmet-ls"
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "typst";
|
||||
auto-format = true;
|
||||
}
|
||||
{
|
||||
name = "toml";
|
||||
auto-format = true;
|
||||
language-servers = [ "taplo" ];
|
||||
formatter = {
|
||||
command = "taplo";
|
||||
args = [
|
||||
"format"
|
||||
"--stdin-filepath"
|
||||
"%{buffer_name}"
|
||||
"-"
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "yaml";
|
||||
auto-format = true;
|
||||
language-servers = [ ];
|
||||
formatter = {
|
||||
command = "yamlfmt";
|
||||
args = [ "-" ];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
flake.modules.homeManager.zed = {
|
||||
programs.zed-editor.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -25,6 +25,7 @@ in
|
||||
hmModules.facts
|
||||
hmModules.syncthing
|
||||
hmModules.shell
|
||||
hmModules.helix
|
||||
hmModules.neovim
|
||||
];
|
||||
};
|
||||
|
||||
@@ -43,6 +43,7 @@ in
|
||||
homeModules.passwords
|
||||
homeModules.clipboard
|
||||
homeModules.dev-tools
|
||||
homeModules.zed
|
||||
homeModules.xdg
|
||||
homeModules.workstation-apps
|
||||
homeModules.primary-browser-vivaldi
|
||||
|
||||
Reference in New Issue
Block a user