summaryrefslogtreecommitdiff
path: root/eval-config.nix
blob: 5014c6c9ebf4bbff1db9db9be7d46f36a4096d96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
let
  nixDarwinVersion = builtins.fromJSON (builtins.readFile ./version.json);

  checkRelease = lib:
    # Avoid breaking configurations when the unstable Nixpkgs version
    # rolls over.
    #
    # TODO: Something more refined than this would be ideal, as this
    # still means you could be using unstable nix-darwin 25.05 with
    # Nixpkgs 26.05, which would be unfortunate.
    if nixDarwinVersion.isReleaseBranch then
      lib.trivial.release == nixDarwinVersion.release
    else
      lib.versionAtLeast lib.trivial.release nixDarwinVersion.release;
in

{ lib
, modules
, baseModules ? import ./modules/module-list.nix
, specialArgs ? { }
, check ? true
, enableNixpkgsReleaseCheck ? true
}@args:

assert enableNixpkgsReleaseCheck -> checkRelease lib || throw ''

  nix-darwin now uses release branches that correspond to Nixpkgs releases.
  The nix-darwin and Nixpkgs branches in use must match, but you are currently
  using nix-darwin ${nixDarwinVersion.release} with Nixpkgs ${lib.trivial.release}.

  On macOS, you should use either the `nixpkgs-unstable` or
  `nixpkgs-YY.MM-darwin` branches of Nixpkgs. These correspond to the
  `master` and `nix-darwin-YY.MM` branches of nix-darwin, respectively. Check
  <https://status.nixos.org/> for the currently supported Nixpkgs releases.

  If you’re using flakes, make sure your inputs look like this:

      inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs/NIXPKGS-BRANCH";
        nix-darwin.url = "github:LnL7/nix-darwin/NIX-DARWIN-BRANCH";
        nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
        # …
      };

  If you’re using channels, you can check your current channels with:

      $ sudo nix-channel --list
      nixpkgs https://nixos.org/channels/NIXPKGS-BRANCH
      darwin https://github.com/LnL7/nix-darwin/archive/NIX-DARWIN-BRANCH.tar.gz

      $ nix-channel --list


  If `darwin` or `nixpkgs` are present in `nix-channel --list` (without
  `sudo`), you should delete them with `nix-channel --remove NAME`. These can
  contribute to version mismatch problems.

  You can then fix your channels like this:

      $ sudo nix-channel --add https://nixos.org/channels/NIXPKGS-BRANCH nixpkgs
      $ sudo nix-channel --add https://github.com/LnL7/nix-darwin/archive/NIX-DARWIN-BRANCH.tar.gz darwin
      $ sudo nix-channel --update

  After that, activating your system again should work correctly. If it
  doesn’t, please open an issue at
  <https://github.com/LnL7/nix-darwin/issues/new> and include as much
  information as possible.
'';

let
  argsModule = {
    _file = ./eval-config.nix;
    config = {
      _module.args = {
        inherit baseModules modules;
      };
    };
  };

  eval = lib.evalModules (builtins.removeAttrs args [ "lib" ] // {
    class = "darwin";
    modules = modules ++ [ argsModule ] ++ baseModules;
    specialArgs = { modulesPath = builtins.toString ./modules; } // specialArgs;
  });
in

{
  inherit (eval._module.args) pkgs;
  inherit (eval) options config;
  inherit (eval) _module;

  system = eval.config.system.build.toplevel;
}