Merge branch 'master' into headphones
This commit is contained in:
@@ -1,8 +1,72 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ config, lib, pkgs, baseModules, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.documentation; in
|
||||
let
|
||||
|
||||
cfg = config.documentation;
|
||||
|
||||
/* For the purpose of generating docs, evaluate options with each derivation
|
||||
in `pkgs` (recursively) replaced by a fake with path "\${pkgs.attribute.path}".
|
||||
It isn't perfect, but it seems to cover a vast majority of use cases.
|
||||
Caveat: even if the package is reached by a different means,
|
||||
the path above will be shown and not e.g. `${config.services.foo.package}`. */
|
||||
manual = import ../../doc/manual rec {
|
||||
inherit pkgs config;
|
||||
version = config.system.nixos.release;
|
||||
revision = "release-${version}";
|
||||
options =
|
||||
let
|
||||
scrubbedEval = evalModules {
|
||||
modules = [ { nixpkgs.localSystem = config.nixpkgs.localSystem; } ] ++ baseModules;
|
||||
args = (config._module.args) // { modules = [ ]; };
|
||||
specialArgs = { pkgs = scrubDerivations "pkgs" pkgs; };
|
||||
};
|
||||
scrubDerivations = namePrefix: pkgSet: mapAttrs
|
||||
(name: value:
|
||||
let wholeName = "${namePrefix}.${name}"; in
|
||||
if isAttrs value then
|
||||
scrubDerivations wholeName value
|
||||
// (optionalAttrs (isDerivation value) { outPath = "\${${wholeName}}"; })
|
||||
else value
|
||||
)
|
||||
pkgSet;
|
||||
in scrubbedEval.options;
|
||||
};
|
||||
|
||||
helpScript = pkgs.writeScriptBin "nixos-help"
|
||||
''
|
||||
#! ${pkgs.runtimeShell} -e
|
||||
# Finds first executable browser in a colon-separated list.
|
||||
# (see how xdg-open defines BROWSER)
|
||||
browser="$(
|
||||
IFS=: ; for b in $BROWSER; do
|
||||
[ -n "$(type -P "$b" || true)" ] && echo "$b" && break
|
||||
done
|
||||
)"
|
||||
if [ -z "$browser" ]; then
|
||||
browser="$(type -P xdg-open || true)"
|
||||
if [ -z "$browser" ]; then
|
||||
browser="$(type -P w3m || true)"
|
||||
if [ -z "$browser" ]; then
|
||||
echo "$0: unable to start a web browser; please set \$BROWSER"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
exec "$browser" ${manual.manualHTMLIndex}
|
||||
'';
|
||||
|
||||
desktopItem = pkgs.makeDesktopItem {
|
||||
name = "nixos-manual";
|
||||
desktopName = "NixOS Manual";
|
||||
genericName = "View NixOS documentation in a web browser";
|
||||
icon = "nix-snowflake";
|
||||
exec = "${helpScript}/bin/nixos-help";
|
||||
categories = "System";
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
@@ -66,6 +130,22 @@ let cfg = config.documentation; in
|
||||
'';
|
||||
};
|
||||
|
||||
nixos.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to install NixOS's own documentation.
|
||||
<itemizedlist>
|
||||
<listitem><para>This includes man pages like
|
||||
<citerefentry><refentrytitle>configuration.nix</refentrytitle>
|
||||
<manvolnum>5</manvolnum></citerefentry> if <option>man.enable</option> is
|
||||
set.</para></listitem>
|
||||
<listitem><para>This includes the HTML manual and the <command>nixos-help</command> command if
|
||||
<option>doc.enable</option> is set.</para></listitem>
|
||||
</itemizedlist>
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
@@ -76,6 +156,7 @@ let cfg = config.documentation; in
|
||||
environment.systemPackages = [ pkgs.man-db ];
|
||||
environment.pathsToLink = [ "/share/man" ];
|
||||
environment.extraOutputsToInstall = [ "man" ] ++ optional cfg.dev.enable "devman";
|
||||
environment.etc."man.conf".source = "${pkgs.man-db}/etc/man_db.conf";
|
||||
})
|
||||
|
||||
(mkIf cfg.info.enable {
|
||||
@@ -86,7 +167,7 @@ let cfg = config.documentation; in
|
||||
if [ -w $out/share/info ]; then
|
||||
shopt -s nullglob
|
||||
for i in $out/share/info/*.info $out/share/info/*.info.gz; do
|
||||
${pkgs.texinfo}/bin/install-info $i $out/share/info/dir
|
||||
${pkgs.buildPackages.texinfo}/bin/install-info $i $out/share/info/dir
|
||||
done
|
||||
fi
|
||||
'';
|
||||
@@ -99,6 +180,21 @@ let cfg = config.documentation; in
|
||||
environment.extraOutputsToInstall = [ "doc" ] ++ optional cfg.dev.enable "devdoc";
|
||||
})
|
||||
|
||||
(mkIf cfg.nixos.enable {
|
||||
system.build.manual = manual;
|
||||
|
||||
environment.systemPackages = []
|
||||
++ optional cfg.man.enable manual.manpages
|
||||
++ optionals cfg.doc.enable ([ manual.manualHTML helpScript ]
|
||||
++ optionals config.services.xserver.enable [ desktopItem pkgs.nixos-icons ]);
|
||||
|
||||
services.mingetty.helpLine = mkIf cfg.doc.enable (
|
||||
"\nRun `nixos-help` "
|
||||
+ optionalString config.services.nixosManual.showManual "or press <Alt-F${toString config.services.nixosManual.ttyNumber}> "
|
||||
+ "for the NixOS manual."
|
||||
);
|
||||
})
|
||||
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
iodined = 66;
|
||||
#libvirtd = 67; # unused
|
||||
graphite = 68;
|
||||
statsd = 69;
|
||||
#statsd = 69; # removed 2018-11-14
|
||||
transmission = 70;
|
||||
postgres = 71;
|
||||
#vboxusers = 72; # unused
|
||||
@@ -175,7 +175,7 @@
|
||||
dnsmasq = 141;
|
||||
uhub = 142;
|
||||
yandexdisk = 143;
|
||||
#collectd = 144; #unused
|
||||
mxisd = 144; # was once collectd
|
||||
consul = 145;
|
||||
mailpile = 146;
|
||||
redmine = 147;
|
||||
@@ -289,7 +289,7 @@
|
||||
stanchion = 262;
|
||||
riak-cs = 263;
|
||||
infinoted = 264;
|
||||
# keystone = 265; # unused, removed 2017-12-13
|
||||
sickbeard = 265;
|
||||
headphones = 266;
|
||||
couchpotato = 267;
|
||||
gogs = 268;
|
||||
@@ -306,7 +306,7 @@
|
||||
rslsync = 279;
|
||||
minio = 280;
|
||||
kanboard = 281;
|
||||
pykms = 282;
|
||||
# pykms = 282; # DynamicUser = true
|
||||
kodi = 283;
|
||||
restya-board = 284;
|
||||
mighttpd2 = 285;
|
||||
@@ -329,6 +329,16 @@
|
||||
# kvm = 302; # unused
|
||||
# render = 303; # unused
|
||||
zeronet = 304;
|
||||
lirc = 305;
|
||||
lidarr = 306;
|
||||
slurm = 307;
|
||||
kapacitor = 308;
|
||||
solr = 309;
|
||||
alerta = 310;
|
||||
minetest = 311;
|
||||
rss2email = 312;
|
||||
cockroachdb = 313;
|
||||
zoneminder = 314;
|
||||
|
||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||
|
||||
@@ -383,7 +393,7 @@
|
||||
virtuoso = 44;
|
||||
#rtkit = 45; # unused
|
||||
dovecot2 = 46;
|
||||
#dovenull = 47; # unused
|
||||
dovenull2 = 47;
|
||||
prayer = 49;
|
||||
mpd = 50;
|
||||
clamav = 51;
|
||||
@@ -404,7 +414,7 @@
|
||||
iodined = 66;
|
||||
libvirtd = 67;
|
||||
graphite = 68;
|
||||
#statsd = 69; # unused
|
||||
#statsd = 69; # removed 2018-11-14
|
||||
transmission = 70;
|
||||
postgres = 71;
|
||||
vboxusers = 72;
|
||||
@@ -476,7 +486,7 @@
|
||||
#dnsmasq = 141; # unused
|
||||
uhub = 142;
|
||||
#yandexdisk = 143; # unused
|
||||
#collectd = 144; # unused
|
||||
mxisd = 144; # was once collectd
|
||||
#consul = 145; # unused
|
||||
mailpile = 146;
|
||||
redmine = 147;
|
||||
@@ -579,7 +589,7 @@
|
||||
stanchion = 262;
|
||||
riak-cs = 263;
|
||||
infinoted = 264;
|
||||
# keystone = 265; # unused, removed 2017-12-13
|
||||
sickbeard = 265;
|
||||
headphones = 266;
|
||||
couchpotato = 267;
|
||||
gogs = 268;
|
||||
@@ -595,7 +605,7 @@
|
||||
rslsync = 279;
|
||||
minio = 280;
|
||||
kanboard = 281;
|
||||
pykms = 282;
|
||||
# pykms = 282; # DynamicUser = true
|
||||
kodi = 283;
|
||||
restya-board = 284;
|
||||
mighttpd2 = 285;
|
||||
@@ -618,6 +628,16 @@
|
||||
kvm = 302; # default udev rules from systemd requires these
|
||||
render = 303; # default udev rules from systemd requires these
|
||||
zeronet = 304;
|
||||
lirc = 305;
|
||||
lidarr = 306;
|
||||
slurm = 307;
|
||||
kapacitor = 308;
|
||||
solr = 309;
|
||||
alerta = 310;
|
||||
minetest = 311;
|
||||
rss2email = 312;
|
||||
cockroachdb = 313;
|
||||
zoneminder = 314;
|
||||
|
||||
# When adding a gid, make sure it doesn't match an existing
|
||||
# uid. Users and groups with the same name should have equal
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.nixpkgs;
|
||||
opt = options.nixpkgs;
|
||||
|
||||
isConfig = x:
|
||||
builtins.isAttrs x || lib.isFunction x;
|
||||
@@ -54,6 +55,12 @@ let
|
||||
check = builtins.isAttrs;
|
||||
};
|
||||
|
||||
defaultPkgs = import ../../.. {
|
||||
inherit (cfg) config overlays localSystem crossSystem;
|
||||
};
|
||||
|
||||
finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@@ -65,17 +72,21 @@ in
|
||||
inherit (cfg) config overlays localSystem crossSystem;
|
||||
}
|
||||
'';
|
||||
default = import ../../.. {
|
||||
inherit (cfg) config overlays localSystem crossSystem;
|
||||
};
|
||||
type = pkgsType;
|
||||
example = literalExample ''import <nixpkgs> {}'';
|
||||
description = ''
|
||||
This is the evaluation of Nixpkgs that will be provided to
|
||||
all NixOS modules. Defining this option has the effect of
|
||||
ignoring the other options that would otherwise be used to
|
||||
evaluate Nixpkgs, because those are arguments to the default
|
||||
value. The default value imports the Nixpkgs source files
|
||||
If set, the pkgs argument to all NixOS modules is the value of
|
||||
this option, extended with <code>nixpkgs.overlays</code>, if
|
||||
that is also set. Either <code>nixpkgs.crossSystem</code> or
|
||||
<code>nixpkgs.localSystem</code> will be used in an assertion
|
||||
to check that the NixOS and Nixpkgs architectures match. Any
|
||||
other options in <code>nixpkgs.*</code>, notably <code>config</code>,
|
||||
will be ignored.
|
||||
|
||||
If unset, the pkgs argument to all NixOS modules is determined
|
||||
as shown in the default value for this option.
|
||||
|
||||
The default value imports the Nixpkgs source files
|
||||
relative to the location of this NixOS module, because
|
||||
NixOS and Nixpkgs are distributed together for consistency,
|
||||
so the <code>nixos</code> in the default value is in fact a
|
||||
@@ -128,12 +139,14 @@ in
|
||||
description = ''
|
||||
List of overlays to use with the Nix Packages collection.
|
||||
(For details, see the Nixpkgs documentation.) It allows
|
||||
you to override packages globally. This is a function that
|
||||
you to override packages globally. Each function in the list
|
||||
takes as an argument the <emphasis>original</emphasis> Nixpkgs.
|
||||
The first argument should be used for finding dependencies, and
|
||||
the second should be used for overriding recipes.
|
||||
|
||||
Ignored when <code>nixpkgs.pkgs</code> is set.
|
||||
If <code>nixpkgs.pkgs</code> is set, overlays specified here
|
||||
will be applied after the overlays that were already present
|
||||
in <code>nixpkgs.pkgs</code>.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -207,8 +220,26 @@ in
|
||||
|
||||
config = {
|
||||
_module.args = {
|
||||
pkgs = cfg.pkgs;
|
||||
pkgs_i686 = cfg.pkgs.pkgsi686Linux;
|
||||
pkgs = finalPkgs;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
(
|
||||
let
|
||||
nixosExpectedSystem =
|
||||
if config.nixpkgs.crossSystem != null
|
||||
then config.nixpkgs.crossSystem.system
|
||||
else config.nixpkgs.localSystem.system;
|
||||
nixosOption =
|
||||
if config.nixpkgs.crossSystem != null
|
||||
then "nixpkgs.crossSystem"
|
||||
else "nixpkgs.localSystem";
|
||||
pkgsSystem = finalPkgs.stdenv.targetPlatform.system;
|
||||
in {
|
||||
assertion = nixosExpectedSystem == pkgsSystem;
|
||||
message = "The NixOS nixpkgs.pkgs option was set to a Nixpkgs invocation that compiles to target system ${pkgsSystem} but NixOS was configured for system ${nixosExpectedSystem} via NixOS option ${nixosOption}. The NixOS system settings must match the Nixpkgs target system.";
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ with lib;
|
||||
let
|
||||
cfg = config.system.nixos;
|
||||
|
||||
revisionFile = "${toString pkgs.path}/.git-revision";
|
||||
gitRepo = "${toString pkgs.path}/.git";
|
||||
gitCommitId = lib.substring 0 7 (commitIdFromGitRepo gitRepo);
|
||||
in
|
||||
@@ -37,15 +36,14 @@ in
|
||||
nixos.revision = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo
|
||||
else if pathExists revisionFile then fileContents revisionFile
|
||||
else "master";
|
||||
default = trivial.revisionWithDefault "master";
|
||||
description = "The Git revision from which this NixOS configuration was built.";
|
||||
};
|
||||
|
||||
nixos.codeName = mkOption {
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
default = trivial.codeName;
|
||||
description = "The NixOS release code name (e.g. <literal>Emu</literal>).";
|
||||
};
|
||||
|
||||
@@ -82,9 +80,6 @@ in
|
||||
version = mkDefault (cfg.release + cfg.versionSuffix);
|
||||
revision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
|
||||
versionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
|
||||
|
||||
# Note: the first letter is bumped on every release. It's an animal.
|
||||
codeName = "Koi";
|
||||
};
|
||||
|
||||
# Generate /etc/os-release. See
|
||||
@@ -98,6 +93,7 @@ in
|
||||
VERSION_CODENAME=${toLower cfg.codeName}
|
||||
VERSION_ID="${cfg.version}"
|
||||
PRETTY_NAME="NixOS ${cfg.version} (${cfg.codeName})"
|
||||
LOGO="nix-snowflake"
|
||||
HOME_URL="https://nixos.org/"
|
||||
SUPPORT_URL="https://nixos.org/nixos/support.html"
|
||||
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
|
||||
|
||||
Reference in New Issue
Block a user