Compare commits

...

4 commits

Author SHA1 Message Date
DamitusThyYeetus123
0078779e93
Merge 6d07646fae into fd4df3432e 2024-12-03 23:14:06 +00:00
DamitusThyYeetus123
fd4df3432e
languages/astro: init (#481)
* LSP: Add astro

* LSP: Properly add astro

* LSP: Properly actually add astro

* Flake: Fix mnw

* Update flake/develop.nix

Co-authored-by: raf <raf@notashelf.dev>

* Update configuration.nix

Co-authored-by: raf <raf@notashelf.dev>

* Update astro.nix

* Update rl-0.7.md

---------

Co-authored-by: raf <raf@notashelf.dev>
2024-12-03 23:13:56 +00:00
damii
6d07646fae Fix formatting 2024-12-04 09:35:25 +11:00
diniamo
88834cc93f run-nvim: fix keymaps
Some checks are pending
Check for typos in the source tree / check-typos (push) Waiting to run
2024-12-03 16:28:31 +01:00
7 changed files with 182 additions and 15 deletions

View file

@ -48,6 +48,7 @@ isMaximal: {
# Assembly is not common, and the asm LSP is a major hit-or-miss # Assembly is not common, and the asm LSP is a major hit-or-miss
assembly.enable = false; assembly.enable = false;
astro.enable = false;
markdown.enable = isMaximal; markdown.enable = isMaximal;
html.enable = isMaximal; html.enable = isMaximal;
css.enable = isMaximal; css.enable = isMaximal;

View file

@ -383,3 +383,7 @@ The changes are, in no particular order:
[Nowaaru](https://github.com/Nowaaru): [Nowaaru](https://github.com/Nowaaru):
- Add `precognition-nvim`. - Add `precognition-nvim`.
[DamitusThyYeeticus123](https://github.com/DamitusThyYeetus123):
- Add support for [Astro](https://astro.build/) language server.

View file

@ -38,11 +38,11 @@
}, },
"mnw": { "mnw": {
"locked": { "locked": {
"lastModified": 1733021555, "lastModified": 1731821965,
"narHash": "sha256-bc+reHXXfdn94MnDsqBrNm2ojOnJfbd64e00nzsP0EI=", "narHash": "sha256-QiGi/HBQRnIRGY4gQPuH7T3hr7NznOpEO7qNpF5ldmE=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "mnw", "repo": "mnw",
"rev": "6841d93fe50eb335da45e11d4dabaa1844f3f79a", "rev": "5fe5c41975ed0af55f55dc37cd28ba906a5d015e",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -77,7 +77,7 @@ in {
-- buffer is a real file on the disk -- buffer is a real file on the disk
local real_file = vim.fn.filereadable(data.file) == 1 local real_file = vim.fn.filereadable(data.file) == 1
-- buffer is a directory -- buffer is a directory
local directory = vim.fn.isdirectory(data.file) == 1 local directory = vim.fn.isdirectory(data.file) == 1
-- buffer is a [No Name] -- buffer is a [No Name]

View file

@ -0,0 +1,159 @@
{
config,
pkgs,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.meta) getExe;
inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.languages) diagnosticsToLua;
inherit (lib.nvim.types) mkGrammarOption diagnostics;
cfg = config.vim.languages.astro;
defaultServer = "astro";
servers = {
astro = {
package = pkgs.astro-language-server;
lspConfig = ''
lspconfig.astro.setup {
capabilities = capabilities;
on_attach = attach_keymaps,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/astro-ls", "--stdio"}''
}
}
'';
};
};
# TODO: specify packages
defaultFormat = "prettier";
formats = {
prettier = {
package = pkgs.nodePackages.prettier;
nullConfig = ''
table.insert(
ls_sources,
null_ls.builtins.formatting.prettier.with({
command = "${cfg.format.package}/bin/prettier",
})
)
'';
};
biome = {
package = pkgs.biome;
nullConfig = ''
table.insert(
ls_sources,
null_ls.builtins.formatting.biome.with({
command = "${cfg.format.package}/bin/biome",
})
)
'';
};
};
# TODO: specify packages
defaultDiagnosticsProvider = ["eslint_d"];
diagnosticsProviders = {
eslint_d = {
package = pkgs.eslint_d;
nullConfig = pkg: ''
table.insert(
ls_sources,
null_ls.builtins.diagnostics.eslint_d.with({
command = "${getExe pkg}",
})
)
'';
};
};
in {
options.vim.languages.astro = {
enable = mkEnableOption "Astro language support";
treesitter = {
enable = mkEnableOption "Astro treesitter" // {default = config.vim.languages.enableTreesitter;};
astroPackage = mkGrammarOption pkgs "astro";
};
lsp = {
enable = mkEnableOption "Astro LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
description = "Astro LSP server to use";
type = enum (attrNames servers);
default = defaultServer;
};
package = mkOption {
description = "Astro LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.astro-language-server "--minify" "--stdio"]'';
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
};
};
format = {
enable = mkEnableOption "Astro formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption {
description = "Astro formatter to use";
type = enum (attrNames formats);
default = defaultFormat;
};
package = mkOption {
description = "Astro formatter package";
type = package;
default = formats.${cfg.format.type}.package;
};
};
extraDiagnostics = {
enable = mkEnableOption "extra Astro diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;};
types = diagnostics {
langDesc = "Astro";
inherit diagnosticsProviders;
inherit defaultDiagnosticsProvider;
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.astroPackage];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.astro-lsp = servers.${cfg.lsp.server}.lspConfig;
})
(mkIf cfg.format.enable {
vim.lsp.null-ls.enable = true;
vim.lsp.null-ls.sources.astro-format = formats.${cfg.format.type}.nullConfig;
})
(mkIf cfg.extraDiagnostics.enable {
vim.lsp.null-ls.enable = true;
vim.lsp.null-ls.sources = diagnosticsToLua {
lang = "astro";
config = cfg.extraDiagnostics.types;
inherit diagnosticsProviders;
};
})
]);
}

View file

@ -3,6 +3,7 @@
in { in {
imports = [ imports = [
./asm.nix ./asm.nix
./astro.nix
./bash.nix ./bash.nix
./dart.nix ./dart.nix
./clang.nix ./clang.nix

View file

@ -5,11 +5,10 @@
... ...
}: let }: let
inherit (lib.modules) mkIf mkDefault; inherit (lib.modules) mkIf mkDefault;
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLznBinding mkSetLuaLznBinding; inherit (lib.nvim.binds) mkKeymap;
cfg = config.vim.runner.run-nvim; cfg = config.vim.runner.run-nvim;
mappingDefinitions = options.vim.runner.run-nvim.mappings; inherit (options.vim.runner.run-nvim) mappings;
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim = { vim = {
@ -21,14 +20,17 @@ in {
cmd = "Run"; cmd = "Run";
keys = [ keys = [
(mkSetLznBinding "n" mappings.run "<cmd>Run<CR>") (mkKeymap "n" cfg.mappings.run "<cmd>Run<CR>" {desc = mappings.run.description;})
(mkSetLznBinding "n" mappings.runOverride "<cmd>Run!<CR>") (mkKeymap "n" cfg.mappings.runOverride "<cmd>Run!<CR>" {desc = mappings.runOverride.description;})
(mkSetLuaLznBinding "n" mappings.runCommand '' (mkKeymap "n" cfg.mappings.runCommand ''
function() function()
local input = vim.fn.input("Run command: ") local input = vim.fn.input("Run command: ")
if input ~= "" then require("run").run(input, false) end if input ~= "" then require("run").run(input, false) end
end end
'') '' {
desc = mappings.run.description;
lua = true;
})
]; ];
}; };