nix-community.nixvim/wrappers/_shared.nix
Matt Sturgeon 511a328aa3
wrappers: add our lib to the host's _module.args
Make our "extended" lib available to host modules as `_module.args.nixvimLib`.

We didn't do this before because `helpers` was too generic of a name,
but `nixvimLib` should be ok.

    { nixvimLib, ... }: {
        programs.nixvim.someOption = nixvimLib.nixvim.mkRaw "print('Hi')";
    }
2024-08-22 13:19:59 +01:00

78 lines
1.6 KiB
Nix

{
# Option path where extraFiles should go
filesOpt ? null,
# Filepath prefix to apply to extraFiles
filesPrefix ? "nvim/",
# Filepath to use when adding `cfg.initPath` to `filesOpt`
# Is prefixed with `filesPrefix`
initName ? "init.lua",
}:
{
pkgs,
lib,
config,
...
}:
let
inherit (lib)
isAttrs
listToAttrs
map
mkIf
mkMerge
mkOption
mkOptionType
optionalAttrs
setAttrByPath
;
cfg = config.programs.nixvim;
extraFiles = lib.filter (file: file.enable) (lib.attrValues cfg.extraFiles);
in
{
# TODO: Added 2024-07-24; remove after 24.11
imports = [
(lib.mkRenamedOptionModule
[
"nixvim"
"helpers"
]
[
"lib"
"nixvim"
]
)
];
config = mkMerge [
{
# Make our lib available to the host modules
# TODO: import top-level ../lib
lib.nixvim = lib.mkDefault (import ../lib/helpers.nix { inherit pkgs lib; });
# Make nixvim's "extended" lib available to the host's module args
_module.args.nixvimLib = lib.mkDefault config.lib.nixvim.extendedLib;
}
# Propagate extraFiles to the host modules
(optionalAttrs (filesOpt != null) (
mkIf (!cfg.wrapRc) (
setAttrByPath filesOpt (
listToAttrs (
map (
{ target, finalSource, ... }:
{
name = filesPrefix + target;
value = {
source = finalSource;
};
}
) extraFiles
)
// {
${filesPrefix + initName}.source = cfg.initPath;
}
)
)
))
];
}