1# Experimental flake interface to Nixpkgs.
2# See https://github.com/NixOS/rfcs/pull/49 for details.
3{
4 description = "A collection of packages for the Nix package manager";
5
6 outputs = { self }:
7 let
8 jobs = import ./pkgs/top-level/release.nix {
9 nixpkgs = self;
10 };
11
12 lib = import ./lib;
13
14 systems = [
15 "x86_64-linux"
16 "i686-linux"
17 "x86_64-darwin"
18 "aarch64-linux"
19 "armv6l-linux"
20 "armv7l-linux"
21 "aarch64-darwin"
22 ];
23
24 forAllSystems = f: lib.genAttrs systems (system: f system);
25
26 in
27 {
28 lib = lib.extend (final: prev: {
29 nixosSystem = { modules, ... } @ args:
30 import ./nixos/lib/eval-config.nix (args // {
31 modules =
32 let
33 vmConfig = (import ./nixos/lib/eval-config.nix
34 (args // {
35 modules = modules ++ [ ./nixos/modules/virtualisation/qemu-vm.nix ];
36 })).config;
37
38 vmWithBootLoaderConfig = (import ./nixos/lib/eval-config.nix
39 (args // {
40 modules = modules ++ [
41 ./nixos/modules/virtualisation/qemu-vm.nix
42 { virtualisation.useBootLoader = true; }
43 ({ config, ... }: {
44 virtualisation.useEFIBoot =
45 config.boot.loader.systemd-boot.enable ||
46 config.boot.loader.efi.canTouchEfiVariables;
47 })
48 ];
49 })).config;
50 in
51 modules ++ [
52 {
53 system.nixos.versionSuffix =
54 ".${final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";
55 system.nixos.revision = final.mkIf (self ? rev) self.rev;
56
57 system.build = {
58 vm = vmConfig.system.build.vm;
59 vmWithBootLoader = vmWithBootLoaderConfig.system.build.vm;
60 };
61 }
62 ];
63 });
64 });
65
66 checks.x86_64-linux.tarball = jobs.tarball;
67
68 htmlDocs = {
69 nixpkgsManual = jobs.manual;
70 nixosManual = (import ./nixos/release-small.nix {
71 nixpkgs = self;
72 }).nixos.manual.x86_64-linux;
73 };
74
75 legacyPackages = forAllSystems (system: import ./. { inherit system; });
76
77 nixosModules = {
78 notDetected = import ./nixos/modules/installer/scan/not-detected.nix;
79 };
80 };
81}