mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
72 lines
1.8 KiB
Nix
72 lines
1.8 KiB
Nix
modules: {
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
helpers,
|
|
...
|
|
}: let
|
|
inherit (lib) types;
|
|
fileModuleType = types.submoduleWith {
|
|
shorthandOnlyDefinesConfig = true;
|
|
specialArgs.helpers = helpers;
|
|
modules = [
|
|
({
|
|
name,
|
|
config,
|
|
...
|
|
}: {
|
|
imports = modules;
|
|
options.plugin = lib.mkOption {
|
|
type = types.package;
|
|
description = "A derivation with the content of the file in it";
|
|
readOnly = true;
|
|
internal = true;
|
|
};
|
|
config = {
|
|
path = name;
|
|
type = lib.mkDefault (
|
|
if lib.hasSuffix ".vim" name
|
|
then "vim"
|
|
else "lua"
|
|
);
|
|
plugin = pkgs.writeTextDir config.path config.content;
|
|
};
|
|
})
|
|
];
|
|
};
|
|
in {
|
|
options = {
|
|
files = lib.mkOption {
|
|
type = types.attrsOf fileModuleType;
|
|
description = "Files to include in the Vim config.";
|
|
default = {};
|
|
};
|
|
|
|
filesPlugin = lib.mkOption {
|
|
type = types.package;
|
|
description = "A derivation with all the files inside.";
|
|
internal = true;
|
|
readOnly = true;
|
|
};
|
|
};
|
|
|
|
config = let
|
|
inherit (config) files;
|
|
concatFilesOption = attr:
|
|
lib.flatten (lib.mapAttrsToList (_: builtins.getAttr attr) files);
|
|
in {
|
|
# Each file can declare plugins/packages/warnings/assertions
|
|
extraPlugins = concatFilesOption "extraPlugins";
|
|
extraPackages = concatFilesOption "extraPackages";
|
|
warnings = concatFilesOption "warnings";
|
|
assertions = concatFilesOption "assertions";
|
|
|
|
# A directory with all the files in it
|
|
filesPlugin = pkgs.buildEnv {
|
|
name = "nixvim-config";
|
|
paths =
|
|
(lib.mapAttrsToList (_: file: file.plugin) files)
|
|
++ (lib.mapAttrsToList pkgs.writeTextDir config.extraFiles);
|
|
};
|
|
};
|
|
}
|