Skip to content

Commit

Permalink
lib/modules: pass inputs.nixpkgs into evalNixvim
Browse files Browse the repository at this point in the history
Expose our locked nixpkgs as the `nixpkgs.source` module options.

This only happens when `evalNixvim` is part of a lib that was provided
`flake` as an argument.

Stubbed the `nixpkgs.source` option for now. Eventually, this will be
used to construct `pkgs` internally. For now, it's purely informational.
  • Loading branch information
MattSturgeon committed Dec 15, 2024
1 parent e16d244 commit bef9feb
Show file tree
Hide file tree
Showing 11 changed files with 62 additions and 11 deletions.
13 changes: 10 additions & 3 deletions flake-modules/lib.nix
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
{
self,
config,
lib,
withSystem,
...
}:
{
_module.args.helpers = import ../lib { inherit lib; };
_module.args.helpers = import ../lib {
inherit lib;
flake = self;
};

# TODO: output lib without pkgs at the top-level
flake.lib = lib.genAttrs config.systems (
lib.flip withSystem (
{ pkgs, ... }:
{
# NOTE: this is the publicly documented flake output we've had for a while
check = import ../lib/tests.nix { inherit lib pkgs; };
check = import ../lib/tests.nix { inherit self lib pkgs; };
# TODO: no longer needs to be per-system
helpers = import ../lib { inherit lib; };
helpers = import ../lib {
inherit lib;
flake = self;
};
}
)
);
Expand Down
3 changes: 2 additions & 1 deletion lib/default.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
lib,
flake ? null, # Optionally, provide the lib with access to the flake
_nixvimTests ? false,
}:
lib.fix (
Expand All @@ -18,7 +19,7 @@ lib.fix (
extendedLib = call ./extend-lib.nix { inherit lib; };
keymaps = call ./keymap-helpers.nix { };
lua = call ./to-lua.nix { };
modules = call ./modules.nix { };
modules = call ./modules.nix { inherit flake; };
neovim-plugin = call ./neovim-plugin.nix { };
options = call ./options.nix { };
utils = call ./utils.nix { inherit _nixvimTests; };
Expand Down
11 changes: 10 additions & 1 deletion lib/modules.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
lib,
self,
flake ? null,
}:
let
removed = {
Expand Down Expand Up @@ -29,7 +30,15 @@ in
Nixvim requires a lib that includes some custom extensions, however the `lib` from `specialArgs` does not have a `nixvim` attr.
Remove `lib` from nixvim's `specialArgs` or ensure you apply nixvim's extensions to your `lib`.'';
lib.evalModules {
modules = [ ../modules/top-level ] ++ modules;
modules = modules ++ [
../modules/top-level

# Pass our locked nixpkgs into the configuration
(lib.optionalAttrs (flake != null) {
_file = "<nixvim-flake>";
nixpkgs.source = lib.mkOptionDefault flake.inputs.nixpkgs;
})
];
specialArgs = {
inherit lib;
# TODO: deprecate `helpers`
Expand Down
2 changes: 2 additions & 0 deletions lib/tests.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
self,
pkgs,
lib ? pkgs.lib,
...
Expand Down Expand Up @@ -47,6 +48,7 @@ let
# NOTE: we are importing this just for evalNixvim
helpers = import ../lib {
inherit lib;
flake = self;
# TODO: deprecate helpers.enableExceptInTests,
# add a context option e.g. `config.isTest`?
_nixvimTests = true;
Expand Down
20 changes: 20 additions & 0 deletions modules/top-level/nixpkgs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,21 @@ in
-->
'';
};

# NOTE: This is a nixvim-specific option; there's no equivalent in nixos
source = lib.mkOption {
type = lib.types.path;
# NOTE: default is only set if `flake` is passed to our lib
defaultText = lib.literalMD "Nixvim's flake `input.nixpkgs`";
description = ''
The path to import Nixpkgs from.
Ignored when `nixpkgs.pkgs` is set.
'';

# FIXME: This is a stub option for now
internal = true;
};
};

config =
Expand All @@ -150,5 +165,10 @@ in
# evaluate the wrapper to find out that the priority is lower, and then we
# don't need to evaluate `finalPkgs`.
_module.args.pkgs = lib.mkOverride lib.modules.defaultOverridePriority finalPkgs.__splicedPackages;

# FIXME: This is a stub option for now
warnings = lib.optional (
opt.source.isDefined && opt.source.highestPrio < (lib.mkOptionDefault null).priority
) "Defining the option `nixpkgs.source` currently has no effect";
};
}
2 changes: 1 addition & 1 deletion tests/main.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
}:
let
fetchTests = callTest ./fetch-tests.nix { };
test-derivation = callPackage ../lib/tests.nix { };
test-derivation = callPackage ../lib/tests.nix { inherit self; };
inherit (test-derivation) mkTestDerivationFromNixvimModule;

moduleToTest =
Expand Down
10 changes: 9 additions & 1 deletion wrappers/_shared.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{
# The nixvim flake
self,
# Extra args for the `evalNixvim` call that produces the type for `programs.nixvim`
evalArgs ? { },
# Option path where extraFiles should go
Expand Down Expand Up @@ -57,7 +59,13 @@ in
config = mkMerge [
{
# Make our lib available to the host modules
lib.nixvim = lib.mkDefault (import ../lib { inherit lib; });
# NOTE: user-facing so we must include the legacy `pkgs` argument
lib.nixvim = lib.mkDefault (
import ../lib {
inherit lib;
flake = self;
}
);

# Make nixvim's "extended" lib available to the host's module args
_module.args.nixvimLib = lib.mkDefault config.lib.nixvim.extendedLib;
Expand Down
2 changes: 1 addition & 1 deletion wrappers/darwin.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ in
{
_file = ./darwin.nix;

imports = [ (import ./_shared.nix { inherit evalArgs; }) ];
imports = [ (import ./_shared.nix { inherit self evalArgs; }) ];

config = mkIf cfg.enable {
environment.systemPackages = [
Expand Down
2 changes: 1 addition & 1 deletion wrappers/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ in

imports = [
(import ./_shared.nix {
inherit evalArgs;
inherit self evalArgs;
filesOpt = [
"xdg"
"configFile"
Expand Down
2 changes: 1 addition & 1 deletion wrappers/nixos.nix
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ in

imports = [
(import ./_shared.nix {
inherit evalArgs;
inherit self evalArgs;
filesOpt = [
"environment"
"etc"
Expand Down
6 changes: 5 additions & 1 deletion wrappers/standalone.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ default_pkgs: self:
}:
let
# NOTE: we are importing this just for evalNixvim
helpers = import ../lib { inherit lib _nixvimTests; };
helpers = import ../lib {
inherit lib _nixvimTests;
flake = self;
};

inherit (helpers.modules) evalNixvim;

mkNvim =
Expand Down

0 comments on commit bef9feb

Please sign in to comment.