171 lines
4.4 KiB
Nix
171 lines
4.4 KiB
Nix
{ config, inputs, ... }:
|
|
let
|
|
homeModules = config.flake.modules.homeManager;
|
|
in
|
|
{
|
|
flake.modules.nixos.helix-cache = {
|
|
nix.settings = {
|
|
extra-substituters = [ "https://helix.cachix.org" ];
|
|
extra-trusted-public-keys = [
|
|
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
|
|
];
|
|
};
|
|
};
|
|
|
|
flake.modules.homeManager.helix =
|
|
{ pkgs, ... }:
|
|
let
|
|
svelteLanguageServer = (import ./_svelte-language-server.nix { inherit pkgs; }).overrideAttrs (
|
|
_: previousAttrs: {
|
|
postInstall = (previousAttrs.postInstall or "") + ''
|
|
# @vscode/emmet-helper only enables JSX expansion for JSX syntax;
|
|
# Helix's Svelte HTML regions also need it for HTML syntax.
|
|
substituteInPlace \
|
|
"$out/lib/node_modules/svelte-language-server/packages/language-server/node_modules/@vscode/emmet-helper/lib/cjs/emmetHelper.js" \
|
|
--replace-fail \
|
|
"'jsx.enabled': syntax === 'jsx'," \
|
|
"'jsx.enabled': syntax === 'jsx' || syntax === 'html',"
|
|
'';
|
|
}
|
|
);
|
|
in
|
|
{
|
|
programs.helix = {
|
|
enable = true;
|
|
package = inputs.helix.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
extraPackages = with pkgs; [
|
|
vtsls
|
|
svelteLanguageServer
|
|
tailwindcss-language-server
|
|
|
|
nixd
|
|
nixfmt
|
|
oxfmt
|
|
|
|
simple-completion-language-server
|
|
|
|
odin
|
|
ols
|
|
|
|
rust-analyzer
|
|
rustfmt
|
|
cargo
|
|
|
|
zig
|
|
zls
|
|
lldb
|
|
];
|
|
|
|
settings = {
|
|
theme = "kanagawa-custom";
|
|
editor = {
|
|
soft-wrap.enable = true;
|
|
lsp = {
|
|
auto-document-highlight = true;
|
|
display-inlay-hints = false;
|
|
};
|
|
rainbow-brackets = true;
|
|
line-number = "relative";
|
|
cursorline = true;
|
|
gutters = [
|
|
"code-action-hint"
|
|
"diagnostics"
|
|
"spacer"
|
|
"line-numbers"
|
|
"spacer"
|
|
"diff"
|
|
];
|
|
color-modes = true;
|
|
cursor-shape = {
|
|
insert = "bar";
|
|
normal = "block";
|
|
select = "underline";
|
|
};
|
|
};
|
|
};
|
|
|
|
themes.kanagawa-custom = {
|
|
inherits = "kanagawa";
|
|
"ui.highlight".underline = {
|
|
color = "dragonBlue";
|
|
style = "line";
|
|
};
|
|
};
|
|
|
|
languages = {
|
|
language-server.scls = {
|
|
command = "simple-completion-language-server";
|
|
environment.SNIPPETS_PATH = "${pkgs.vimPlugins.friendly-snippets}/snippets";
|
|
};
|
|
|
|
language-server.vtsls.config.vtsls.autoUseWorkspaceTsdk = true;
|
|
|
|
language = [
|
|
{
|
|
name = "javascript";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "jsx";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "typescript";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "tsx";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "svelte";
|
|
formatter = {
|
|
command = "${pkgs.coreutils}/bin/env";
|
|
args = [
|
|
"NODE_PATH=%{workspace_directory}/node_modules"
|
|
"oxfmt"
|
|
"--stdin-filepath=%{buffer_name}"
|
|
];
|
|
};
|
|
auto-format = true;
|
|
language-servers = [
|
|
"scls"
|
|
"svelteserver"
|
|
"tailwindcss-ls"
|
|
];
|
|
}
|
|
{
|
|
name = "nix";
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "rust";
|
|
auto-format = true;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
flake.modules.homeManager.primary-editor-helix = {
|
|
imports = [ homeModules.helix ];
|
|
programs.helix.defaultEditor = true;
|
|
};
|
|
}
|