forked from aylac.top/nixcfg
this repo has no description

if i ever wanna use tailwind

aylac.top 4571d5df b6df3ef9

verified
Changed files
+546 -580
modules
home
profiles
defaultApps
programs
helix
zed-editor
snippets
+27 -10
modules/home/profiles/defaultApps/mimeTypes.nix
···
];
browserFiles = [
-
"application/vnd.mozilla.xul+xml"
-
"application/x-extension-htm"
-
"application/x-extension-html"
-
"application/x-extension-shtml"
-
"application/x-extension-xht"
-
"application/x-extension-xhtml"
-
"application/xhtml+xml"
-
"text/html"
-
"text/xml"
"x-scheme-handler/chrome"
"x-scheme-handler/ftp"
"x-scheme-handler/http"
···
];
editorFiles = [
+
"application/vnd.mozilla.xul+xml"
+
"application/x-extension-htm"
+
"application/x-extension-html"
+
"application/x-extension-shtml"
+
"application/x-extension-xht"
+
"application/x-extension-xhtml"
+
"application/xhtml+xml"
+
"text/html"
+
"text/xml"
+
"application/json"
-
"application/x-shellscript"
"application/x-shellscript"
"text/markdown"
"text/plain"
···
"text/x-typescript"
"text/x-javascript"
"text/x-svelte"
+
"text/css"
+
"text/x-lua"
+
"text/x-nix"
+
"text/x-scss"
+
"application/toml"
+
"text/x-zig"
+
"text/x-gleam"
+
"text/x-glsl"
+
"text/x-gdscript"
+
"text/x-vue"
+
"text/x-go"
+
"text/x-rust"
+
"text/x-makefile"
+
"text/x-fish"
+
"text/x-elixir"
+
"text/html"
+
"application/x-yaml"
];
imageFiles = [
+74 -293
modules/home/programs/helix/default.nix
···
{
config,
lib,
-
pkgs,
...
-
}: {
+
}: let
+
editorCfg = config.mySnippets.editor;
+
+
mkHelixServer = name: srv:
+
lib.filterAttrs (_: v: v != null) (
+
{
+
name = name;
+
command = srv.command;
+
}
+
// (
+
if (srv.args or []) != []
+
then {args = srv.args;}
+
else {}
+
)
+
// (
+
if (lib.isAttrs (srv.config or {}) && (builtins.length (builtins.attrNames srv.config)) > 0)
+
then {config = srv.config;}
+
else {}
+
)
+
);
+
+
mkHelixLanguage = name: lang: let
+
fmtName = lang.helix-formatter or lang.formatter or null;
+
fmt =
+
if fmtName == null
+
then null
+
else editorCfg.formatters.${fmtName};
+
+
usesLspFormatter = fmt != null && fmt.type == "lsp";
+
+
formatter =
+
if fmt != null && fmt.type == "external"
+
then {
+
command = fmt.command;
+
args = fmt.args or [];
+
}
+
else null;
+
+
languageServers =
+
if usesLspFormatter
+
then
+
map (
+
srvName:
+
if srvName == fmt.lspName
+
then {
+
name = srvName;
+
except-features = ["format"];
+
}
+
else {name = srvName;}
+
)
+
lang.language-servers
+
else map (srvName: {name = srvName;}) lang.language-servers;
+
in
+
lib.filterAttrs (_: v: v != null) (
+
{
+
name = lang.name;
+
auto-format = lang.auto-format;
+
language-servers = languageServers;
+
}
+
// (
+
if lang.file-types != []
+
then {file-types = lang.file-types;}
+
else {}
+
)
+
// (
+
if formatter != null
+
then {inherit formatter;}
+
else {}
+
)
+
);
+
in {
options.myHome.programs.helix.enable = lib.mkEnableOption "helix";
config = lib.mkIf config.myHome.programs.helix.enable {
···
};
};
};
-
languages = {
-
language-server = {
-
bash-language-server = {
-
command = lib.getExe pkgs.bash-language-server;
-
args = ["start"];
-
};
-
-
vscode-css-languageserver = {
-
command = pkgs.writeScript "vscode-css-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
fish-lsp = {
-
command = lib.getExe pkgs.fish-lsp;
-
args = ["start"];
-
};
-
lua-language-server = {
-
command = lib.getExe pkgs.lua-language-server;
-
};
-
-
marksman = {
-
command = lib.getExe pkgs.marksman;
-
args = ["server"];
-
};
-
-
nixd = {
-
command = lib.getExe pkgs.nixd;
-
};
-
-
nil = {
-
command = lib.getExe pkgs.nil;
-
};
-
-
vscode-json-languageserver = {
-
command = pkgs.writeScript "vscode-json-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
typescript-language-server = with pkgs.nodePackages; {
-
command = pkgs.writeScript "typescript-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${typescript-language-server}/lib/node_modules/typescript-language-server/lib/cli.mjs "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
superhtml = {
-
command = lib.getExe pkgs.superhtml;
-
args = ["lsp"];
-
};
-
-
biome = {
-
command = lib.getExe pkgs.biome;
-
args = ["lsp-proxy"];
-
config = {
-
format = {"html.formatter.enabled" = true;};
-
};
-
};
-
-
vscode-html-language-server = {
-
command = pkgs.writeScript "vscode-html-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
gopls = {
-
command = lib.getExe pkgs.gopls;
-
args = ["serve"];
-
};
-
-
rust-analyzer = {
-
command = lib.getExe pkgs.rust-analyzer;
-
};
-
-
zls = {
-
command = lib.getExe pkgs.zls;
-
};
-
-
gleam = {
-
command = lib.getExe pkgs.gleam;
-
args = ["lsp"];
-
};
-
-
glsl_analyzer = {
-
command = lib.getExe pkgs.glsl_analyzer;
-
};
-
-
gdscript-language-server = {
-
command = lib.getExe pkgs.netcat;
-
args = ["127.0.0.1" "6005"];
-
language-id = "gdscript";
-
};
-
-
svelte-language-server = {
-
command = pkgs.writeScript "svelte-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.svelte-language-server}/lib/node_modules/svelte-language-server/bin/server.js "$@"
-
'';
-
args = ["--stdio"];
-
};
-
};
-
-
language = [
-
{
-
name = "bash";
-
auto-format = true;
-
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
-
-
formatter = {
-
command = lib.getExe pkgs.shfmt;
-
args = ["-i" "2"];
-
};
-
-
language-servers = ["bash-language-server"];
-
}
-
{
-
name = "css";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-css-languageserver";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "fish";
-
auto-format = true;
-
language-servers = ["fish-lsp"];
-
}
-
{
-
name = "html";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-html-language-server";
-
except-features = ["format"];
-
}
-
{
-
name = "superhtml";
-
except-features = ["format"];
-
}
-
{
-
name = "biome";
-
except-features = ["format"];
-
}
-
];
-
formatter = {
-
command = lib.getExe pkgs.biome;
-
args = ["format" "--use-server" "--html-formatter-enabled=true" "--stdin-file-path=%{buffer_name}"];
-
};
-
}
-
{
-
name = "javascript";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "json";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-json-languageserver";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "jsonc";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-json-languageserver";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "lua";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.stylua;};
-
language-servers = ["lua-language-server"];
-
}
-
{
-
name = "markdown";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.mdformat;};
-
language-servers = ["marksman"];
-
}
-
{
-
name = "nix";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.alejandra;};
-
language-servers = [
-
"nixd"
-
"nil"
-
];
-
}
-
{
-
name = "typescript";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "jsx";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "tsx";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "go";
-
auto-format = true;
-
language-servers = ["gopls"];
-
}
-
{
-
name = "rust";
-
auto-format = true;
-
language-servers = ["rust-analyzer"];
-
}
-
{
-
name = "zig";
-
auto-format = true;
-
language-servers = ["zls"];
-
}
-
{
-
name = "gleam";
-
auto-format = true;
-
language-servers = ["gleam"];
-
}
-
{
-
name = "glsl";
-
auto-format = true;
-
language-servers = ["glsl_analyzer"];
-
}
-
{
-
name = "gdscript";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.gdscript-formatter;};
-
language-servers = ["gdscript-language-server"];
-
}
-
{
-
name = "svelte";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "svelte-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
];
+
languages = {
+
language-server = lib.mapAttrs mkHelixServer editorCfg.languageServers;
+
language = lib.attrValues (lib.mapAttrs mkHelixLanguage editorCfg.languages);
};
};
};
+63 -277
modules/home/programs/zed-editor/default.nix
···
{
lib,
config,
-
pkgs,
...
}: let
-
biome = {
-
formatter = {language_server = {name = "biome";};};
-
code_actions_on_format = {
-
"source.fixAll.biome" = true;
-
"source.organizeImports.biome" = true;
+
editorCfg = config.mySnippets.editor;
+
+
mkZedFormatter = fmtName:
+
if fmtName == null
+
then null
+
else let
+
f = editorCfg.formatters.${fmtName};
+
in
+
if f.type == "external"
+
then {
+
external = {
+
command = f.command;
+
arguments = f.args or [];
+
};
+
}
+
else if f.type == "lsp"
+
then {
+
language_server = {name = f.lspName;};
+
}
+
else null;
+
+
mkZedLanguage = name: lang:
+
lib.filterAttrs (_: v: v != null) {
+
formatter = mkZedFormatter lang.formatter;
+
language_servers = lang.language-servers;
+
code_actions_on_format = lang.code-actions-on-format;
};
-
};
-
prettier = {
-
external = {
-
command = pkgs.writeScript "prettier-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.prettier}/bin/prettier.cjs "$@"
-
'';
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
+
+
mkZedLsp = name: srv: let
+
args = srv.args or [];
+
cfg = srv.config or {};
+
hasArgs = args != [];
+
hasSettings = lib.isAttrs cfg && (builtins.length (builtins.attrNames cfg) > 0);
+
in
+
lib.filterAttrs (_: v: v != null) (
+
{
+
binary = lib.filterAttrs (_: v: v != null) (
+
{path = srv.command;}
+
// (
+
if hasArgs
+
then {arguments = args;}
+
else {}
+
)
+
);
+
}
+
// (
+
if hasSettings
+
then {settings = cfg;}
+
else {}
+
)
+
);
in {
options.myHome.programs.zed-editor.enable = lib.mkEnableOption "zed editor";
···
"glsl"
"gdscript"
"svelte"
+
"vue"
+
"basher"
#"elixir"
];
userSettings = {
···
default_profile = "ask";
};
-
languages = {
-
JavaScript =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
TypeScript =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
TSX =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
JSON =
-
biome
-
// {
-
language_servers = [
-
"json-language-server"
-
"biome"
-
];
-
};
-
JSONC =
-
biome
-
// {
-
language_servers = [
-
"json-language-server"
-
"biome"
-
];
-
};
-
CSS =
-
biome
-
// {
-
language_servers = [
-
"css-language-server"
-
"biome"
-
];
-
};
-
HTML = {
-
formatter = {
-
language_server = {
-
name = "biome";
-
};
-
};
-
code_actions_on_format = {
-
"html.formatter.enabled.biome" = true;
-
};
-
language_servers = ["vscode-html-language-server" "superhtml" "biome"];
-
};
-
Nix = {
-
formatter = "language_server";
-
language_servers = [
-
"nixd"
-
"nil"
-
];
-
};
-
Markdown = {
-
formatter = prettier;
-
language_servers = ["marksman"];
-
};
-
Fish = {
-
formatter = "language_server";
-
language_servers = ["fish-lsp"];
-
};
-
Lua = {
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.stylua;
-
};
-
};
-
language_servers = ["lua-language-server"];
-
};
-
Go = {
-
formatter = "language_server";
-
language_servers = ["gopls"];
-
};
-
Rust = {
-
formatter = "language_server";
-
language_servers = ["rust-analyzer"];
-
};
-
Gleam = {
-
formatter = "language_server";
-
language_servers = ["gleam"];
-
};
-
# Elixir = {
-
# format_on_save = "on";
-
# formatter = "language_server";
-
# language_servers = ["elixir-ls"];
-
# };
-
# HEEX = {
-
# format_on_save = "on";
-
# formatter = "language_server";
-
# language_servers = ["elixir-ls"];
-
# };
-
GLSL = {
-
formatter = "language_server";
-
language_servers = ["glsl_analyzer"];
-
};
-
GDScript = {
-
formatter = {external = {command = lib.getExe pkgs.gdscript-formatter;};};
-
language_servers = ["gdscript-language-server"];
-
};
-
Bash = {
-
language_servers = ["bash-language-server"];
-
};
-
Svelte =
-
biome
-
// {
-
language_servers = [
-
"svelte-language-server"
-
"biome"
-
];
-
};
-
};
-
lsp = {
-
nixd = {
-
binary.path = lib.getExe pkgs.nixd;
-
settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
-
};
-
nil = {
-
binary = {
-
path = lib.getExe pkgs.nil;
-
arguments = ["--stdio"];
-
};
-
};
-
typescript-language-server = with pkgs.nodePackages; {
-
binary = {
-
path = pkgs.writeScript "typescript-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${typescript-language-server}/lib/node_modules/typescript-language-server/lib/cli.mjs "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
json-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-json-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
css-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-css-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
vscode-html-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-html-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
biome = {
-
binary = {
-
path = lib.getExe pkgs.biome;
-
arguments = ["lsp-proxy"];
-
};
-
};
-
superhtml = {
-
binary = {
-
path = lib.getExe pkgs.superhtml;
-
arguments = ["lsp"];
-
};
-
};
-
marksman = {
-
binary = {
-
path = lib.getExe pkgs.marksman;
-
arguments = ["server"];
-
};
-
};
-
fish-lsp = {
-
binary = {
-
path = lib.getExe pkgs.fish-lsp;
-
arguments = ["start"];
-
};
-
};
-
lua-language-server = {
-
binary = {
-
path = lib.getExe pkgs.lua-language-server;
-
};
-
};
-
gopls = {
-
binary = {
-
path = lib.getExe pkgs.gopls;
-
arguments = ["serve"];
-
};
-
};
-
rust-analyzer = {
-
binary = {
-
path = lib.getExe pkgs.rust-analyzer;
-
};
-
};
-
zls = {
-
binary = {
-
path = lib.getExe pkgs.zls;
-
};
-
};
-
gleam = {
-
binary = {
-
path = lib.getExe pkgs.gleam;
-
arguments = ["lsp"];
-
};
-
};
-
glsl_analyzer = {
-
binary = {
-
path = lib.getExe pkgs.glsl_analyzer;
-
};
-
};
-
#elixir-ls = {
-
# binary = {
-
# path = lib.getExe pkgs.elixir-ls;
-
# };
-
#};
-
gdscript-language-server = {
-
binary = {
-
path = lib.getExe pkgs.netcat;
-
arguments = ["127.0.0.1" "6005"];
-
};
-
};
-
bash-language-server = {
-
binary = {
-
path = lib.getExe pkgs.bash-language-server;
-
arguments = ["start"];
-
};
-
};
-
svelte-language-server = {
-
binary = {
-
path = pkgs.writeScript "svelte-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.svelte-language-server}/lib/node_modules/svelte-language-server/bin/server.js "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
};
telemetry = {
diagnostics = false;
metrics = false;
};
+
+
languages = lib.listToAttrs (
+
lib.attrValues (
+
lib.mapAttrs (name: lang: {
+
name = lang.full-name;
+
value = mkZedLanguage name lang;
+
})
+
editorCfg.languages
+
)
+
);
+
lsp = lib.mapAttrs mkZedLsp editorCfg.languageServers;
};
userTasks = [
{
+1
modules/home/snippets/default.nix
···
{...}: {
imports = [
+
./editor
./firefox-based
./git
];
+381
modules/home/snippets/editor/default.nix
···
+
{
+
lib,
+
pkgs,
+
...
+
}: let
+
# Helper function to create language server definitions
+
mkLspServer = name: {
+
command,
+
args ? [],
+
config ? {},
+
}: {
+
inherit name command args config;
+
};
+
+
# Helper function to create formatter definitions
+
mkFormatter = name: {
+
type,
+
command ? null,
+
args ? [],
+
lspName ? null,
+
config ? {},
+
}: {
+
inherit name type command args lspName config;
+
};
+
+
# Helper function to create language definitions
+
mkLanguage = name: {
+
full-name ? name,
+
auto-format ? true,
+
file-types ? [],
+
language-servers ? [],
+
formatter ? null,
+
helix-formatter ? null,
+
code-actions-on-format ? {},
+
}: {
+
inherit name full-name auto-format file-types language-servers formatter helix-formatter code-actions-on-format;
+
};
+
in {
+
options.mySnippets.editor = lib.mkOption {
+
type = lib.types.attrs;
+
default = {};
+
description = "Editor configuration data";
+
};
+
+
config.mySnippets.editor = {
+
# Language Servers
+
languageServers = {
+
biome = mkLspServer "biome" {
+
command = lib.getExe pkgs.biome;
+
args = ["lsp-proxy"];
+
};
+
+
tailwindcss-language-server = mkLspServer "tailwindcss-language-server" {
+
command = let
+
fd = lib.getExe pkgs.fd;
+
xargs = "${pkgs.uutils-findutils}/bin/xargs";
+
grep = lib.getExe pkgs.gnugrep;
+
echo = "${pkgs.uutils-coreutils-noprefix}/bin/echo";
+
bun = lib.getExe pkgs.bun;
+
twls = lib.getExe pkgs.tailwindcss-language-server;
+
in
+
pkgs.writeScript "tailwindcss-language-server-bun" ''
+
#!${lib.getExe pkgs.bash} -e
+
+
if ! ${fd} -H -I -E "node_modules" "package\\.json$" . | \
+
${xargs} ${grep} -q '"tailwindcss"'; then
+
${echo} "No tailwindcss found in project; skipping tailwindcss-language-server." >&2
+
exec tail -f /dev/null
+
fi
+
+
exec ${bun} ${twls}
+
'';
+
args = [];
+
config = {provideFormatter = false;};
+
};
+
+
vscode-html-language-server = mkLspServer "vscode-html-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server" "--stdio"];
+
};
+
+
superhtml = mkLspServer "superhtml" {
+
command = lib.getExe pkgs.superhtml;
+
args = ["lsp"];
+
};
+
+
vscode-css-languageserver = mkLspServer "vscode-css-languageserver" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js" "--stdio"];
+
};
+
+
vscode-json-languageserver = mkLspServer "vscode-json-languageserver" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/bin/vscode-json-languageserver" "--stdio"];
+
};
+
+
typescript-language-server = mkLspServer "typescript-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.nodePackages.typescript-language-server}/lib/node_modules/typescript-language-server/lib/cli.mjs" "--stdio"];
+
};
+
+
svelte-language-server = mkLspServer "svelte-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.svelte-language-server}/lib/node_modules/svelte-language-server/bin/server.js" "--stdio"];
+
};
+
+
vue-language-server = mkLspServer "vue-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vue-language-server}/lib/language-tools/packages/language-server/bin/vue-language-server.js" "--stdio"];
+
};
+
+
bash-language-server = mkLspServer "bash-language-server" {
+
command = lib.getExe pkgs.bash-language-server;
+
args = ["start"];
+
};
+
+
fish-lsp = mkLspServer "fish-lsp" {
+
command = lib.getExe pkgs.fish-lsp;
+
args = ["start"];
+
};
+
+
nixd = mkLspServer "nixd" {
+
command = lib.getExe pkgs.nixd;
+
config.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
};
+
+
nil = mkLspServer "nil" {
+
command = lib.getExe pkgs.nil;
+
args = ["--stdio"];
+
};
+
+
marksman = mkLspServer "marksman" {
+
command = lib.getExe pkgs.marksman;
+
args = ["server"];
+
};
+
+
gopls = mkLspServer "gopls" {
+
command = lib.getExe pkgs.gopls;
+
args = ["serve"];
+
};
+
+
rust-analyzer = mkLspServer "rust-analyzer" {
+
command = lib.getExe pkgs.rust-analyzer;
+
};
+
+
zls = mkLspServer "zls" {
+
command = lib.getExe pkgs.zls;
+
};
+
+
glsl_analyzer = mkLspServer "glsl_analyzer" {
+
command = lib.getExe pkgs.glsl_analyzer;
+
};
+
+
lua-language-server = mkLspServer "lua-language-server" {
+
command = lib.getExe pkgs.lua-language-server;
+
};
+
+
gleam = mkLspServer "gleam" {
+
command = lib.getExe pkgs.gleam;
+
args = ["lsp"];
+
};
+
+
gdscript-language-server = mkLspServer "gdscript-language-server" {
+
command = lib.getExe pkgs.netcat;
+
args = ["127.0.0.1" "6005"];
+
config = {language-id = "gdscript";};
+
};
+
};
+
+
# Formatters
+
formatters = {
+
biome = mkFormatter "biome" {
+
type = "lsp";
+
lspName = "biome";
+
};
+
+
biomeHtml = mkFormatter "biomeHtml" {
+
type = "external";
+
command = lib.getExe pkgs.biome;
+
args = ["format" "--use-server" "--html-formatter-enabled=true" "--stdin-file-path" "{buffer_path}"];
+
};
+
+
shfmt = mkFormatter "shfmt" {
+
type = "external";
+
command = lib.getExe pkgs.shfmt;
+
args = ["-i" "2"];
+
};
+
+
alejandra = mkFormatter "alejandra" {
+
type = "external";
+
command = lib.getExe pkgs.alejandra;
+
};
+
+
mdformat = mkFormatter "mdformat" {
+
type = "external";
+
command = lib.getExe pkgs.mdformat;
+
};
+
+
stylua = mkFormatter "stylua" {
+
type = "external";
+
command = lib.getExe pkgs.stylua;
+
};
+
+
gdscript-formatter = mkFormatter "gdscript-formatter" {
+
type = "external";
+
command = lib.getExe pkgs.gdscript-formatter;
+
};
+
+
prettier = mkFormatter "prettier" {
+
type = "external";
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.prettier}/bin/prettier.cjs" "--stdin-filepath" "{buffer_path}"];
+
};
+
};
+
+
# Languages
+
languages = {
+
html = mkLanguage "html" {
+
full-name = "HTML";
+
language-servers = ["vscode-html-language-server" "superhtml" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
helix-formatter = "biomeHtml";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"html.formatter.enabled.biome" = true;
+
};
+
};
+
+
css = mkLanguage "css" {
+
full-name = "CSS";
+
language-servers = ["vscode-css-languageserver" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
javascript = mkLanguage "javascript" {
+
full-name = "JavaScript";
+
language-servers = ["typescript-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
typescript = mkLanguage "typescript" {
+
full-name = "TypeScript";
+
language-servers = ["typescript-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
jsx = mkLanguage "jsx" {
+
full-name = "JSX";
+
language-servers = ["typescript-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
tsx = mkLanguage "tsx" {
+
full-name = "TSX";
+
language-servers = ["typescript-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
svelte = mkLanguage "svelte" {
+
full-name = "Svelte";
+
language-servers = ["svelte-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
vue = mkLanguage "vue" {
+
full-name = "Vue.js";
+
language-servers = ["vue-language-server" "biome" "tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
json = mkLanguage "json" {
+
full-name = "JSON";
+
language-servers = ["vscode-json-languageserver" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
jsonc = mkLanguage "jsonc" {
+
full-name = "JSONC";
+
language-servers = ["vscode-json-languageserver" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
bash = mkLanguage "bash" {
+
full-name = "Bash";
+
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
+
language-servers = ["bash-language-server"];
+
formatter = "shfmt";
+
};
+
+
fish = mkLanguage "fish" {
+
full-name = "Fish";
+
language-servers = ["fish-lsp"];
+
};
+
+
nix = mkLanguage "nix" {
+
full-name = "Nix";
+
language-servers = ["nixd" "nil"];
+
formatter = "alejandra";
+
};
+
+
markdown = mkLanguage "markdown" {
+
full-name = "Markdown";
+
language-servers = ["marksman"];
+
formatter = "prettier";
+
};
+
+
go = mkLanguage "go" {
+
full-name = "Go";
+
language-servers = ["gopls"];
+
};
+
+
rust = mkLanguage "rust" {
+
full-name = "Rust";
+
language-servers = ["rust-analyzer"];
+
};
+
+
zig = mkLanguage "zig" {
+
full-name = "Zig";
+
language-servers = ["zls"];
+
};
+
+
glsl = mkLanguage "glsl" {
+
full-name = "GLSL";
+
language-servers = ["glsl_analyzer"];
+
};
+
+
lua = mkLanguage "lua" {
+
full-name = "Lua";
+
language-servers = ["lua-language-server"];
+
formatter = "stylua";
+
};
+
+
gleam = mkLanguage "gleam" {
+
full-name = "Gleam";
+
language-servers = ["gleam"];
+
};
+
+
gdscript = mkLanguage "gdscript" {
+
full-name = "GDScript";
+
language-servers = ["gdscript-language-server"];
+
formatter = "gdscript-formatter";
+
};
+
};
+
};
+
}