Skip to content

Commit b0f3a36

Browse files
committed
modules/version: init with nixpkgsReleaseCheck
Inspired by `home.version` and `home.enableNixpkgsReleaseCheck` in Home Manager. Print a warning when `lib` or `pkgs` are from a different release to Nixvim.
1 parent cbdfee5 commit b0f3a36

File tree

4 files changed

+120
-0
lines changed

4 files changed

+120
-0
lines changed

modules/misc/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
./context.nix
55
./meta.nix
66
./nixvim-info.nix
7+
./version.nix
78
];
89
}

modules/misc/version.nix

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
{
2+
lib,
3+
pkgs,
4+
config,
5+
options,
6+
...
7+
}:
8+
let
9+
versionInfo = lib.importTOML ../../version-info.toml;
10+
in
11+
{
12+
options.version = {
13+
release = lib.mkOption {
14+
type = lib.types.str;
15+
default = versionInfo.release;
16+
description = "The Nixvim release.";
17+
internal = true;
18+
readOnly = true;
19+
};
20+
21+
isUnstable = lib.mkOption {
22+
type = lib.types.bool;
23+
default = versionInfo.unstable;
24+
description = "Whether Nixvim is from an unstable branch.";
25+
internal = true;
26+
readOnly = true;
27+
};
28+
29+
enableNixpkgsReleaseCheck = lib.mkOption {
30+
type = lib.types.bool;
31+
default = true;
32+
example = false;
33+
description = ''
34+
Whether to check for release version mismatch between Nixvim and Nixpkgs.
35+
36+
Using mismatched versions is likely to cause errors and unexpected behavior.
37+
It is highly recommended to use corresponding Nixvim and Nixpkgs releases.
38+
39+
When this option is enabled and a mismatch is detected,
40+
a warning will be printed when the Nixvim configuration is evaluated.
41+
'';
42+
};
43+
44+
};
45+
46+
config = {
47+
warnings =
48+
let
49+
nixvimRelease = config.version.release;
50+
libRelease = lib.trivial.release;
51+
pkgsRelease = pkgs.lib.trivial.release;
52+
releaseMismatch = nixvimRelease != libRelease || nixvimRelease != pkgsRelease;
53+
in
54+
lib.optional (config.version.enableNixpkgsReleaseCheck && releaseMismatch) ''
55+
You are using${
56+
if libRelease == pkgsRelease then
57+
" Nixvim version ${nixvimRelease} and Nixpkgs version ${libRelease}."
58+
else
59+
''
60+
:
61+
- Nixvim version: ${nixvimRelease}
62+
- Nixpkgs version used to evaluate Nixvim: ${libRelease}
63+
- Nixpkgs version used for packages (`pkgs`): ${pkgsRelease}''
64+
}
65+
66+
Using mismatched versions is likely to cause errors and unexpected behavior.
67+
It is highly recommended to use corresponding Nixvim and Nixpkgs releases.
68+
69+
If you insist, you can disable this warning using:
70+
71+
${options.version.enableNixpkgsReleaseCheck} = false;
72+
'';
73+
};
74+
}

tests/nixpkgs-module.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ let
2424
runNvim = false;
2525
runCommand = runCommandLocal;
2626
};
27+
version.enableNixpkgsReleaseCheck = false;
2728
}
2829
../modules/misc
2930
../modules/top-level/test.nix
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{ pkgs }:
2+
{
3+
invalid-pkgs =
4+
{ lib, config, ... }:
5+
let
6+
versionInfo = lib.importTOML ../../../version-info.toml;
7+
nixvimRelease = versionInfo.release;
8+
pkgsRelease = "<invalid>";
9+
in
10+
{
11+
# The test-suite uses `pkgs = mkForce`, so override it.
12+
# Overlay `pkgs` with an invalid `release`:
13+
_module.args.pkgs = lib.mkOverride 0 (
14+
pkgs.extend (
15+
final: prev: {
16+
lib = prev.lib.extend (
17+
final: prev: {
18+
trivial = prev.trivial // {
19+
release = pkgsRelease;
20+
};
21+
}
22+
);
23+
}
24+
)
25+
);
26+
27+
test.warnings = expect: [
28+
(expect "count" 1)
29+
(expect "any" "You are using:")
30+
(expect "any" "- Nixvim version: ${nixvimRelease}")
31+
(expect "any" "- Nixpkgs version used to evaluate Nixvim: ${nixvimRelease}")
32+
(expect "any" "- Nixpkgs version used for packages (`pkgs`): ${pkgsRelease}")
33+
(expect "any" "If you insist, you can disable this warning using:")
34+
(expect "any" " version.enableNixpkgsReleaseCheck = false;")
35+
];
36+
37+
assertions = [
38+
{
39+
assertion = config.version.release == nixvimRelease;
40+
message = "Expected `config.version.release` to be ${nixvimRelease}, found ${config.version.release}";
41+
}
42+
];
43+
};
44+
}

0 commit comments

Comments
 (0)