mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-22 00:48:58 +02:00
null-ls: init with prettier and flake8 (#31)
This commit is contained in:
parent
f12a79bda6
commit
5cb317a5cb
4 changed files with 128 additions and 0 deletions
|
@ -23,6 +23,8 @@
|
||||||
./languages/treesitter.nix
|
./languages/treesitter.nix
|
||||||
./languages/zig.nix
|
./languages/zig.nix
|
||||||
|
|
||||||
|
./null-ls
|
||||||
|
|
||||||
./nvim-lsp
|
./nvim-lsp
|
||||||
./nvim-lsp/lspsaga.nix
|
./nvim-lsp/lspsaga.nix
|
||||||
|
|
||||||
|
|
47
plugins/null-ls/default.nix
Normal file
47
plugins/null-ls/default.nix
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.programs.nixvim.plugins.null-ls;
|
||||||
|
helpers = (import ../helpers.nix { inherit lib; });
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./servers.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options.programs.nixvim.plugins.null-ls = {
|
||||||
|
enable = mkEnableOption "Enable null-ls";
|
||||||
|
|
||||||
|
debug = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = with types; nullOr bool;
|
||||||
|
};
|
||||||
|
|
||||||
|
sourcesItems = mkOption {
|
||||||
|
default = null;
|
||||||
|
# type = with types; nullOr (either (listOf str) (listOf attrsOf str));
|
||||||
|
type = with types; nullOr (listOf (attrsOf str));
|
||||||
|
description = "The list of sources to enable, should be strings of lua code. Don't use this directly";
|
||||||
|
};
|
||||||
|
|
||||||
|
# sources = mkOption {
|
||||||
|
# default = null;
|
||||||
|
# type = with types; nullOr attrs;
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
options = {
|
||||||
|
debug = cfg.debug;
|
||||||
|
sources = cfg.sourcesItems;
|
||||||
|
};
|
||||||
|
in mkIf cfg.enable {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [ null-ls-nvim ];
|
||||||
|
|
||||||
|
extraConfigLua = ''
|
||||||
|
require("null-ls").setup(${helpers.toLuaObject options})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
46
plugins/null-ls/helpers.nix
Normal file
46
plugins/null-ls/helpers.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
mkServer = {
|
||||||
|
name,
|
||||||
|
sourceType,
|
||||||
|
description ? "Enable ${name} source, for null-ls.",
|
||||||
|
packages ? [],
|
||||||
|
... }:
|
||||||
|
# returns a module
|
||||||
|
{ pkgs, config, lib, ... }@args:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
helpers = import ../helpers.nix args;
|
||||||
|
cfg = config.programs.nixvim.plugins.null-ls.sources.${sourceType}.${name};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.programs.nixvim.plugins.null-ls.sources.${sourceType}.${name} = {
|
||||||
|
enable = mkEnableOption description;
|
||||||
|
|
||||||
|
# TODO: withArgs can exist outside of the module in a generalized manner
|
||||||
|
withArgs = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = with types; nullOr str;
|
||||||
|
description = ''Raw Lua code to be called with the with function'';
|
||||||
|
# Not sure that it makes sense to have the same example for all servers
|
||||||
|
# example = ''
|
||||||
|
# '\'{ extra_args = { "--no-semi", "--single-quote", "--jsx-single-quote" } }'\'
|
||||||
|
# '';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraPackages = packages;
|
||||||
|
|
||||||
|
# Add source to list of sources
|
||||||
|
plugins.null-ls.sourcesItems = let
|
||||||
|
sourceItem = "${sourceType}.${name}";
|
||||||
|
withArgs = if (isNull cfg.withArgs) then sourceItem else "${sourceItem}.with ${cfg.withArgs}";
|
||||||
|
finalString = ''require("null-ls").builtins.${withArgs}'';
|
||||||
|
in [ (helpers.mkRaw finalString) ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
33
plugins/null-ls/servers.nix
Normal file
33
plugins/null-ls/servers.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{ pkgs, config, lib, ... }@args:
|
||||||
|
let
|
||||||
|
helpers = import ./helpers.nix args;
|
||||||
|
serverData = {
|
||||||
|
code_actions = {
|
||||||
|
};
|
||||||
|
completion = {
|
||||||
|
};
|
||||||
|
diagnostics = {
|
||||||
|
};
|
||||||
|
formatting = {
|
||||||
|
prettier = {
|
||||||
|
packages = [ pkgs.nodePackages.prettier ];
|
||||||
|
};
|
||||||
|
flake8 = {
|
||||||
|
packages = [ pkgs.python3Packages.flake8 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Format the servers to be an array of attrs like the following example
|
||||||
|
# [{
|
||||||
|
# name = "prettier";
|
||||||
|
# sourceType = "formatting";
|
||||||
|
# packages = [...];
|
||||||
|
# }]
|
||||||
|
serverDataFormatted = lib.mapAttrsToList (sourceType: sourceSet:
|
||||||
|
lib.mapAttrsToList (name: attrs: attrs // { inherit sourceType name; }) sourceSet
|
||||||
|
) serverData;
|
||||||
|
dataFlattened = lib.flatten serverDataFormatted;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.lists.map (helpers.mkServer) dataFlattened;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue