mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-11-10 16:45:51 +03:00
Merge pull request #96042 from rnhmjoj/loaOf
treewide: completely remove types.loaOf
This commit is contained in:
commit
18348c7829
@ -613,7 +613,6 @@ rec {
|
||||
if tp.name == "option set" || tp.name == "submodule" then
|
||||
throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}."
|
||||
else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options)
|
||||
else if optionSetIn "loaOf" then types.loaOf (types.submodule options)
|
||||
else if optionSetIn "listOf" then types.listOf (types.submodule options)
|
||||
else if optionSetIn "nullOr" then types.nullOr (types.submodule options)
|
||||
else tp;
|
||||
|
117
lib/types.nix
117
lib/types.nix
@ -252,8 +252,8 @@ rec {
|
||||
merge = mergeEqualOption;
|
||||
};
|
||||
|
||||
# drop this in the future:
|
||||
list = builtins.trace "`types.list` is deprecated; use `types.listOf` instead" types.listOf;
|
||||
# TODO: drop this in the future:
|
||||
list = builtins.trace "`types.list` has been removed; please use `types.listOf` instead" types.listOf;
|
||||
|
||||
listOf = elemType: mkOptionType rec {
|
||||
name = "listOf";
|
||||
@ -326,110 +326,15 @@ rec {
|
||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||
};
|
||||
|
||||
# List or attribute set of ...
|
||||
loaOf = elemType:
|
||||
let
|
||||
convertAllLists = loc: defs:
|
||||
let
|
||||
padWidth = stringLength (toString (length defs));
|
||||
unnamedPrefix = i: "unnamed-" + fixedWidthNumber padWidth i + ".";
|
||||
in
|
||||
imap1 (i: convertIfList loc (unnamedPrefix i)) defs;
|
||||
convertIfList = loc: unnamedPrefix: def:
|
||||
if isList def.value then
|
||||
let
|
||||
padWidth = stringLength (toString (length def.value));
|
||||
unnamed = i: unnamedPrefix + fixedWidthNumber padWidth i;
|
||||
anyString = placeholder "name";
|
||||
nameAttrs = [
|
||||
{ path = [ "environment" "etc" ];
|
||||
name = "target";
|
||||
}
|
||||
{ path = [ "containers" anyString "bindMounts" ];
|
||||
name = "mountPoint";
|
||||
}
|
||||
{ path = [ "programs" "ssh" "knownHosts" ];
|
||||
# hostNames is actually a list so we would need to handle it only when singleton
|
||||
name = "hostNames";
|
||||
}
|
||||
{ path = [ "fileSystems" ];
|
||||
name = "mountPoint";
|
||||
}
|
||||
{ path = [ "boot" "specialFileSystems" ];
|
||||
name = "mountPoint";
|
||||
}
|
||||
{ path = [ "services" "znapzend" "zetup" ];
|
||||
name = "dataset";
|
||||
}
|
||||
{ path = [ "services" "znapzend" "zetup" anyString "destinations" ];
|
||||
name = "label";
|
||||
}
|
||||
{ path = [ "services" "geoclue2" "appConfig" ];
|
||||
name = "desktopID";
|
||||
}
|
||||
];
|
||||
matched = let
|
||||
equals = a: b: b == anyString || a == b;
|
||||
fallback = { name = "name"; };
|
||||
in findFirst ({ path, ... }: all (v: v == true) (zipListsWith equals loc path)) fallback nameAttrs;
|
||||
nameAttr = matched.name;
|
||||
nameValueOld = value:
|
||||
if isList value then
|
||||
if length value > 0 then
|
||||
"[ " + concatMapStringsSep " " escapeNixString value + " ]"
|
||||
else
|
||||
"[ ]"
|
||||
else
|
||||
escapeNixString value;
|
||||
nameValueNew = value: unnamed:
|
||||
if isList value then
|
||||
if length value > 0 then
|
||||
head value
|
||||
else
|
||||
unnamed
|
||||
else
|
||||
value;
|
||||
res =
|
||||
{ inherit (def) file;
|
||||
value = listToAttrs (
|
||||
imap1 (elemIdx: elem:
|
||||
{ name = nameValueNew (elem.${nameAttr} or (unnamed elemIdx)) (unnamed elemIdx);
|
||||
value = elem;
|
||||
}) def.value);
|
||||
};
|
||||
option = concatStringsSep "." loc;
|
||||
sample = take 3 def.value;
|
||||
more = lib.optionalString (length def.value > 3) "... ";
|
||||
list = concatMapStrings (x: ''{ ${nameAttr} = ${nameValueOld (x.${nameAttr} or "unnamed")}; ...} '') sample;
|
||||
set = concatMapStrings (x: ''${nameValueNew (x.${nameAttr} or "unnamed") "unnamed"} = {...}; '') sample;
|
||||
msg = ''
|
||||
In file ${def.file}
|
||||
a list is being assigned to the option config.${option}.
|
||||
This will soon be an error as type loaOf is deprecated.
|
||||
See https://github.com/NixOS/nixpkgs/pull/63103 for more information.
|
||||
Do
|
||||
${option} =
|
||||
{ ${set}${more}}
|
||||
instead of
|
||||
${option} =
|
||||
[ ${list}${more}]
|
||||
'';
|
||||
in
|
||||
lib.warn msg res
|
||||
else
|
||||
def;
|
||||
attrOnly = attrsOf elemType;
|
||||
in mkOptionType rec {
|
||||
name = "loaOf";
|
||||
description = "list or attribute set of ${elemType.description}s";
|
||||
check = x: isList x || isAttrs x;
|
||||
merge = loc: defs: attrOnly.merge loc (convertAllLists loc defs);
|
||||
emptyValue = { value = {}; };
|
||||
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
|
||||
getSubModules = elemType.getSubModules;
|
||||
substSubModules = m: loaOf (elemType.substSubModules m);
|
||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||
};
|
||||
# TODO: drop this in the future:
|
||||
loaOf =
|
||||
let msg =
|
||||
''
|
||||
`types.loaOf` has been removed and mixing lists with attribute values
|
||||
is no longer possible; please use `types.attrsOf` instead.
|
||||
See https://github.com/NixOS/nixpkgs/issues/1800 for the motivation.
|
||||
'';
|
||||
in builtins.trace msg types.attrsOf;
|
||||
|
||||
# Value of given type but with no merging (i.e. `uniq list`s are not concatenated).
|
||||
uniq = elemType: mkOptionType rec {
|
||||
|
@ -58,9 +58,9 @@
|
||||
Like <literal>boot.debug1</literal> or
|
||||
<literal>boot.debug1devices</literal>, but runs stage1 until all
|
||||
filesystems that are mounted during initrd are mounted (see
|
||||
<option><link linkend="opt-fileSystems._name__.neededForBoot">neededForBoot</link></option>
|
||||
<option><link linkend="opt-fileSystems._name_.neededForBoot">neededForBoot</link></option>
|
||||
). As a motivating example, this could be useful if you've forgotten to set
|
||||
<option><link linkend="opt-fileSystems._name__.neededForBoot">neededForBoot</link></option>
|
||||
<option><link linkend="opt-fileSystems._name_.neededForBoot">neededForBoot</link></option>
|
||||
on a file system.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<screen>
|
||||
# nixos-container create foo --config '
|
||||
<xref linkend="opt-services.openssh.enable"/> = true;
|
||||
<link linkend="opt-users.users._name__.openssh.authorizedKeys.keys">users.users.root.openssh.authorizedKeys.keys</link> = ["ssh-dss AAAAB3N…"];
|
||||
<link linkend="opt-users.users._name_.openssh.authorizedKeys.keys">users.users.root.openssh.authorizedKeys.keys</link> = ["ssh-dss AAAAB3N…"];
|
||||
'
|
||||
</screen>
|
||||
By default the next free address in the <literal>10.233.0.0/16</literal> subnet will be chosen
|
||||
|
@ -23,12 +23,12 @@
|
||||
<link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd-fstab-generator.html">systemd-fstab-generator</link>.
|
||||
The filesystem will be mounted automatically unless
|
||||
<literal>"noauto"</literal> is present in <link
|
||||
linkend="opt-fileSystems._name__.options">options</link>.
|
||||
linkend="opt-fileSystems._name_.options">options</link>.
|
||||
<literal>"noauto"</literal> filesystems can be mounted explicitly using
|
||||
<command>systemctl</command> e.g. <command>systemctl start
|
||||
data.mount</command>.
|
||||
Mount points are created automatically if they don’t already exist. For
|
||||
<option><link linkend="opt-fileSystems._name__.device">device</link></option>,
|
||||
<option><link linkend="opt-fileSystems._name_.device">device</link></option>,
|
||||
it’s best to use the topology-independent device aliases in
|
||||
<filename>/dev/disk/by-label</filename> and
|
||||
<filename>/dev/disk/by-uuid</filename>, as these don’t change if the
|
||||
@ -36,7 +36,7 @@
|
||||
</para>
|
||||
<para>
|
||||
You can usually omit the file system type
|
||||
(<option><link linkend="opt-fileSystems._name__.fsType">fsType</link></option>),
|
||||
(<option><link linkend="opt-fileSystems._name_.fsType">fsType</link></option>),
|
||||
since <command>mount</command> can usually detect the type and load the
|
||||
necessary kernel module automatically. However, if the file system is needed
|
||||
at early boot (in the initial ramdisk) and is not <literal>ext2</literal>,
|
||||
@ -49,7 +49,7 @@
|
||||
System startup will fail if any of the filesystems fails to mount, dropping
|
||||
you to the emergency shell. You can make a mount asynchronous and
|
||||
non-critical by adding
|
||||
<literal><link linkend="opt-fileSystems._name__.options">options</link> = [
|
||||
<literal><link linkend="opt-fileSystems._name_.options">options</link> = [
|
||||
"nofail" ];</literal>.
|
||||
</para>
|
||||
</note>
|
||||
|
@ -10,7 +10,7 @@
|
||||
automatically configure network interfaces. However, you can configure an
|
||||
interface manually as follows:
|
||||
<programlisting>
|
||||
<link linkend="opt-networking.interfaces._name__.ipv4.addresses">networking.interfaces.eth0.ipv4.addresses</link> = [ {
|
||||
<link linkend="opt-networking.interfaces._name_.ipv4.addresses">networking.interfaces.eth0.ipv4.addresses</link> = [ {
|
||||
address = "192.168.1.2";
|
||||
prefixLength = 24;
|
||||
} ];
|
||||
|
@ -26,7 +26,7 @@
|
||||
As with IPv4 networking interfaces are automatically configured via DHCPv6.
|
||||
You can configure an interface manually:
|
||||
<programlisting>
|
||||
<link linkend="opt-networking.interfaces._name__.ipv6.addresses">networking.interfaces.eth0.ipv6.addresses</link> = [ {
|
||||
<link linkend="opt-networking.interfaces._name_.ipv6.addresses">networking.interfaces.eth0.ipv6.addresses</link> = [ {
|
||||
address = "fe00:aa:bb:cc::2";
|
||||
prefixLength = 64;
|
||||
} ];
|
||||
|
@ -30,7 +30,7 @@ Enter passphrase for /dev/disk/by-uuid/3f6b0024-3a44-4fde-a43a-767b872abe5d: ***
|
||||
<filename>/</filename>, add the following to
|
||||
<filename>configuration.nix</filename>:
|
||||
<programlisting>
|
||||
<link linkend="opt-boot.initrd.luks.devices._name__.device">boot.initrd.luks.devices.crypted.device</link> = "/dev/disk/by-uuid/3f6b0024-3a44-4fde-a43a-767b872abe5d";
|
||||
<link linkend="opt-boot.initrd.luks.devices._name_.device">boot.initrd.luks.devices.crypted.device</link> = "/dev/disk/by-uuid/3f6b0024-3a44-4fde-a43a-767b872abe5d";
|
||||
<xref linkend="opt-fileSystems"/>."/".device = "/dev/mapper/crypted";
|
||||
</programlisting>
|
||||
Should grub be used as bootloader, and <filename>/boot</filename> is located
|
||||
@ -60,13 +60,13 @@ Added to key to device /dev/sda2, slot: 2
|
||||
To ensure that this file system is decrypted using the FIDO2 compatible key, add the following to <filename>configuration.nix</filename>:
|
||||
<programlisting>
|
||||
<link linkend="opt-boot.initrd.luks.fido2Support">boot.initrd.luks.fido2Support</link> = true;
|
||||
<link linkend="opt-boot.initrd.luks.devices._name__.fido2.credential">boot.initrd.luks.devices."/dev/sda2".fido2.credential</link> = "f1d00200108b9d6e849a8b388da457688e3dd653b4e53770012d8f28e5d3b269865038c346802f36f3da7278b13ad6a3bb6a1452e24ebeeaa24ba40eef559b1b287d2a2f80b7";
|
||||
<link linkend="opt-boot.initrd.luks.devices._name_.fido2.credential">boot.initrd.luks.devices."/dev/sda2".fido2.credential</link> = "f1d00200108b9d6e849a8b388da457688e3dd653b4e53770012d8f28e5d3b269865038c346802f36f3da7278b13ad6a3bb6a1452e24ebeeaa24ba40eef559b1b287d2a2f80b7";
|
||||
</programlisting>
|
||||
|
||||
You can also use the FIDO2 passwordless setup, but for security reasons, you might want to enable it only when your device is PIN protected, such as <link xlink:href="https://trezor.io/">Trezor</link>.
|
||||
|
||||
<programlisting>
|
||||
<link linkend="opt-boot.initrd.luks.devices._name__.fido2.passwordLess">boot.initrd.luks.devices."/dev/sda2".fido2.passwordLess</link> = true;
|
||||
<link linkend="opt-boot.initrd.luks.devices._name_.fido2.passwordLess">boot.initrd.luks.devices."/dev/sda2".fido2.passwordLess</link> = true;
|
||||
</programlisting>
|
||||
</para>
|
||||
</section>
|
||||
|
@ -19,7 +19,7 @@
|
||||
All users that should have permission to change network settings must belong
|
||||
to the <code>networkmanager</code> group:
|
||||
<programlisting>
|
||||
<link linkend="opt-users.users._name__.extraGroups">users.users.alice.extraGroups</link> = [ "networkmanager" ];
|
||||
<link linkend="opt-users.users._name_.extraGroups">users.users.alice.extraGroups</link> = [ "networkmanager" ];
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
follows:
|
||||
<!-- FIXME: this might not work if the user is unmanaged. -->
|
||||
<programlisting>
|
||||
<link linkend="opt-users.users._name__.openssh.authorizedKeys.keys">users.users.alice.openssh.authorizedKeys.keys</link> =
|
||||
<link linkend="opt-users.users._name_.openssh.authorizedKeys.keys">users.users.alice.openssh.authorizedKeys.keys</link> =
|
||||
[ "ssh-dss AAAAB3NzaC1kc3MAAACBAPIkGWVEt4..." ];
|
||||
</programlisting>
|
||||
</para>
|
||||
|
@ -11,11 +11,11 @@
|
||||
that a user account named <literal>alice</literal> shall exist:
|
||||
<programlisting>
|
||||
<xref linkend="opt-users.users"/>.alice = {
|
||||
<link linkend="opt-users.users._name__.isNormalUser">isNormalUser</link> = true;
|
||||
<link linkend="opt-users.users._name__.home">home</link> = "/home/alice";
|
||||
<link linkend="opt-users.users._name__.description">description</link> = "Alice Foobar";
|
||||
<link linkend="opt-users.users._name__.extraGroups">extraGroups</link> = [ "wheel" "networkmanager" ];
|
||||
<link linkend="opt-users.users._name__.openssh.authorizedKeys.keys">openssh.authorizedKeys.keys</link> = [ "ssh-dss AAAAB3Nza... alice@foobar" ];
|
||||
<link linkend="opt-users.users._name_.isNormalUser">isNormalUser</link> = true;
|
||||
<link linkend="opt-users.users._name_.home">home</link> = "/home/alice";
|
||||
<link linkend="opt-users.users._name_.description">description</link> = "Alice Foobar";
|
||||
<link linkend="opt-users.users._name_.extraGroups">extraGroups</link> = [ "wheel" "networkmanager" ];
|
||||
<link linkend="opt-users.users._name_.openssh.authorizedKeys.keys">openssh.authorizedKeys.keys</link> = [ "ssh-dss AAAAB3Nza... alice@foobar" ];
|
||||
};
|
||||
</programlisting>
|
||||
Note that <literal>alice</literal> is a member of the
|
||||
@ -36,7 +36,7 @@
|
||||
account will cease to exist. Also, imperative commands for managing users and
|
||||
groups, such as useradd, are no longer available. Passwords may still be
|
||||
assigned by setting the user's
|
||||
<link linkend="opt-users.users._name__.hashedPassword">hashedPassword</link>
|
||||
<link linkend="opt-users.users._name_.hashedPassword">hashedPassword</link>
|
||||
option. A hashed password can be generated using <command>mkpasswd -m
|
||||
sha-512</command> after installing the <literal>mkpasswd</literal> package.
|
||||
</para>
|
||||
|
@ -385,17 +385,6 @@
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>types.loaOf</varname> <replaceable>t</replaceable>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
An attribute set or a list of <replaceable>t</replaceable> type. Multiple
|
||||
definitions are merged according to the value.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>types.nullOr</varname> <replaceable>t</replaceable>
|
||||
|
@ -78,7 +78,7 @@
|
||||
<literal>mutableUsers = false</literal>. Another way is to temporarily add
|
||||
the following to your configuration:
|
||||
<screen>
|
||||
<link linkend="opt-users.users._name__.initialHashedPassword">users.users.your-user.initialHashedPassword</link> = "test";
|
||||
<link linkend="opt-users.users._name_.initialHashedPassword">users.users.your-user.initialHashedPassword</link> = "test";
|
||||
</screen>
|
||||
<emphasis>Important:</emphasis> delete the $hostname.qcow2 file if you have
|
||||
started the virtual machine at least once without the right users, otherwise
|
||||
|
@ -211,7 +211,7 @@ nixpkgs https://nixos.org/channels/nixpkgs-unstable</screen>
|
||||
use <literal>sudo</literal>)
|
||||
</para>
|
||||
<programlisting>
|
||||
<link linkend="opt-users.users._name__.initialHashedPassword">users.users.root.initialHashedPassword</link> = "";
|
||||
<link linkend="opt-users.users._name_.initialHashedPassword">users.users.root.initialHashedPassword</link> = "";
|
||||
</programlisting>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
@ -550,7 +550,7 @@ Retype new UNIX password: ***</screen>
|
||||
# Note: setting fileSystems is generally not
|
||||
# necessary, since nixos-generate-config figures them out
|
||||
# automatically in hardware-configuration.nix.
|
||||
#<link linkend="opt-fileSystems._name__.device">fileSystems."/".device</link> = "/dev/disk/by-label/nixos";
|
||||
#<link linkend="opt-fileSystems._name_.device">fileSystems."/".device</link> = "/dev/disk/by-label/nixos";
|
||||
|
||||
# Enable the OpenSSH server.
|
||||
services.sshd.enable = true;
|
||||
|
@ -796,7 +796,7 @@ users.users.me =
|
||||
or any other display manager in NixOS as they all support auto-login. If you used this module specifically
|
||||
because it permitted root auto-login you can override the lightdm-autologin pam module like:
|
||||
<programlisting>
|
||||
<link xlink:href="#opt-security.pam.services._name__.text">security.pam.services.lightdm-autologin.text</link> = lib.mkForce ''
|
||||
<link xlink:href="#opt-security.pam.services._name_.text">security.pam.services.lightdm-autologin.text</link> = lib.mkForce ''
|
||||
auth requisite pam_nologin.so
|
||||
auth required pam_succeed_if.so quiet
|
||||
auth required pam_permit.so
|
||||
|
@ -767,6 +767,16 @@ CREATE ROLE postgres LOGIN SUPERUSER;
|
||||
See <link xlink:href="https://github.com/NixOS/nixpkgs/pull/82743#issuecomment-674520472">the PR that changed this</link> for more info.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
For NixOS configuration options, the type <literal>loaOf</literal>, after
|
||||
its initial deprecation in release 20.03, has been removed. In NixOS and
|
||||
Nixpkgs options using this type have been converted to <literal>attrsOf</literal>.
|
||||
For more information on this change have look at these links:
|
||||
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/1800">issue #1800</link>,
|
||||
<link xlink:href="https://github.com/NixOS/nixpkgs/pull/63103">PR #63103</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
<title>Configuration Options</title>
|
||||
<variablelist xml:id="configuration-variable-list">
|
||||
<xsl:for-each select="attrs">
|
||||
<xsl:variable name="id" select="concat('opt-', str:replace(str:replace(str:replace(str:replace(attr[@name = 'name']/string/@value, '*', '_'), '<', '_'), '>', '_'), '?', '_'))" />
|
||||
<xsl:variable name="id" select="concat('opt-', str:replace(str:replace(str:replace(attr[@name = 'name']/string/@value, '*', '_'), '<', '_'), '>', '_'))" />
|
||||
<varlistentry>
|
||||
<term xlink:href="#{$id}">
|
||||
<xsl:attribute name="xml:id"><xsl:value-of select="$id"/></xsl:attribute>
|
||||
|
@ -463,7 +463,7 @@ in {
|
||||
|
||||
users.users = mkOption {
|
||||
default = {};
|
||||
type = with types; loaOf (submodule userOpts);
|
||||
type = with types; attrsOf (submodule userOpts);
|
||||
example = {
|
||||
alice = {
|
||||
uid = 1234;
|
||||
@ -487,7 +487,7 @@ in {
|
||||
{ students.gid = 1001;
|
||||
hackers = { };
|
||||
};
|
||||
type = with types; loaOf (submodule groupOpts);
|
||||
type = with types; attrsOf (submodule groupOpts);
|
||||
description = ''
|
||||
Additional groups to be created automatically by the system.
|
||||
'';
|
||||
|
@ -27,7 +27,7 @@
|
||||
};
|
||||
|
||||
fileSystems."/boot/firmware" = {
|
||||
# This effectively "renames" the loaOf entry set in sd-image.nix
|
||||
# This effectively "renames" the attrsOf entry set in sd-image.nix
|
||||
mountPoint = "/boot";
|
||||
neededForBoot = true;
|
||||
};
|
||||
|
@ -224,7 +224,7 @@ bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType)
|
||||
|
||||
bool isAggregateOptionType(Context & ctx, Value & v)
|
||||
{
|
||||
return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf") || optionTypeIs(ctx, v, "loaOf");
|
||||
return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf");
|
||||
}
|
||||
|
||||
MakeError(OptionPathError, EvalError);
|
||||
|
@ -131,7 +131,7 @@ in
|
||||
|
||||
knownHosts = mkOption {
|
||||
default = {};
|
||||
type = types.loaOf (types.submodule ({ name, ... }: {
|
||||
type = types.attrsOf (types.submodule ({ name, ... }: {
|
||||
options = {
|
||||
certAuthority = mkOption {
|
||||
type = types.bool;
|
||||
|
@ -7,7 +7,7 @@ let
|
||||
inherit (lib.modules) mkDefault mkIf;
|
||||
inherit (lib.options) literalExample mkEnableOption mkOption;
|
||||
inherit (lib.strings) concatStringsSep optionalString toLower;
|
||||
inherit (lib.types) addCheck attrsOf lines loaOf nullOr package path port str strMatching submodule;
|
||||
inherit (lib.types) addCheck attrsOf lines nullOr package path port str strMatching submodule;
|
||||
|
||||
# Checks if given list of strings contains unique
|
||||
# elements when compared without considering case.
|
||||
@ -178,7 +178,7 @@ let
|
||||
client system-options file "dsm.sys"
|
||||
'';
|
||||
servers = mkOption {
|
||||
type = loaOf (submodule [ serverOptions ]);
|
||||
type = attrsOf (submodule [ serverOptions ]);
|
||||
default = {};
|
||||
example.mainTsmServer = {
|
||||
server = "tsmserver.company.com";
|
||||
|
@ -544,7 +544,7 @@ in
|
||||
|
||||
security.pam.services = mkOption {
|
||||
default = [];
|
||||
type = with types; loaOf (submodule pamOpts);
|
||||
type = with types; attrsOf (submodule pamOpts);
|
||||
description =
|
||||
''
|
||||
This option defines the PAM services. A service typically
|
||||
|
@ -220,7 +220,7 @@ let
|
||||
};
|
||||
|
||||
destinations = mkOption {
|
||||
type = loaOf (destType config);
|
||||
type = attrsOf (destType config);
|
||||
description = "Additional destinations.";
|
||||
default = {};
|
||||
example = literalExample ''
|
||||
@ -328,7 +328,7 @@ in
|
||||
};
|
||||
|
||||
zetup = mkOption {
|
||||
type = loaOf srcType;
|
||||
type = attrsOf srcType;
|
||||
description = "Znapzend configuration.";
|
||||
default = {};
|
||||
example = literalExample ''
|
||||
|
@ -160,7 +160,7 @@ in
|
||||
};
|
||||
|
||||
appConfig = mkOption {
|
||||
type = types.loaOf appConfigModule;
|
||||
type = types.attrsOf appConfigModule;
|
||||
default = {};
|
||||
example = literalExample ''
|
||||
"com.github.app" = {
|
||||
|
@ -81,7 +81,7 @@ in
|
||||
{ office1 = { model = "MFC-7860DW"; ip = "192.168.1.2"; };
|
||||
office2 = { model = "MFC-7860DW"; nodename = "BRW0080927AFBCE"; };
|
||||
};
|
||||
type = with types; loaOf (submodule netDeviceOpts);
|
||||
type = with types; attrsOf (submodule netDeviceOpts);
|
||||
description = ''
|
||||
The list of network devices that will be registered against the brscan4
|
||||
sane backend.
|
||||
|
@ -3,7 +3,7 @@
|
||||
let
|
||||
|
||||
inherit (lib.options) literalExample mkEnableOption mkOption;
|
||||
inherit (lib.types) bool enum int lines loaOf nullOr path str submodule;
|
||||
inherit (lib.types) bool enum int lines attrsOf nullOr path str submodule;
|
||||
inherit (lib.modules) mkDefault mkIf mkMerge;
|
||||
|
||||
commonDescr = ''
|
||||
@ -248,7 +248,7 @@ in
|
||||
};
|
||||
|
||||
modems = mkOption {
|
||||
type = loaOf (submodule [ modemConfigOptions ]);
|
||||
type = attrsOf (submodule [ modemConfigOptions ]);
|
||||
default = {};
|
||||
example.ttyS1 = {
|
||||
type = "cirrus";
|
||||
|
@ -140,7 +140,7 @@ in
|
||||
services.nylon = mkOption {
|
||||
default = {};
|
||||
description = "Collection of named nylon instances";
|
||||
type = with types; loaOf (submodule nylonOpts);
|
||||
type = with types; attrsOf (submodule nylonOpts);
|
||||
internal = true;
|
||||
};
|
||||
|
||||
|
@ -655,7 +655,7 @@ in
|
||||
|
||||
description = "Define the virtual hosts";
|
||||
|
||||
type = with types; loaOf (submodule vHostOpts);
|
||||
type = with types; attrsOf (submodule vHostOpts);
|
||||
|
||||
example = {
|
||||
myhost = {
|
||||
|
@ -43,10 +43,10 @@ services.prosody = {
|
||||
<link linkend="opt-services.prosody.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
|
||||
<link linkend="opt-services.prosody.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
|
||||
<link linkend="opt-services.prosody.virtualHosts">virtualHosts</link>."example.org" = {
|
||||
<link linkend="opt-services.prosody.virtualHosts._name__.enabled">enabled</link> = true;
|
||||
<link linkend="opt-services.prosody.virtualHosts._name__.domain">domain</link> = "example.org";
|
||||
<link linkend="opt-services.prosody.virtualHosts._name__.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
|
||||
<link linkend="opt-services.prosody.virtualHosts._name__.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
|
||||
<link linkend="opt-services.prosody.virtualHosts._name_.enabled">enabled</link> = true;
|
||||
<link linkend="opt-services.prosody.virtualHosts._name_.domain">domain</link> = "example.org";
|
||||
<link linkend="opt-services.prosody.virtualHosts._name_.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
|
||||
<link linkend="opt-services.prosody.virtualHosts._name_.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
|
||||
};
|
||||
<link linkend="opt-services.prosody.muc">muc</link> = [ {
|
||||
<link linkend="opt-services.prosody.muc">domain</link> = "conference.example.org";
|
||||
|
@ -361,7 +361,7 @@ in
|
||||
};
|
||||
|
||||
users.users = mkOption {
|
||||
type = with types; loaOf (submodule userOptions);
|
||||
type = with types; attrsOf (submodule userOptions);
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -607,7 +607,7 @@ in
|
||||
];
|
||||
}
|
||||
'';
|
||||
type = types.loaOf (types.submodule ({name, ...}: {
|
||||
type = types.attrsOf (types.submodule ({name, ...}: {
|
||||
options = {
|
||||
|
||||
name = mkOption {
|
||||
|
@ -516,7 +516,7 @@ in
|
||||
<filename>/dev/mapper/<replaceable>name</replaceable></filename>.
|
||||
'';
|
||||
|
||||
type = with types; loaOf (submodule (
|
||||
type = with types; attrsOf (submodule (
|
||||
{ name, ... }: { options = {
|
||||
|
||||
name = mkOption {
|
||||
|
@ -558,7 +558,7 @@ in
|
||||
};
|
||||
|
||||
fileSystems = mkOption {
|
||||
type = with lib.types; loaOf (submodule {
|
||||
type = with lib.types; attrsOf (submodule {
|
||||
options.neededForBoot = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
|
@ -46,7 +46,7 @@ in
|
||||
Set of files that have to be linked in <filename>/etc</filename>.
|
||||
'';
|
||||
|
||||
type = with types; loaOf (submodule (
|
||||
type = with types; attrsOf (submodule (
|
||||
{ name, config, ... }:
|
||||
{ options = {
|
||||
|
||||
|
@ -54,7 +54,7 @@ in
|
||||
|
||||
options = {
|
||||
fileSystems = mkOption {
|
||||
type = with lib.types; loaOf (submodule encryptedFSOptions);
|
||||
type = with lib.types; attrsOf (submodule encryptedFSOptions);
|
||||
};
|
||||
swapDevices = mkOption {
|
||||
type = with lib.types; listOf (submodule encryptedFSOptions);
|
||||
|
@ -159,7 +159,7 @@ in
|
||||
"/bigdisk".label = "bigdisk";
|
||||
}
|
||||
'';
|
||||
type = types.loaOf (types.submodule [coreFileSystemOpts fileSystemOpts]);
|
||||
type = types.attrsOf (types.submodule [coreFileSystemOpts fileSystemOpts]);
|
||||
description = ''
|
||||
The file systems to be mounted. It must include an entry for
|
||||
the root directory (<literal>mountPoint = "/"</literal>). Each
|
||||
@ -193,7 +193,7 @@ in
|
||||
|
||||
boot.specialFileSystems = mkOption {
|
||||
default = {};
|
||||
type = types.loaOf (types.submodule coreFileSystemOpts);
|
||||
type = types.attrsOf (types.submodule coreFileSystemOpts);
|
||||
internal = true;
|
||||
description = ''
|
||||
Special filesystems that are mounted very early during boot.
|
||||
|
@ -519,7 +519,7 @@ in
|
||||
<option>networking.useDHCP</option> is true, then every
|
||||
interface not listed here will be configured using DHCP.
|
||||
'';
|
||||
type = with types; loaOf (submodule interfaceOpts);
|
||||
type = with types; attrsOf (submodule interfaceOpts);
|
||||
};
|
||||
|
||||
networking.vswitches = mkOption {
|
||||
@ -544,7 +544,7 @@ in
|
||||
interfaces = mkOption {
|
||||
example = [ "eth0" "eth1" ];
|
||||
description = "The physical network interfaces connected by the vSwitch.";
|
||||
type = with types; loaOf (submodule vswitchInterfaceOpts);
|
||||
type = with types; attrsOf (submodule vswitchInterfaceOpts);
|
||||
};
|
||||
|
||||
controllers = mkOption {
|
||||
|
@ -627,7 +627,7 @@ in
|
||||
};
|
||||
|
||||
bindMounts = mkOption {
|
||||
type = with types; loaOf (submodule bindMountOpts);
|
||||
type = with types; attrsOf (submodule bindMountOpts);
|
||||
default = {};
|
||||
example = literalExample ''
|
||||
{ "/home" = { hostPath = "/home/alice";
|
||||
|
@ -41,7 +41,7 @@ let
|
||||
description = "Source for the in-container mount";
|
||||
};
|
||||
options = mkOption {
|
||||
type = loaOf (str);
|
||||
type = attrsOf (str);
|
||||
default = [ "bind" ];
|
||||
description = ''
|
||||
Mount options of the filesystem to be used.
|
||||
@ -61,7 +61,7 @@ in
|
||||
containers = mkOption {
|
||||
default = {};
|
||||
description = "Declarative container configuration";
|
||||
type = with types; loaOf (submodule ({ name, config, ... }: {
|
||||
type = with types; attrsOf (submodule ({ name, config, ... }: {
|
||||
options = {
|
||||
cmd = mkOption {
|
||||
type = types.lines;
|
||||
|
Loading…
Reference in New Issue
Block a user