mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +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/zig.nix
|
||||
|
||||
./null-ls
|
||||
|
||||
./nvim-lsp
|
||||
./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