diff --git a/modules/plugins/languages/nix.nix b/modules/plugins/languages/nix.nix index 655e60b5..74881638 100644 --- a/modules/plugins/languages/nix.nix +++ b/modules/plugins/languages/nix.nix @@ -4,7 +4,8 @@ lib, inputs, ... -}: let +}: +let inherit (builtins) attrNames; inherit (lib) concatStringsSep mkLuaInline; inherit (lib.meta) getExe; @@ -12,8 +13,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.lists) isList; inherit (lib.strings) optionalString; - inherit - (lib.types) + inherit (lib.types) anything attrsOf enum @@ -32,37 +32,32 @@ noFormat = "on_attach = attach_keymaps"; defaultServer = "nil"; - packageToCmd = package: defaultCmd: - if isList package - then expToLua package - else ''{"${package}/bin/${defaultCmd}"}''; + packageToCmd = + package: defaultCmd: + if isList package then expToLua package else ''{"${package}/bin/${defaultCmd}"}''; servers = { nil = { package = inputs.nil.packages.${pkgs.stdenv.system}.nil; internalFormatter = true; lspConfig = ''lspconfig.nil_ls.setup ${ - toLuaObject { - capabilities = mkLuaInline "capabilities"; - on_attach = - if cfg.format.enable - then mkLuaInline "default_on_attach" - else "attach_keymaps"; - cmd = mkLuaInline (packageToCmd cfg.lsp.package "nil"); - settings.nil = - { - formatting.command = - if cfg.format.enable - then - if cfg.format.type == "alejandra" - then ''{"${cfg.format.package}/bin/alejandra", "--quiet"}'' - else if cfg.format.type == "nixfmt" - then ''{"${cfg.format.package}/bin/nixfmt"}'' - else null - else null; - } - // cfg.lsp.options; - } - }''; + toLuaObject { + capabilities = mkLuaInline "capabilities"; + on_attach = if cfg.format.enable then mkLuaInline "default_on_attach" else "attach_keymaps"; + cmd = mkLuaInline (packageToCmd cfg.lsp.package "nil"); + settings.nil = { + formatting.command = + if cfg.format.enable then + if cfg.format.type == "alejandra" then + mkLuaInline ''{"${cfg.format.package}/bin/alejandra", "--quiet"}'' + else if cfg.format.type == "nixfmt" then + mkLuaInline ''{"${cfg.format.package}/bin/nixfmt"}'' + else + null + else + null; + } // cfg.lsp.options; + } + }''; # lspConfig = '' # lspconfig.nil_ls.setup{ # capabilities = capabilities, @@ -99,11 +94,7 @@ lspConfig = '' lspconfig.nixd.setup{ capabilities = capabilities, - ${ - if cfg.format.enable - then useFormat - else noFormat - }, + ${if cfg.format.enable then useFormat else noFormat}, cmd = ${packageToCmd cfg.lsp.package "nixd"}, ${optionalString cfg.format.enable '' settings = { @@ -167,25 +158,22 @@ ''; }; }; -in { +in +{ options.vim.languages.nix = { enable = mkEnableOption "Nix language support"; treesitter = { - enable = - mkEnableOption "Nix treesitter" - // { - default = config.vim.languages.enableTreesitter; - }; + enable = mkEnableOption "Nix treesitter" // { + default = config.vim.languages.enableTreesitter; + }; package = mkGrammarOption pkgs "nix"; }; lsp = { - enable = - mkEnableOption "Nix LSP support" - // { - default = config.vim.lsp.enable; - }; + enable = mkEnableOption "Nix LSP support" // { + default = config.vim.lsp.enable; + }; server = mkOption { description = "Nix LSP server to use"; type = enum (attrNames servers); @@ -207,11 +195,9 @@ in { }; format = { - enable = - mkEnableOption "Nix formatting" - // { - default = config.vim.languages.enableFormat; - }; + enable = mkEnableOption "Nix formatting" // { + default = config.vim.languages.enableFormat; + }; type = mkOption { description = "Nix formatter to use"; @@ -227,11 +213,9 @@ in { }; extraDiagnostics = { - enable = - mkEnableOption "extra Nix diagnostics" - // { - default = config.vim.languages.enableExtraDiagnostics; - }; + enable = mkEnableOption "extra Nix diagnostics" // { + default = config.vim.languages.enableExtraDiagnostics; + }; types = diagnostics { langDesc = "Nix"; @@ -263,7 +247,7 @@ in { (mkIf cfg.treesitter.enable { vim.treesitter.enable = true; - vim.treesitter.grammars = [cfg.treesitter.package]; + vim.treesitter.grammars = [ cfg.treesitter.package ]; }) (mkIf cfg.lsp.enable { @@ -274,7 +258,7 @@ in { (mkIf (cfg.format.enable && (!cfg.lsp.enable || !servers.${cfg.lsp.server}.internalFormatter)) { vim.formatter.conform-nvim = { enable = true; - setupOpts.formatters_by_ft.nix = [cfg.format.type]; + setupOpts.formatters_by_ft.nix = [ cfg.format.type ]; setupOpts.formatters.${cfg.format.type} = { command = getExe cfg.format.package; }; @@ -288,8 +272,7 @@ in { linters = mkMerge ( map (name: { ${name}.cmd = getExe diagnosticsProviders.${name}.package; - }) - cfg.extraDiagnostics.types + }) cfg.extraDiagnostics.types ); }; })