mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-11-17 06:06:13 +03:00
flake: fix lib.trivial.version
when used from a flake
A lot of fetchers from Nix's own `libfetchers` also provide the information that `lib.trivial` aims to expose with `version`/`versionSuffix`/`revision`. In fact you don't even need a `nixpkgs` channel to get a proper version suffix because of that! Unfortunately this isn't used currently. When using the nixpkgs flake, but not `nixpkgs.lib.nixosSystem` to build a NixOS configuration, the version will always be `YY.MMpre-git`. One example is e.g. `colmena` which evaluates configurations via `import (npkgs.path + "/nixos/lib/eval-config.nix")`. This patch ensures that the version suffix (i.e. the normalized last modified date + git revision) is correctly exposed in `lib.trivial`. Additionally, the change is injected into the following locations: * `lib`: with that, something like $ nix eval nixpkgs#lib.trivial.version 23.05.20230921.cf8bf79 is working fine (i.e. rather than `23.05pre-git`). * `legacyPackages` to make sure that e.g. `legacyPackages.<system>.nixos` has correct version info. This also applies to everything else using `pkgs.lib.trivial` for that purpose. * `overlays.default` which can be applied to a `nixpkgs` and changes the previous `pkgs.lib` from said `nixpkgs` to also contain the correct `version`/`revision`/etc.. This is useful for people using `nixpkgs` as flake input, but importing it manually with import inputs.nixpkgs { } Co-authored-by: Linus Heckemann <git@sphalerite.org>
This commit is contained in:
parent
515794d98d
commit
039f73f134
28
flake.nix
28
flake.nix
@ -9,24 +9,31 @@
|
|||||||
nixpkgs = self;
|
nixpkgs = self;
|
||||||
};
|
};
|
||||||
|
|
||||||
lib = import ./lib;
|
lib = (import ./lib).extend libVersionInfoOverlay;
|
||||||
|
|
||||||
|
libVersionInfoOverlay = finalLib: prevLib: {
|
||||||
|
trivial = prevLib.trivial // {
|
||||||
|
versionSuffix =
|
||||||
|
".${finalLib.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";
|
||||||
|
version = finalLib.trivial.release + finalLib.trivial.versionSuffix;
|
||||||
|
revisionWithDefault = default: self.rev or default;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
forAllSystems = lib.genAttrs lib.systems.flakeExposed;
|
forAllSystems = lib.genAttrs lib.systems.flakeExposed;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
overlays.setLibVersionInfo = final: prev: {
|
||||||
|
lib = prev.lib.extend libVersionInfoOverlay;
|
||||||
|
};
|
||||||
|
|
||||||
lib = lib.extend (final: prev: {
|
lib = lib.extend (final: prev: {
|
||||||
|
|
||||||
nixos = import ./nixos/lib { lib = final; };
|
nixos = import ./nixos/lib { lib = final; };
|
||||||
|
|
||||||
nixosSystem = args:
|
nixosSystem = args:
|
||||||
import ./nixos/lib/eval-config.nix (
|
import ./nixos/lib/eval-config.nix (
|
||||||
args // {
|
args // { inherit (self) lib; } // lib.optionalAttrs (! args?system) {
|
||||||
modules = args.modules ++ [{
|
|
||||||
system.nixos.versionSuffix =
|
|
||||||
".${final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";
|
|
||||||
system.nixos.revision = final.mkIf (self ? rev) self.rev;
|
|
||||||
}];
|
|
||||||
} // lib.optionalAttrs (! args?system) {
|
|
||||||
# Allow system to be set modularly in nixpkgs.system.
|
# Allow system to be set modularly in nixpkgs.system.
|
||||||
# We set it to null, to remove the "legacy" entrypoint's
|
# We set it to null, to remove the "legacy" entrypoint's
|
||||||
# non-hermetic default.
|
# non-hermetic default.
|
||||||
@ -53,7 +60,10 @@
|
|||||||
# attribute it displays `omitted` instead of evaluating all packages,
|
# attribute it displays `omitted` instead of evaluating all packages,
|
||||||
# which keeps `nix flake show` on Nixpkgs reasonably fast, though less
|
# which keeps `nix flake show` on Nixpkgs reasonably fast, though less
|
||||||
# information rich.
|
# information rich.
|
||||||
legacyPackages = forAllSystems (system: import ./. { inherit system; });
|
legacyPackages = forAllSystems (system: import ./. {
|
||||||
|
inherit system;
|
||||||
|
overlays = [ self.overlays.setLibVersionInfo ];
|
||||||
|
});
|
||||||
|
|
||||||
nixosModules = {
|
nixosModules = {
|
||||||
notDetected = ./nixos/modules/installer/scan/not-detected.nix;
|
notDetected = ./nixos/modules/installer/scan/not-detected.nix;
|
||||||
|
Loading…
Reference in New Issue
Block a user