mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
modules/nixpkgs: construct an instance of nixpkgs.source
This commit is contained in:
parent
8dc8fa38b0
commit
912841c1a7
3 changed files with 81 additions and 37 deletions
|
@ -54,17 +54,7 @@ in
|
|||
description = ''
|
||||
If set, the `pkgs` argument to all Nixvim modules is the value of this option.
|
||||
|
||||
<!-- TODO: remove -->
|
||||
If unset, an assertion will trigger. In the future a `pkgs` instance will be constructed.
|
||||
|
||||
<!--
|
||||
TODO:
|
||||
If unset, the pkgs argument is determined as shown in the default value for this option.
|
||||
|
||||
TODO:
|
||||
The default value imports the Nixpkgs input specified in Nixvim's `flake.lock`.
|
||||
The `config`, `overlays`, `localSystem`, and `crossSystem` come from this option's siblings.
|
||||
-->
|
||||
If unset, the `pkgs` argument is determined by importing `nixpkgs.source`.
|
||||
|
||||
This option can be used by external applications to increase the performance of evaluation,
|
||||
or to create packages that depend on a container that should be built with the exact same
|
||||
|
@ -160,15 +150,8 @@ in
|
|||
|
||||
For details, see the [Overlays chapter in the Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#chap-overlays).
|
||||
|
||||
<!-- TODO: Remove -->
|
||||
Overlays specified using the {option}`nixpkgs.overlays` option will be
|
||||
applied after the overlays that were already included in `nixpkgs.pkgs`.
|
||||
|
||||
<!--
|
||||
TODO:
|
||||
If the {option}`nixpkgs.pkgs` option is set, overlays specified using `nixpkgs.overlays`
|
||||
will be applied after the overlays that were already included in `nixpkgs.pkgs`.
|
||||
-->
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -228,26 +211,33 @@ in
|
|||
|
||||
Ignored when `nixpkgs.pkgs` is set.
|
||||
'';
|
||||
|
||||
# FIXME: This is a stub option for now
|
||||
internal = true;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
# TODO: construct a default pkgs instance from pkgsPath and cfg options
|
||||
# https://github.com/nix-community/nixvim/issues/1784
|
||||
|
||||
finalPkgs =
|
||||
if opt.pkgs.isDefined then
|
||||
cfg.pkgs.appendOverlays cfg.overlays
|
||||
else
|
||||
# TODO: Remove once pkgs can be constructed internally
|
||||
throw ''
|
||||
nixvim: `nixpkgs.pkgs` is not defined. In the future, this option will be optional.
|
||||
Currently a pkgs instance must be evaluated externally and assigned to `nixpkgs.pkgs` option.
|
||||
'';
|
||||
let
|
||||
args = {
|
||||
inherit (cfg) config overlays;
|
||||
};
|
||||
|
||||
# Configure `localSystem` and `crossSystem` as required
|
||||
systemArgs =
|
||||
if cfg.buildPlatform == cfg.hostPlatform then
|
||||
{
|
||||
localSystem = cfg.hostPlatform;
|
||||
}
|
||||
else
|
||||
{
|
||||
localSystem = cfg.buildPlatform;
|
||||
crossSystem = cfg.hostPlatform;
|
||||
};
|
||||
in
|
||||
import cfg.source (args // systemArgs);
|
||||
in
|
||||
{
|
||||
# We explicitly set the default override priority, so that we do not need
|
||||
|
@ -258,11 +248,6 @@ in
|
|||
# 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";
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = opt.pkgs.isDefined -> cfg.config == { };
|
||||
|
|
15
tests/nixpkgs-mock.nix
Normal file
15
tests/nixpkgs-mock.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
# This mock nixpkgs can be used as `nixpkgs.source` in nixpkgs-module-test
|
||||
# if we want/need to avoid importing & instantiating a real nixpkgs
|
||||
{
|
||||
config ? { },
|
||||
...
|
||||
}:
|
||||
let
|
||||
pkgs = {
|
||||
_type = "pkgs";
|
||||
__splicedPackages = pkgs;
|
||||
inherit config pkgs;
|
||||
mock = true;
|
||||
};
|
||||
in
|
||||
pkgs
|
|
@ -36,7 +36,51 @@ let
|
|||
in
|
||||
linkFarmFromDrvs "nixpkgs-module-test" [
|
||||
|
||||
# TODO: expect not setting `nixpkgs.pkgs` to throw
|
||||
# Test that pkgs-config is affected by `nixpkgs.config`
|
||||
(testModule "nixpkgs-config" (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
nixpkgs.config = {
|
||||
permittedInsecurePackages = [
|
||||
"foobar123"
|
||||
];
|
||||
};
|
||||
|
||||
nixpkgs.hostPlatform = {
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = pkgs.config.permittedInsecurePackages == [ "foobar123" ];
|
||||
message = ''
|
||||
Expected `pkgs.config.permittedInsecurePackages` to match [ "foobar123" ], but found:
|
||||
${lib.generators.toPretty { } pkgs.config.permittedInsecurePackages}'';
|
||||
}
|
||||
];
|
||||
}
|
||||
))
|
||||
|
||||
# Test that a nixpkgs revision can be specified using `nixpkgs.source`
|
||||
(testModule "nixpkgs-source" (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
nixpkgs.source = ./nixpkgs-mock.nix;
|
||||
|
||||
nixpkgs.hostPlatform = {
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = pkgs.mock or false;
|
||||
message = "Expected `pkgs.mock` to be true, but ${
|
||||
if pkgs ? mock then "found " + lib.generators.toPretty { } pkgs.mock else "isn't present"
|
||||
}";
|
||||
}
|
||||
];
|
||||
}
|
||||
))
|
||||
|
||||
(testModule "nixpkgs-overlays" (
|
||||
{ pkgs, ... }:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue