This is based on the current NixOS `nixpkgs` module, adjusted for the
nix-darwin context and without adding the options due for deprecation
in NixOS.
This gives us the ability to set the package set modularly through
`nixpkgs.pkgs` and builds up infrastructure for handling user-specified
Nixpkgs instantiations more robustly.
The cross-compilation options are currently not very useful due to
even Darwin->Darwin cross-compilation not being wholly functional
yet, but it looks feasible to build an `aarch64-darwin` system from
`x86_64-darwin` with some patching and it should be possible to make
cross-compilation more widely supported after the Darwin SDK situation
in Nixpkgs improves.
One casualty is the error for setting `nixpkgs.*` options when
overriding the package set. That could be ported over to this new
scheme, but it'd increase divergence with the NixOS module and reduce
cross-compatibility of configurations, so I lean towards adding it
upstream to NixOS if anything. (But if people want to keep it I can add
it back.)
This process was automated by [my fork of `nix-doc-munge`]; thanks
to @pennae for writing this tool! It automatically checks that the
resulting documentation doesn't change, although my fork loosens
this a little to ignore some irrelevant whitespace and typographical
differences.
As of this commit there is no DocBook remaining in the options
documentation.
You can play along at home if you want to reproduce this commit:
$ NIX_PATH=nixpkgs=flake:nixpkgs/c1bca7fe84c646cfd4ebf3482c0e6317a0b13f22 \
nix shell nixpkgs#coreutils \
-c find . -name '*.nix' \
-exec nix run github:emilazy/nix-doc-munge/0a7190f600027bf7baf6cb7139e4d69ac2f51062 \
{} +
[my fork of `nix-doc-munge`]: https://github.com/emilazy/nix-doc-munge
These all use DocBook markup too complex for `nix-doc-munge` to handle,
have syntax that clashes with Markdown, or already contain Markdown
syntax that currently isn't rendering correctly.
Converting DocBook list syntax makes me think that maybe Markdown
isn't so bad after all.
These help `nix-munge-doc` automate more of the Markdown conversion
process. See the following nixpkgs commits for explanations of many
of these changes:
* 275a34e0d8
* 694d5b19d3
* f1d39b6d61
* 16102dce2f
I couldn't think of any particularly good way to format the
`system.defaults` breadcrumbs, so I just made them standalone
paragraphs. They weren't rendering correctly in DocBook anyway.
This was
mkDefault { } // filterAttrs () x
which is interpreted as
(mkDefault { }) // (filterAttrs () x)
but the intention is
mkDefault ({ } // filterAttrs () x)
Resulting in lastModified, rev, etc. not being included. This is
essentially just bringing this clause up-to-date with the one from
NixOS.
Stop using `nice` related options like NixOS, and because `launchd`
recommends using `ProcessType` instead. Note this commit also changes
the default `ProcessType` for the `nix-daemon` from `Interactive` to
`Standard`.
Also remove `nix.version` option since it's no longer being used
anywhere, old irrelevant `nix-info` module, and all support for
legacy `nix.profile` option.
This is useful for flake users as they will usually already have an
instantiated Nixpkgs e.g.
let
pkgs = import nixpkgs {
config.allowUnfree = true;
overlays = [ ... ];
}
in darwin.lib.darwinSystem {
inherit pkgs;
}
This change makes `nix-darwin` match the behaviour of NixOS and
`home-manager`.
The nix.useDaemon option enables using a multi-user install without
managing the nix installation with nix-darwin. The following checks
apply to both cases.
Since named entries can be overridden now based on ordering now merging
is only a problem for removing one of the default search paths, in which
case a higher priority eg. mkForce can be used.
{
nix.nixPath = [{ darwin-config = "/darwin.nix"; }];
}
Will result in
[ "darwin-config=/darwin.nix" "/nix/var/nix/profiles/per-user/root/channels" "$HOME/.nix-defexpr/channels" ]
Fixes#137
This gives the option nicer merge behaviour, otherwise setting a named
entry multiple times would result in duplicates which can't be resolved
without overriding the entire list.
This avoids warnings like this if the root or user channel profiles
don't exist.
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
This simplifies using a non default configuration.nix without requiring
a symlink or redefining NIX_PATH.
The nix.nixPath option only defines a default which means defining a value
will drop all of the defaults. This is because correct merge behaviour
isn't very clear for named entries.
This makes rollbacks more reliable, previously you had to fix your PATH
before calling darwin-rebuild. This works now:
$ /nix/var/nix/profiles/system-866-link/sw/bin/darwin-rebuild switch -G 866