Project import generated by Copybara.

GitOrigin-RevId: 74a1793c659d09d7cf738005308b1f86c90cb59b
This commit is contained in:
Default email 2022-09-09 16:08:57 +02:00
parent e7a2da9f60
commit b450903751
3580 changed files with 96618 additions and 36929 deletions

View file

@ -60,6 +60,13 @@ indent_size = unset
[*.md]
trim_trailing_whitespace = unset
# binaries
[*.nib]
end_of_line = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
charset = unset
[eggs.nix]
trim_trailing_whitespace = unset

View file

@ -38,4 +38,4 @@ d08ede042b74b8199dc748323768227b88efcf7c
d1c1a0c656ccd8bd3b25d3c4287f2d075faf3cf3
# fix indentation in meteor default.nix
f76b359e4a55267ddd4e9e149e7cc13ae5cad98a
a37a6de881ec4c6708e6b88fd16256bbc7f26bbd

View file

@ -122,8 +122,6 @@
# Rust
/pkgs/development/compilers/rust @Mic92 @LnL7 @zowoq
/pkgs/build-support/rust @zowoq
/doc/languages-frameworks/rust.section.md @zowoq
# C compilers
/pkgs/development/compilers/gcc @matthewbauer

View file

@ -7,6 +7,8 @@
"6.topic: cinnamon":
- pkgs/desktops/cinnamon/**/*
- nixos/modules/services/x11/desktop-managers/cinnamon.nix
- nixos/tests/cinnamon.nix
"6.topic: emacs":
- nixos/modules/services/editors/emacs.nix

View file

@ -31,6 +31,10 @@ function Code(elem)
tag = 'command'
elseif elem.attributes['role'] == 'option' then
tag = 'option'
elseif elem.attributes['role'] == 'var' then
tag = 'varname'
elseif elem.attributes['role'] == 'env' then
tag = 'envar'
end
if tag ~= nil then

View file

@ -308,7 +308,44 @@ The parameters relative to the base image have the same synopsis as described in
The `name` argument is the name of the derivation output, which defaults to `fromImage.name`.
## shadowSetup {#ssec-pkgs-dockerTools-shadowSetup}
## Environment Helpers {#ssec-pkgs-dockerTools-helpers}
Some packages expect certain files to be available globally.
When building an image from scratch (i.e. without `fromImage`), these files are missing.
`pkgs.dockerTools` provides some helpers to set up an environment with the necessary files.
You can include them in `copyToRoot` like this:
```nix
buildImage {
name = "environment-example";
copyToRoot = with pkgs.dockerTools; [
usrBinEnv
binSh
caCertificates
fakeNss
];
}
```
### usrBinEnv {#sssec-pkgs-dockerTools-helpers-usrBinEnv}
This provides the `env` utility at `/usr/bin/env`.
### binSh {#sssec-pkgs-dockerTools-helpers-binSh}
This provides `bashInteractive` at `/bin/sh`.
### caCertificates {#sssec-pkgs-dockerTools-helpers-caCertificates}
This sets up `/etc/ssl/certs/ca-certificates.crt`.
### fakeNss {#sssec-pkgs-dockerTools-helpers-fakeNss}
Provides `/etc/passwd` and `/etc/group` that contain root and nobody.
Useful when packaging binaries that insist on using nss to look up
username/groups (like nginx).
### shadowSetup {#ssec-pkgs-dockerTools-shadowSetup}
This constant string is a helper for setting up the base files for managing users and groups, only if such files don't exist already. It is suitable for being used in a [`buildImage` `runAsRoot`](#ex-dockerTools-buildImage-runAsRoot) script for cases like in the example below:

View file

@ -453,6 +453,9 @@ In the file `pkgs/top-level/all-packages.nix` you can find fetch helpers, these
}
```
When fetching from GitHub, commits must always be referenced by their full commit hash. This is because GitHub shares commit hashes among all forks and returns `404 Not Found` when a short commit hash is ambiguous. It already happens for some short, 6-character commit hashes in `nixpkgs`.
It is a practical vector for a denial-of-service attack by pushing large amounts of auto generated commits into forks and was already [demonstrated against GitHub Actions Beta](https://blog.teddykatz.com/2019/11/12/github-actions-dos.html).
Find the value to put as `sha256` by running `nix-shell -p nix-prefetch-github --run "nix-prefetch-github --rev 1f795f9f44607cc5bec70d1300150bfefcef2aae NixOS nix"`.
## Obtaining source hash {#sec-source-hashes}

View file

@ -58,8 +58,10 @@ Additional syntax extensions are available, though not all extensions can be use
A few markups for other kinds of literals are also available:
- `` {command}`rm -rfi` `` turns into {command}`rm -rfi`
- `` {option}`networking.useDHCP` `` turns into {option}`networking.useDHCP`
- `` {env}`XDG_DATA_DIRS` `` turns into {env}`XDG_DATA_DIRS`
- `` {file}`/etc/passwd` `` turns into {file}`/etc/passwd`
- `` {option}`networking.useDHCP` `` turns into {option}`networking.useDHCP`
- `` {var}`/etc/passwd` `` turns into {var}`/etc/passwd`
These literal kinds are used mostly in NixOS option documentation.

View file

@ -246,7 +246,7 @@ The `staging` branch is a development branch where mass-rebuilds go. Mass rebuil
### Staging-next branch {#submitting-changes-staging-next-branch}
The `staging-next` branch is for stabilizing mass-rebuilds submitted to the `staging` branch prior to merging them into `master`. Mass-rebuilds must go via the `staging` branch. It must only see non-breaking commits that are fixing issues blocking it from being merged into the `master ` branch.
The `staging-next` branch is for stabilizing mass-rebuilds submitted to the `staging` branch prior to merging them into `master`. Mass-rebuilds must go via the `staging` branch. It must only see non-breaking commits that are fixing issues blocking it from being merged into the `master` branch.
If the branch is already in a broken state, please refrain from adding extra new breakages. Stabilize it for a few days and then merge into master.

View file

@ -734,6 +734,63 @@ work in any of the formats supported by `buildPythonPackage` currently,
with the exception of `other` (see `format` in
[`buildPythonPackage` parameters](#buildpythonpackage-parameters) for more details).
### Using unittestCheckHook {#using-unittestcheckhook}
`unittestCheckHook` is a hook which will substitute the setuptools `test` command for a `checkPhase` which runs `python -m unittest discover`:
```
checkInputs = [ unittestCheckHook ];
unittestFlags = [ "-s" "tests" "-v" ];
```
##### Using sphinxHook {#using-sphinxhook}
The `sphinxHook` is a helpful tool to build documentation and manpages
using the popular Sphinx documentation generator.
It is setup to automatically find common documentation source paths and
render them using the default `html` style.
```
outputs = [
"out"
"doc"
];
nativeBuildInputs = [
sphinxHook
];
```
The hook will automatically build and install the artifact into the
`doc` output, if it exists. It also provides an automatic diversion
for the artifacts of the `man` builder into the `man` target.
```
outputs = [
"out"
"doc"
"man"
];
# Use multiple builders
sphinxBuilders = [
"singlehtml"
"man"
];
```
Overwrite `sphinxRoot` when the hook is unable to find your
documentation source root.
```
# Configure sphinxRoot for uncommon paths
sphinxRoot = "weird/docs/path";
```
The hook is also available to packages outside the python ecosystem by
referencing it using `python3.pkgs.sphinxHook`.
### Develop local package {#develop-local-package}
As a Python developer you're likely aware of [development mode](http://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode)
@ -1260,16 +1317,18 @@ are used in `buildPythonPackage`.
- `pytestCheckHook` to run tests with `pytest`. See [example usage](#using-pytestcheckhook).
- `pythonCatchConflictsHook` to check whether a Python package is not already existing.
- `pythonImportsCheckHook` to check whether importing the listed modules works.
- `pythonRelaxDepsHook` will relax Python dependencies restrictions for the package.
See [example usage](#using-pythonrelaxdepshook).
- `pythonRemoveBinBytecode` to remove bytecode from the `/bin` folder.
- `setuptoolsBuildHook` to build a wheel using `setuptools`.
- `setuptoolsCheckHook` to run tests with `python setup.py test`.
- `sphinxHook` to build documentation and manpages using Sphinx.
- `venvShellHook` to source a Python 3 `venv` at the `venvDir` location. A
`venv` is created if it does not yet exist. `postVenvCreation` can be used to
to run commands only after venv is first created.
- `wheelUnpackHook` to move a wheel to the correct folder so it can be installed
with the `pipInstallHook`.
- `pythonRelaxDepsHook` will relax Python dependencies restrictions for the package.
See [example usage](#using-pythonrelaxdepshook).
- `unittestCheckHook` will run tests with `python -m unittest discover`. See [example usage](#using-unittestcheckhook).
### Development mode {#development-mode}

View file

@ -458,7 +458,7 @@ you of the correct hash.
`maturinBuildFlags`.
* `cargoCheckHook`: run tests using Cargo. The build type for checks
can be set using `cargoCheckType`. Features can be specified with
`cargoCheckNoDefaultFeaatures` and `cargoCheckFeatures`. Additional
`cargoCheckNoDefaultFeatures` and `cargoCheckFeatures`. Additional
flags can be passed to the tests using `checkFlags` and
`checkFlagsArray`. By default, tests are run in parallel. This can
be disabled by setting `dontUseCargoParallelTests`.

View file

@ -80,7 +80,7 @@ Right: `"A library for decoding PNG images"`
### `longDescription` {#var-meta-longDescription}
An arbitrarily long description of the package.
An arbitrarily long description of the package in [CommonMark](https://commonmark.org) Markdown.
### `branch` {#var-meta-branch}

View file

@ -452,6 +452,8 @@ The list of source files or directories to be unpacked or copied. One of these m
After running `unpackPhase`, the generic builder changes the current directory to the directory created by unpacking the sources. If there are multiple source directories, you should set `sourceRoot` to the name of the intended directory. Set `sourceRoot = ".";` if you use `srcs` and control the unpack phase yourself.
By default the `sourceRoot` is set to `"source"`. If you want to point to a sub-directory inside your project, you therefore need to set `sourceRoot = "source/my-sub-directory"`.
##### `setSourceRoot` {#var-stdenv-setSourceRoot}
Alternatively to setting `sourceRoot`, you can set `setSourceRoot` to a shell command to be evaluated by the unpack phase after the sources have been unpacked. This command must set `sourceRoot`.

View file

@ -148,6 +148,11 @@ in mkLicense lset) ({
fullName = ''BSD 4-clause "Original" or "Old" License'';
};
bsdOriginalShortened = {
spdxId = "BSD-4-Clause-Shortened";
fullName = "BSD 4 Clause Shortened";
};
bsdOriginalUC = {
spdxId = "BSD-4-Clause-UC";
fullName = "BSD 4-Clause University of California-Specific";
@ -693,6 +698,11 @@ in mkLicense lset) ({
fullName = "SIL Open Font License 1.1";
};
oml = {
spdxId = "OML";
fullName = "Open Market License";
};
openldap = {
spdxId = "OLDAP-2.8";
fullName = "Open LDAP Public License v2.8";
@ -824,6 +834,11 @@ in mkLicense lset) ({
fullName = "TCL/TK License";
};
ucd = {
fullName = "Unicode Character Database License";
url = "https://fedoraproject.org/wiki/Licensing:UCD";
};
ufl = {
fullName = "Ubuntu Font License 1.0";
url = "https://ubuntu.com/legal/font-licence";
@ -878,6 +893,11 @@ in mkLicense lset) ({
free = false;
};
vol-sl = {
fullName = "Volatility Software License, Version 1.0";
url = "https://www.volatilityfoundation.org/license/vsl-v1.0";
};
vsl10 = {
spdxId = "VSL-1.0";
fullName = "Vovida Software License v1.0";

View file

@ -1,2 +1,2 @@
# Expose the minimum required version for evaluating Nixpkgs
"2.2"
"2.3"

View file

@ -163,84 +163,50 @@ rec {
# TODO: Change the type of this option to a submodule with a
# freeformType, so that individual arguments can be documented
# separately
description = ''
description = lib.mdDoc ''
Additional arguments passed to each module in addition to ones
like <literal>lib</literal>, <literal>config</literal>,
and <literal>pkgs</literal>, <literal>modulesPath</literal>.
</para>
<para>
like `lib`, `config`,
and `pkgs`, `modulesPath`.
This option is also available to all submodules. Submodules do not
inherit args from their parent module, nor do they provide args to
their parent module or sibling submodules. The sole exception to
this is the argument <literal>name</literal> which is provided by
this is the argument `name` which is provided by
parent modules to a submodule and contains the attribute name
the submodule is bound to, or a unique generated name if it is
not bound to an attribute.
</para>
<para>
Some arguments are already passed by default, of which the
following <emphasis>cannot</emphasis> be changed with this option:
<itemizedlist>
<listitem>
<para>
<varname>lib</varname>: The nixpkgs library.
</para>
</listitem>
<listitem>
<para>
<varname>config</varname>: The results of all options after merging the values from all modules together.
</para>
</listitem>
<listitem>
<para>
<varname>options</varname>: The options declared in all modules.
</para>
</listitem>
<listitem>
<para>
<varname>specialArgs</varname>: The <literal>specialArgs</literal> argument passed to <literal>evalModules</literal>.
</para>
</listitem>
<listitem>
<para>
All attributes of <varname>specialArgs</varname>
</para>
<para>
Whereas option values can generally depend on other option values
thanks to laziness, this does not apply to <literal>imports</literal>, which
must be computed statically before anything else.
</para>
<para>
For this reason, callers of the module system can provide <literal>specialArgs</literal>
which are available during import resolution.
</para>
<para>
For NixOS, <literal>specialArgs</literal> includes
<varname>modulesPath</varname>, which allows you to import
extra modules from the nixpkgs package tree without having to
somehow make the module aware of the location of the
<literal>nixpkgs</literal> or NixOS directories.
<programlisting>
{ modulesPath, ... }: {
imports = [
(modulesPath + "/profiles/minimal.nix")
];
}
</programlisting>
</para>
</listitem>
</itemizedlist>
</para>
<para>
following *cannot* be changed with this option:
- {var}`lib`: The nixpkgs library.
- {var}`config`: The results of all options after merging the values from all modules together.
- {var}`options`: The options declared in all modules.
- {var}`specialArgs`: The `specialArgs` argument passed to `evalModules`.
- All attributes of {var}`specialArgs`
Whereas option values can generally depend on other option values
thanks to laziness, this does not apply to `imports`, which
must be computed statically before anything else.
For this reason, callers of the module system can provide `specialArgs`
which are available during import resolution.
For NixOS, `specialArgs` includes
{var}`modulesPath`, which allows you to import
extra modules from the nixpkgs package tree without having to
somehow make the module aware of the location of the
`nixpkgs` or NixOS directories.
```
{ modulesPath, ... }: {
imports = [
(modulesPath + "/profiles/minimal.nix")
];
}
```
For NixOS, the default value for this option includes at least this argument:
<itemizedlist>
<listitem>
<para>
<varname>pkgs</varname>: The nixpkgs package set according to
the <option>nixpkgs.pkgs</option> option.
</para>
</listitem>
</itemizedlist>
- {var}`pkgs`: The nixpkgs package set according to
the {option}`nixpkgs.pkgs` option.
'';
};
@ -248,21 +214,21 @@ rec {
type = types.bool;
internal = true;
default = true;
description = "Whether to check whether all option definitions have matching declarations.";
description = lib.mdDoc "Whether to check whether all option definitions have matching declarations.";
};
_module.freeformType = mkOption {
type = types.nullOr types.optionType;
internal = true;
default = null;
description = ''
description = lib.mdDoc ''
If set, merge all definitions that don't have an associated option
together using this type. The result then gets combined with the
values of all declared options to produce the final <literal>
config</literal> value.
values of all declared options to produce the final `
config` value.
If this is <literal>null</literal>, definitions without an option
will throw an error unless <option>_module.check</option> is
If this is `null`, definitions without an option
will throw an error unless {option}`_module.check` is
turned off.
'';
};
@ -270,7 +236,7 @@ rec {
_module.specialArgs = mkOption {
readOnly = true;
internal = true;
description = ''
description = lib.mdDoc ''
Externally provided module arguments that can't be modified from
within a configuration, but can be used in module imports.
'';
@ -433,7 +399,9 @@ rec {
# modules recursively. It returns the final list of unique-by-key modules
filterModules = modulesPath: { disabled, modules }:
let
moduleKey = m: if isString m then toString modulesPath + "/" + m else toString m;
moduleKey = m: if isString m && (builtins.substring 0 1 m != "/")
then toString modulesPath + "/" + m
else toString m;
disabledKeys = map moduleKey disabled;
keyFilter = filter (attrs: ! elem attrs.key disabledKeys);
in map (attrs: attrs.module) (builtins.genericClosure {
@ -1167,7 +1135,7 @@ rec {
{
options = setAttrByPath from (mkOption {
inherit visible;
description = "Alias of <option>${showOption to}</option>.";
description = lib.mdDoc "Alias of {option}`${showOption to}`.";
apply = x: use (toOf config);
} // optionalAttrs (toType != null) {
type = toType;

View file

@ -95,7 +95,10 @@ rec {
name: mkOption {
default = false;
example = true;
description = "Whether to enable ${name}.";
description =
if name ? _type && name._type == "mdDoc"
then lib.mdDoc "Whether to enable ${name.text}."
else "Whether to enable ${name}.";
type = lib.types.bool;
};
@ -134,7 +137,7 @@ rec {
let default' = if !isList default then [ default ] else default;
in mkOption {
type = lib.types.package;
description = "The ${name} package to use.";
description = lib.mdDoc "The ${name} package to use.";
default = attrByPath default'
(throw "${concatStringsSep "." default'} cannot be found in pkgs") pkgs;
defaultText = literalExpression ("pkgs." + concatStringsSep "." default');

View file

@ -65,11 +65,17 @@ rec {
# is why we use the more obscure "bfd" and not "binutils" for this
# choice.
else "bfd";
extensions = {
extensions = rec {
sharedLibrary =
/**/ if final.isDarwin then ".dylib"
else if final.isWindows then ".dll"
else ".so";
staticLibrary =
/**/ if final.isWindows then ".lib"
else ".a";
library =
/**/ if final.isStatic then staticLibrary
else sharedLibrary;
executable =
/**/ if final.isWindows then ".exe"
else "";
@ -93,7 +99,7 @@ rec {
genode = "Genode";
}.${final.parsed.kernel.name} or null;
# uname -p
# uname -m
processor = final.parsed.cpu.name;
# uname -r
@ -115,6 +121,8 @@ rec {
else if final.isAarch64 then "arm64"
else if final.isx86_32 then "i386"
else if final.isx86_64 then "x86_64"
# linux kernel does not distinguish microblaze/microblazeel
else if final.isMicroBlaze then "microblaze"
else if final.isMips32 then "mips"
else if final.isMips64 then "mips" # linux kernel does not distinguish mips32/mips64
else if final.isPower then "powerpc"

View file

@ -26,9 +26,10 @@ let
# Linux
"aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux"
"armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux" "mips64el-linux"
"powerpc64-linux" "powerpc64le-linux" "riscv32-linux"
"riscv64-linux" "s390-linux" "s390x-linux" "x86_64-linux"
"armv7l-linux" "i686-linux" "m68k-linux" "microblaze-linux"
"microblazeel-linux" "mipsel-linux" "mips64el-linux" "powerpc64-linux"
"powerpc64le-linux" "riscv32-linux" "riscv64-linux" "s390-linux"
"s390x-linux" "x86_64-linux"
# MMIXware
"mmix-mmixware"
@ -40,9 +41,9 @@ let
# none
"aarch64_be-none" "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none"
"msp430-none" "or1k-none" "m68k-none" "powerpc-none" "powerpcle-none"
"riscv32-none" "riscv64-none" "rx-none" "s390-none" "s390x-none" "vc4-none"
"x86_64-none"
"microblaze-none" "microblazeel-none" "msp430-none" "or1k-none" "m68k-none"
"powerpc-none" "powerpcle-none" "riscv32-none" "riscv64-none" "rx-none"
"s390-none" "s390x-none" "vc4-none" "x86_64-none"
# OpenBSD
"i686-openbsd" "x86_64-openbsd"
@ -71,6 +72,7 @@ in {
x86 = filterDoubles predicates.isx86;
i686 = filterDoubles predicates.isi686;
x86_64 = filterDoubles predicates.isx86_64;
microblaze = filterDoubles predicates.isMicroBlaze;
mips = filterDoubles predicates.isMips;
mmix = filterDoubles predicates.isMmix;
riscv = filterDoubles predicates.isRiscV;
@ -94,7 +96,9 @@ in {
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; })
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; })
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabin32; })
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabi64; });
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabi64; })
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabielfv1; })
++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabielfv2; });
illumos = filterDoubles predicates.isSunOS;
linux = filterDoubles predicates.isLinux;
netbsd = filterDoubles predicates.isNetBSD;

View file

@ -22,12 +22,11 @@ rec {
};
ppc64 = {
config = "powerpc64-unknown-linux-gnu";
gcc = { abi = "elfv2"; }; # for gcc configuration
config = "powerpc64-unknown-linux-gnuabielfv2";
};
ppc64-musl = {
config = "powerpc64-unknown-linux-musl";
gcc = { abi = "elfv2"; }; # for gcc configuration
gcc = { abi = "elfv2"; };
};
sheevaplug = {

View file

@ -13,10 +13,18 @@ rec {
isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
isPower = { cpu = { family = "power"; }; };
isPower64 = { cpu = { family = "power"; bits = 64; }; };
# This ABI is the default in NixOS PowerPC64 BE, but not on mainline GCC,
# so it sometimes causes issues in certain packages that makes the wrong
# assumption on the used ABI.
isAbiElfv2 = [
{ abi = { abi = "elfv2"; }; }
{ abi = { name = "musl"; }; cpu = { family = "power"; bits = 64; }; }
];
isx86 = { cpu = { family = "x86"; }; };
isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
isAarch = { cpu = { family = "arm"; }; };
isMicroBlaze = { cpu = { family = "microblaze"; }; };
isMips = { cpu = { family = "mips"; }; };
isMips32 = { cpu = { family = "mips"; bits = 32; }; };
isMips64 = { cpu = { family = "mips"; bits = 64; }; };
@ -64,7 +72,7 @@ rec {
isNone = { kernel = kernels.none; };
isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf ];
isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf gnuabielfv1 gnuabielfv2 ];
isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf muslabin32 muslabi64 ];
isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];

View file

@ -88,6 +88,9 @@ rec {
i686 = { bits = 32; significantByte = littleEndian; family = "x86"; arch = "i686"; };
x86_64 = { bits = 64; significantByte = littleEndian; family = "x86"; arch = "x86-64"; };
microblaze = { bits = 32; significantByte = bigEndian; family = "microblaze"; };
microblazeel = { bits = 32; significantByte = littleEndian; family = "microblaze"; };
mips = { bits = 32; significantByte = bigEndian; family = "mips"; };
mipsel = { bits = 32; significantByte = littleEndian; family = "mips"; };
mips64 = { bits = 64; significantByte = bigEndian; family = "mips"; };
@ -350,6 +353,11 @@ rec {
The "gnu" ABI is ambiguous on 32-bit ARM. Use "gnueabi" or "gnueabihf" instead.
'';
}
{ assertion = platform: with platform; !(isPower64 && isBigEndian);
message = ''
The "gnu" ABI is ambiguous on big-endian 64-bit PowerPC. Use "gnuabielfv2" or "gnuabielfv1" instead.
'';
}
];
};
gnuabi64 = { abi = "64"; };
@ -361,6 +369,9 @@ rec {
gnuabin32 = { abi = "n32"; };
muslabin32 = { abi = "n32"; };
gnuabielfv2 = { abi = "elfv2"; };
gnuabielfv1 = { abi = "elfv1"; };
musleabi = { float = "soft"; };
musleabihf = { float = "hard"; };
musl = {};
@ -464,6 +475,8 @@ rec {
if lib.versionAtLeast (parsed.cpu.version or "0") "6"
then abis.gnueabihf
else abis.gnueabi
# Default ppc64 BE to ELFv2
else if isPower64 parsed && isBigEndian parsed then abis.gnuabielfv2
else abis.gnu
else abis.unknown;
};

View file

@ -130,6 +130,7 @@ checkConfigOutput '^true$' "$@" ./define-enable.nix ./define-attrsOfSub-foo-enab
set -- config.enable ./define-enable.nix ./declare-enable.nix
checkConfigOutput '^true$' "$@"
checkConfigOutput '^false$' "$@" ./disable-define-enable.nix
checkConfigOutput '^false$' "$@" ./disable-define-enable-string-path.nix
checkConfigError "The option .*enable.* does not exist. Definition values:\n\s*- In .*: true" "$@" ./disable-declare-enable.nix
checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-define-enable.nix ./disable-declare-enable.nix
checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-enable-modules.nix

View file

@ -0,0 +1,5 @@
{ lib, ... }:
{
disabledModules = [ (toString ./define-enable.nix) ];
}

View file

@ -31,7 +31,7 @@ with lib.systems.doubles; lib.runTests {
testredox = mseteq redox [ "x86_64-redox" ];
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
testillumos = mseteq illumos [ "x86_64-solaris" ];
testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mips64el-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" "s390x-linux" ];
testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mips64el-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" "s390x-linux" "microblaze-linux" "microblazeel-linux" ];
testnetbsd = mseteq netbsd [ "aarch64-netbsd" "armv6l-netbsd" "armv7a-netbsd" "armv7l-netbsd" "i686-netbsd" "m68k-netbsd" "mipsel-netbsd" "powerpc-netbsd" "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd" ];
testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ];
testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ];

View file

@ -115,6 +115,12 @@
githubId = 7414843;
name = "Nicholas von Klitzing";
};
_360ied = {
name = "Brian Zhu";
email = "therealbarryplayer@gmail.com";
github = "360ied";
githubId = 19516527;
};
_13r0ck = {
name = "Brock Szuszczewicz";
email = "bnr@tuta.io";
@ -133,6 +139,16 @@
githubId = 1714287;
name = "Owen Shepherd";
};
_4825764518 = {
email = "4825764518@purelymail.com";
matrix = "@kenzie:matrix.kenzi.dev";
github = "4825764518";
githubId = 100122841;
name = "Kenzie";
keys = [{
fingerprint = "D292 365E 3C46 A5AA 75EE B30B 78DB 7EDE 3540 794B";
}];
};
_6AA4FD = {
email = "f6442954@gmail.com";
github = "6AA4FD";
@ -309,6 +325,12 @@
githubId = 1174858;
name = "Maxwell Huang-Hobbs";
};
adjacentresearch = {
email = "nate@adjacentresearch.xyz";
github = "0xperp";
githubId = 96147421;
name = "0xperp";
};
adnelson = {
email = "ithinkican@gmail.com";
github = "adnelson";
@ -478,6 +500,15 @@
github = "akho";
githubId = 104951;
};
akkesm = {
name = "Alessandro Barenghi";
email = "alessandro.barenghi@tuta.io";
github = "akkesm";
githubId = 56970006;
keys = [{
fingerprint = "50E2 669C AB38 2F4A 5F72 1667 0D6B FC01 D45E DADD";
}];
};
akru = {
email = "mail@akru.me";
github = "akru";
@ -810,6 +841,12 @@
githubId = 7112447;
name = "Andre S. Ramos";
};
andrevmatos = {
email = "andrevmatos@gmail.com";
github = "andrevmatos";
githubId = 587021;
name = "André V L Matos";
};
andrew-d = {
email = "andrew@du.nham.ca";
github = "andrew-d";
@ -1411,6 +1448,12 @@
githubId = 35324;
name = "Badi' Abdul-Wahid";
};
baitinq = {
email = "manuelpalenzuelamerino@gmail.com";
name = "Baitinq";
github = "Baitinq";
githubId = 30861839;
};
balodja = {
email = "balodja@gmail.com";
github = "balodja";
@ -2028,6 +2071,12 @@
githubId = 1516457;
name = "Christian Albrecht";
};
CactiChameleon9 = {
email = "h19xjkkp@duck.com";
github = "CactiChameleon9";
githubId = 51231053;
name = "Daniel";
};
callahad = {
email = "dan.callahan@gmail.com";
github = "callahad";
@ -2598,6 +2647,12 @@
githubId = 244239;
name = "Mauricio Collares";
};
CompEng0001 = {
email = "sb1501@canterbury.ac.uk";
github = "CompEng0001";
githubId = 40290417;
name = "Seb Blair";
};
copumpkin = {
email = "pumpkingod@gmail.com";
github = "copumpkin";
@ -2913,7 +2968,7 @@
danth = {
name = "Daniel Thwaites";
email = "danthwaites30@btinternet.com";
matrix = "@danth:pwak.org";
matrix = "@danth:danth.me";
github = "danth";
githubId = 28959268;
keys = [{
@ -3091,6 +3146,12 @@
github = "delan";
githubId = 465303;
};
delehef = {
name = "Franklin Delehelle";
email = "nix@odena.eu";
github = "delehef";
githubId = 1153808;
};
deliciouslytyped = {
email = "47436522+deliciouslytyped@users.noreply.github.com";
github = "deliciouslytyped";
@ -4322,6 +4383,12 @@
githubId = 415760;
name = "Jonas Höglund";
};
firefly-cpp = {
email = "iztok@iztok-jr-fister.eu";
github = "firefly-cpp";
githubId = 1633361;
name = "Iztok Fister Jr.";
};
fishi0x01 = {
email = "fishi0x01@gmail.com";
github = "fishi0x01";
@ -4416,6 +4483,12 @@
githubId = 74379;
name = "Florian Pester";
};
fmoda3 = {
email = "fmoda3@mac.com";
github = "fmoda3";
githubId = 1746471;
name = "Frank Moda III";
};
fmthoma = {
email = "f.m.thoma@googlemail.com";
github = "fmthoma";
@ -4851,6 +4924,15 @@
fingerprint = "5214 2D39 A7CE F8FA 872B CA7F DE62 E1E2 A614 5556";
}];
};
gp2112 = {
email = "me@guip.dev";
github = "gp2112";
githubId = 26512375;
name = "Guilherme Paixão";
keys = [{
fingerprint = "4382 7E28 86E5 C34F 38D5 7753 8C81 4D62 5FBD 99D1";
}];
};
gpanders = {
name = "Gregory Anders";
email = "greg@gpanders.com";
@ -4860,6 +4942,12 @@
fingerprint = "B9D5 0EDF E95E ECD0 C135 00A9 56E9 3C2F B6B0 8BDB";
}];
};
gpl = {
email = "nixos-6c64ce18-bbbc-414f-8dcb-f9b6b47fe2bc@isopleth.org";
github = "gpl";
githubId = 39648069;
name = "isogram";
};
gpyh = {
email = "yacine.hmito@gmail.com";
github = "yacinehmito";
@ -5490,6 +5578,12 @@
githubId = 1550265;
name = "Dominic Steinitz";
};
ifurther = {
email = "55025025+ifurther@users.noreply.github.com";
github = "ifurther";
githubId = 55025025;
name = "Feather Lin";
};
igsha = {
email = "igor.sharonov@gmail.com";
github = "igsha";
@ -5601,6 +5695,16 @@
githubId = 510202;
name = "Ismaël Bouya";
};
impl = {
email = "noah@noahfontes.com";
matrix = "@impl:matrix.org";
github = "impl";
githubId = 41129;
name = "Noah Fontes";
keys = [{
fingerprint = "F5B2 BE1B 9AAD 98FE 2916 5597 3665 FFF7 9D38 7BAA";
}];
};
imsofi = {
email = "sofi+git@mailbox.org";
github = "imsofi";
@ -5769,6 +5873,16 @@
github = "jacg";
githubId = 2570854;
};
jakehamilton = {
name = "Jake Hamilton";
email = "jake.hamilton@hey.com";
matrix = "@jakehamilton:matrix.org";
github = "jakehamilton";
githubId = 7005773;
keys = [{
fingerprint = "B982 0250 1720 D540 6A18 2DA8 188E 4945 E85B 2D21";
}];
};
jasoncarr = {
email = "jcarr250@gmail.com";
github = "jasoncarr0";
@ -6456,6 +6570,12 @@
githubId = 752510;
name = "Martin Potier";
};
jqqqqqqqqqq = {
email = "jqqqqqqqqqq@gmail.com";
github = "jqqqqqqqqqq";
githubId = 12872927;
name = "Curtis Jiang";
};
jqueiroz = {
email = "nixos@johnjq.com";
github = "jqueiroz";
@ -6528,6 +6648,12 @@
githubId = 705123;
name = "Jan Tojnar";
};
jtrees = {
email = "me@jtrees.io";
github = "jtrees";
githubId = 5802758;
name = "Joshua Trees";
};
juaningan = {
email = "juaningan@gmail.com";
github = "uningan";
@ -6979,12 +7105,6 @@
fingerprint = "8992 44FC D291 5CA2 0A97 802C 156C 88A5 B0A0 4B2A";
}];
};
kiyengar = {
email = "hello@kiyengar.net";
github = "karthikiyengar";
githubId = 8260207;
name = "Karthik Iyengar";
};
kjeremy = {
email = "kjeremy@gmail.com";
name = "Jeremy Kolb";
@ -8034,11 +8154,11 @@
name = "Michael Fellinger";
};
maralorn = {
email = "malte.brandy@maralorn.de";
email = "mail@maralorn.de";
matrix = "@maralorn:maralorn.de";
github = "maralorn";
githubId = 1651325;
name = "Malte Brandy";
name = "maralorn";
};
marcweber = {
email = "marco-oweber@gmx.de";
@ -8587,6 +8707,12 @@
fingerprint = "FEF0 AE2D 5449 3482 5F06 40AA 186A 1EDA C5C6 3F83";
}];
};
mightyiam = {
email = "mightyiampresence@gmail.com";
github = "mightyiam";
githubId = 635591;
name = "Shahar Dawn Or";
};
mihnea-s = {
email = "mihn.stn@gmail.com";
github = "mihnea-s";
@ -8935,7 +9061,7 @@
name = "Millian Poquet";
};
mpscholten = {
email = "marc@mpscholten.de";
email = "marc@digitallyinduced.com";
github = "mpscholten";
githubId = 2072185;
name = "Marc Scholten";
@ -9646,6 +9772,12 @@
github = "numkem";
githubId = 332423;
};
nviets = {
email = "nathan.g.viets@gmail.com";
github = "nviets";
githubId = 16027994;
name = "Nathan Viets";
};
nyanloutre = {
email = "paul@nyanlout.re";
github = "nyanloutre";
@ -9686,6 +9818,12 @@
githubId = 3359345;
name = "obadz";
};
oberblastmeister = {
email = "littlebubu.shu@gmail.com";
github = "oberblastmeister";
githubId = 61095988;
name = "Brian Shu";
};
obsidian-systems-maintenance = {
name = "Obsidian Systems Maintenance";
email = "maintainer@obsidian.systems";
@ -10171,6 +10309,15 @@
githubId = 29493551;
name = "Josh Peters";
};
peterwilli = {
email = "peter@codebuffet.co";
github = "peterwilli";
githubId = 1212814;
name = "Peter Willemsen";
keys = [{
fingerprint = "A37F D403 88E2 D026 B9F6 9617 5C9D D4BF B96A 28F0";
}];
};
peti = {
email = "simons@cryp.to";
github = "peti";
@ -10942,6 +11089,12 @@
githubId = 7226587;
name = "Théophane Hufschmitt";
};
rehno-lindeque = {
email = "rehno.lindeque+code@gmail.com";
github = "rehno-lindeque";
githubId = 337811;
name = "Rehno Lindeque";
};
relrod = {
email = "ricky@elrod.me";
github = "relrod";
@ -11518,6 +11671,12 @@
fingerprint = "AE8C 0836 FDF6 3FFC 9580 C588 B156 8953 B193 9F1C";
}];
};
samlukeyes123 = {
email = "samlukeyes123@gmail.com";
github = "SamLukeYes";
githubId = 12882091;
name = "Sam L. Yes";
};
samrose = {
email = "samuel.rose@gmail.com";
github = "samrose";
@ -11636,6 +11795,12 @@
githubId = 3958212;
name = "Tom Sorlie";
};
sioodmy = {
name = "Antoni Sokołowski";
email = "81568712+sioodmy@users.noreply.github.com";
github = "sioodmy";
githubId = 81568712;
};
schmitthenner = {
email = "development@schmitthenner.eu";
github = "fkz";
@ -13049,6 +13214,12 @@
githubId = 3268082;
name = "Thibaut Marty";
};
thyol = {
name = "thyol";
email = "thyol@pm.me";
github = "thyol";
githubId = 81481634;
};
thmzlt = {
email = "git@thomazleite.com";
github = "thmzlt";
@ -13500,6 +13671,15 @@
fingerprint = "EE59 5E29 BB5B F2B3 5ED2 3F1C D276 FF74 6700 7335";
}];
};
unhammer = {
email = "unhammer@fsfe.org";
github = "unhammer";
githubId = 56868;
name = "Kevin Brubeck Unhammer";
keys = [{
fingerprint = "50D4 8796 0B86 3F05 4B6A 12F9 7426 06DE 766A C60C";
}];
};
uniquepointer = {
email = "uniquepointer@mailbox.org";
matrix = "@uniquepointer:matrix.org";
@ -13704,6 +13884,15 @@
githubId = 245573;
name = "Dmitry Kalinkin";
};
victormignot = {
email = "victor.mignot@protonmail.com";
github = "victormignot";
githubId = 58660971;
name = "Victor Mignot";
keys = [{
fingerprint = "CA5D F91A D672 683A 1F65 BBC9 0317 096D 20E0 067B";
}];
};
vidbina = {
email = "vid@bina.me";
github = "vidbina";
@ -13964,6 +14153,15 @@
github = "wentasah";
githubId = 140542;
};
wesnel = {
name = "Wesley Nelson";
email = "wgn@wesnel.dev";
github = "wesnel";
githubId = 43357387;
keys = [{
fingerprint = "F844 80B2 0CA9 D6CC C7F5 2479 A776 D2AD 099E 8BC0";
}];
};
wheelsandmetal = {
email = "jakob@schmutz.co.uk";
github = "wheelsandmetal";
@ -15051,4 +15249,39 @@
github = "yisuidenghua";
githubId = 102890144;
};
macalinao = {
email = "me@ianm.com";
name = "Ian Macalinao";
github = "macalinao";
githubId = 401263;
keys = [{
fingerprint = "1147 43F1 E707 6F3E 6F4B 2C96 B9A8 B592 F126 F8E8";
}];
};
tjni = {
email = "43ngvg@masqt.com";
matrix = "@tni:matrix.org";
name = "Theodore Ni";
github = "tjni";
githubId = 3806110;
keys = [{
fingerprint = "4384 B8E1 299F C028 1641 7B8F EC30 EFBE FA7E 84A4";
}];
};
cafkafk = {
email = "cafkafk@cafkafk.com";
matrix = "@cafkafk:matrix.cafkafk.com";
name = "Christina Sørensen";
github = "cafkafk";
githubId = 89321978;
keys = [{
fingerprint = "7B9E E848 D074 AE03 7A0C 651A 8ED4 DEF7 375A 30C8";
}];
};
rb = {
email = "maintainers@cloudposse.com";
github = "nitrocode";
githubId = 7775707;
name = "RB";
};
}

View file

@ -74,6 +74,15 @@ with lib.maintainers; {
enableFeatureFreezePing = true;
};
bitnomial = {
# Verify additions to this team with at least one already existing member of the team.
members = [
cdepillabout
];
scope = "Group registration for packages maintained by Bitnomial.";
shortName = "Bitnomial employees";
};
blockchains = {
members = [
mmahut
@ -107,6 +116,7 @@ with lib.maintainers; {
cinnamon = {
members = [
bobby285271
mkg20001
];
scope = "Maintain Cinnamon desktop environment and applications made by the LinuxMint team.";

View file

@ -120,7 +120,6 @@ to set one. The recommended configuration for modern systems is:
```nix
services.xserver.videoDrivers = [ "modesetting" ];
services.xserver.useGlamor = true;
```
If you experience screen tearing no matter what, this configuration was

View file

@ -133,7 +133,6 @@ services.xserver.displayManager.autoLogin.user = &quot;alice&quot;;
</para>
<programlisting language="bash">
services.xserver.videoDrivers = [ &quot;modesetting&quot; ];
services.xserver.useGlamor = true;
</programlisting>
<para>
If you experience screen tearing no matter what, this

View file

@ -183,6 +183,14 @@
<link xlink:href="options.html#opt-services.hadoop.hbase.enable">services.hadoop.hbase</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/messagebird/sachet/">Sachet</link>,
an SMS alerting tool for the Prometheus Alertmanager.
Available as
<link linkend="opt-services.prometheus.sachet.enable">services.prometheus.sachet</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/leetronics/infnoise">infnoise</link>,
@ -198,6 +206,27 @@
<link xlink:href="options.html#opt-services.kanata.enable">services.kanata</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://languagetool.org/">languagetool</link>,
a multilingual grammar, style, and spell checker. Available as
<link xlink:href="options.html#opt-services.languagetool.enable">services.languagetool</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://www.getoutline.com/">Outline</link>,
a wiki and knowledge base similar to Notion. Available as
<link linkend="opt-services.outline.enable">services.outline</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://netbird.io">netbird</link>, a zero
configuration VPN. Available as
<link xlink:href="options.html#opt-services.netbird.enable">services.netbird</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/aiberia/persistent-evdev">persistent-evdev</link>,
@ -214,6 +243,14 @@
<link linkend="opt-services.schleuder.enable">services.schleuder</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://www.dolibarr.org/">Dolibarr</link>,
an enterprise resource planning and customer relationship
manager. Enable using
<link linkend="opt-services.dolibarr.enable">services.dolibarr</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://www.expressvpn.com">expressvpn</link>,
@ -236,11 +273,32 @@
<link xlink:href="options.html#opt-services.patroni.enable">services.patroni</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/prometheus-community/ipmi_exporter">Prometheus
IPMI exporter</link>, an IPMI exporter for Prometheus.
Available as
<link linkend="opt-services.prometheus.exporters.ipmi.enable">services.prometheus.exporters.ipmi</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://writefreely.org">WriteFreely</link>,
a simple blogging platform with ActivityPub support. Available
as
<link xlink:href="options.html#opt-services.writefreely.enable">services.writefreely</link>.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-22.11-incompatibilities">
<title>Backward Incompatibilities</title>
<itemizedlist>
<listitem>
<para>
Nixpkgs now requires Nix 2.3 or newer.
</para>
</listitem>
<listitem>
<para>
The <literal>isCompatible</literal> predicate checking CPU
@ -337,6 +395,17 @@
instead.
</para>
</listitem>
<listitem>
<para>
The <literal>coq</literal> package and versioned variants
starting at <literal>coq_8_14</literal> no longer include
CoqIDE, which is now available through
<literal>coqPackages.coqide</literal>. It is still possible to
get CoqIDE as part of the <literal>coq</literal> package by
overriding the <literal>buildIde</literal> argument of the
derivation.
</para>
</listitem>
<listitem>
<para>
PHP 7.4 is no longer supported due to upstream not supporting
@ -349,6 +418,14 @@
<literal>cosigned</literal> binary anymore.
</para>
</listitem>
<listitem>
<para>
Emacs now uses the Lucid toolkit by default instead of GTK
because of stability and compatibility issues. Users who still
wish to remain using GTK can do so by using
<literal>emacs-gtk</literal>.
</para>
</listitem>
<listitem>
<para>
riak package removed along with
@ -387,6 +464,13 @@
<literal>&quot;wine64&quot;</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>paperless</literal> module now defaults
<literal>PAPERLESS_TIME_ZONE</literal> to your configured
system timezone.
</para>
</listitem>
<listitem>
<para>
(Neo)Vim can not be configured with
@ -401,6 +485,12 @@
due to upstream dropping support.
</para>
</listitem>
<listitem>
<para>
<literal>k3s</literal> supports <literal>clusterInit</literal>
option, and it is enabled by default, for servers.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-22.11-notable-changes">
@ -446,6 +536,12 @@
guide</link> on how to migrate your Neo4j instance.
</para>
</listitem>
<listitem>
<para>
The <literal>services.matrix-synapse</literal> systemd unit
has been hardened.
</para>
</listitem>
<listitem>
<para>
Matrix Synapse now requires entries in the
@ -457,6 +553,14 @@
and require manual remediation.
</para>
</listitem>
<listitem>
<para>
The <literal>diamond</literal> package has been update from
0.8.36 to 2.0.15. See the
<link xlink:href="https://github.com/bbuchfink/diamond/releases">upstream
release notes</link> for more details.
</para>
</listitem>
<listitem>
<para>
<literal>dockerTools.buildImage</literal> deprecates the

View file

@ -68,16 +68,28 @@ In addition to numerous new and upgraded packages, this release has the followin
- [HBase cluster](https://hbase.apache.org/), a distributed, scalable, big data store. Available as [services.hadoop.hbase](options.html#opt-services.hadoop.hbase.enable).
- [Sachet](https://github.com/messagebird/sachet/), an SMS alerting tool for the Prometheus Alertmanager. Available as [services.prometheus.sachet](#opt-services.prometheus.sachet.enable).
- [infnoise](https://github.com/leetronics/infnoise), a hardware True Random Number Generator dongle.
Available as [services.infnoise](options.html#opt-services.infnoise.enable).
- [kanata](https://github.com/jtroo/kanata), a tool to improve keyboard comfort and usability with advanced customization.
Available as [services.kanata](options.html#opt-services.kanata.enable).
- [languagetool](https://languagetool.org/), a multilingual grammar, style, and spell checker.
Available as [services.languagetool](options.html#opt-services.languagetool.enable).
- [Outline](https://www.getoutline.com/), a wiki and knowledge base similar to Notion. Available as [services.outline](#opt-services.outline.enable).
- [netbird](https://netbird.io), a zero configuration VPN.
Available as [services.netbird](options.html#opt-services.netbird.enable).
- [persistent-evdev](https://github.com/aiberia/persistent-evdev), a daemon to add virtual proxy devices that mirror a physical input device but persist even if the underlying hardware is hot-plugged. Available as [services.persistent-evdev](#opt-services.persistent-evdev.enable).
- [schleuder](https://schleuder.org/), a mailing list manager with PGP support. Enable using [services.schleuder](#opt-services.schleuder.enable).
- [Dolibarr](https://www.dolibarr.org/), an enterprise resource planning and customer relationship manager. Enable using [services.dolibarr](#opt-services.dolibarr.enable).
- [expressvpn](https://www.expressvpn.com), the CLI client for ExpressVPN. Available as [services.expressvpn](#opt-services.expressvpn.enable).
- [Grafana Tempo](https://www.grafana.com/oss/tempo/), a distributed tracing store. Available as [services.tempo](#opt-services.tempo.enable).
@ -85,10 +97,16 @@ In addition to numerous new and upgraded packages, this release has the followin
- [Patroni](https://github.com/zalando/patroni), a template for PostgreSQL HA with ZooKeeper, etcd or Consul.
Available as [services.patroni](options.html#opt-services.patroni.enable).
- [Prometheus IPMI exporter](https://github.com/prometheus-community/ipmi_exporter), an IPMI exporter for Prometheus. Available as [services.prometheus.exporters.ipmi](#opt-services.prometheus.exporters.ipmi.enable).
- [WriteFreely](https://writefreely.org), a simple blogging platform with ActivityPub support. Available as [services.writefreely](options.html#opt-services.writefreely.enable).
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
## Backward Incompatibilities {#sec-release-22.11-incompatibilities}
- Nixpkgs now requires Nix 2.3 or newer.
- The `isCompatible` predicate checking CPU compatibility is no longer exposed
by the platform sets generated using `lib.systems.elaborate`. In most cases
you will want to use the new `canExecute` predicate instead which also
@ -118,11 +136,20 @@ Available as [services.patroni](options.html#opt-services.patroni.enable).
- `services.hbase` has been renamed to `services.hbase-standalone`.
For production HBase clusters, use `services.hadoop.hbase` instead.
- The `coq` package and versioned variants starting at `coq_8_14` no
longer include CoqIDE, which is now available through
`coqPackages.coqide`. It is still possible to get CoqIDE as part of
the `coq` package by overriding the `buildIde` argument of the
derivation.
- PHP 7.4 is no longer supported due to upstream not supporting this
version for the entire lifecycle of the 22.11 release.
- `pkgs.cosign` does not provide the `cosigned` binary anymore.
- Emacs now uses the Lucid toolkit by default instead of GTK because of stability and compatibility issues.
Users who still wish to remain using GTK can do so by using `emacs-gtk`.
- riak package removed along with `services.riak` module, due to lack of maintainer to update the package.
- xow package removed along with the `hardware.xow` module, due to the project being deprecated in favor of `xone`, which is available via the `hardware.xone` module.
@ -136,11 +163,15 @@ Available as [services.patroni](options.html#opt-services.patroni.enable).
- The `meta.mainProgram` attribute of packages in `wineWowPackages` now defaults to `"wine64"`.
- The `paperless` module now defaults `PAPERLESS_TIME_ZONE` to your configured system timezone.
- (Neo)Vim can not be configured with `configure.pathogen` anymore to reduce maintainance burden.
Use `configure.packages` instead.
- `k3s` no longer supports docker as runtime due to upstream dropping support.
- `k3s` supports `clusterInit` option, and it is enabled by default, for servers.
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
## Other Notable Changes {#sec-release-22.11-notable-changes}
@ -155,8 +186,12 @@ Use `configure.packages` instead.
- Neo4j was updated from version 3 to version 4. See this [migration guide](https://neo4j.com/docs/upgrade-migration-guide/current/) on how to migrate your Neo4j instance.
- The `services.matrix-synapse` systemd unit has been hardened.
- Matrix Synapse now requires entries in the `state_group_edges` table to be unique, in order to prevent accidentally introducing duplicate information (for example, because a database backup was restored multiple times). If your Synapse database already has duplicate rows in this table, this could fail with an error and require manual remediation.
- The `diamond` package has been update from 0.8.36 to 2.0.15. See the [upstream release notes](https://github.com/bbuchfink/diamond/releases) for more details.
- `dockerTools.buildImage` deprecates the misunderstood `contents` parameter, in favor of `copyToRoot`.
Use `copyToRoot = buildEnv { ... };` or similar if you intend to add packages to `/bin`.

View file

@ -114,6 +114,10 @@ class Renderer(mistune.renderers.BaseRenderer):
return f"<option>{escape(text)}</option>"
def file(self, text):
return f"<filename>{escape(text)}</filename>"
def var(self, text):
return f"<varname>{escape(text)}</varname>"
def env(self, text):
return f"<envar>{escape(text)}</envar>"
def manpage(self, page, section):
title = f"<refentrytitle>{escape(page)}</refentrytitle>"
vol = f"<manvolnum>{escape(section)}</manvolnum>"
@ -136,6 +140,20 @@ def p_file(md):
md.inline.register_rule('file', FILE_PATTERN, parse)
md.inline.rules.append('file')
def p_var(md):
VAR_PATTERN = r'\{var\}`(.*?)`'
def parse(self, m, state):
return ('var', m.group(1))
md.inline.register_rule('var', VAR_PATTERN, parse)
md.inline.rules.append('var')
def p_env(md):
ENV_PATTERN = r'\{env\}`(.*?)`'
def parse(self, m, state):
return ('env', m.group(1))
md.inline.register_rule('env', ENV_PATTERN, parse)
md.inline.rules.append('env')
def p_option(md):
OPTION_PATTERN = r'\{option\}`(.*?)`'
def parse(self, m, state):
@ -151,7 +169,7 @@ def p_manpage(md):
md.inline.rules.append('manpage')
def p_admonition(md):
ADMONITION_PATTERN = re.compile(r'^::: \{([^\n]*?)\}\n(.*?)^:::\n', flags=re.MULTILINE|re.DOTALL)
ADMONITION_PATTERN = re.compile(r'^::: \{([^\n]*?)\}\n(.*?)^:::$\n*', flags=re.MULTILINE|re.DOTALL)
def parse(self, m, state):
return {
'type': 'admonition',
@ -162,7 +180,7 @@ def p_admonition(md):
md.block.rules.append('admonition')
md = mistune.create_markdown(renderer=Renderer(), plugins=[
p_command, p_file, p_option, p_manpage, p_admonition
p_command, p_file, p_var, p_env, p_option, p_manpage, p_admonition
])
# converts in-place!

View file

@ -4,29 +4,61 @@
let
zeroPad = n:
lib.optionalString (n < 16) "0" +
(if n > 255
then throw "Can't have more than 255 nets or nodes!"
else lib.toHexString n);
(if n > 255
then throw "Can't have more than 255 nets or nodes!"
else lib.toHexString n);
in
rec {
qemuNicMac = net: machine: "52:54:00:12:${zeroPad net}:${zeroPad machine}";
qemuNICFlags = nic: net: machine:
[ "-device virtio-net-pci,netdev=vlan${toString nic},mac=${qemuNicMac net machine}"
[
"-device virtio-net-pci,netdev=vlan${toString nic},mac=${qemuNicMac net machine}"
''-netdev vde,id=vlan${toString nic},sock="$QEMU_VDE_SOCKET_${toString net}"''
];
qemuSerialDevice = if pkgs.stdenv.hostPlatform.isx86 || pkgs.stdenv.hostPlatform.isRiscV then "ttyS0"
else if (with pkgs.stdenv.hostPlatform; isAarch || isPower) then "ttyAMA0"
else throw "Unknown QEMU serial device for system '${pkgs.stdenv.hostPlatform.system}'";
qemuSerialDevice =
if pkgs.stdenv.hostPlatform.isx86 || pkgs.stdenv.hostPlatform.isRiscV then "ttyS0"
else if (with pkgs.stdenv.hostPlatform; isAarch || isPower) then "ttyAMA0"
else throw "Unknown QEMU serial device for system '${pkgs.stdenv.hostPlatform.system}'";
qemuBinary = qemuPkg: {
x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -machine virt,accel=kvm:tcg -cpu max";
aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=max,accel=kvm:tcg -cpu max";
powerpc64le-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
}.${pkgs.stdenv.hostPlatform.system} or "${qemuPkg}/bin/qemu-kvm";
qemuBinary = qemuPkg:
let
hostStdenv = qemuPkg.stdenv;
hostSystem = hostStdenv.system;
guestSystem = pkgs.stdenv.hostPlatform.system;
linuxHostGuestMatrix = {
x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -machine virt,accel=kvm:tcg -cpu max";
aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=max,accel=kvm:tcg -cpu max";
powerpc64le-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
};
otherHostGuestMatrix = {
aarch64-darwin = {
aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=2,accel=hvf:tcg -cpu max";
};
x86_64-darwin = {
x86_64-linux = "${qemuPkg}/bin/qemu-system-x86_64 -machine type=q35,accel=hvf:tcg -cpu max";
};
};
throwUnsupportedHostSystem =
let
supportedSystems = [ "linux" ] ++ (lib.attrNames otherHostGuestMatrix);
in
throw "Unsupported host system ${hostSystem}, supported: ${lib.concatStringsSep ", " supportedSystems}";
throwUnsupportedGuestSystem = guestMap:
throw "Unsupported guest system ${guestSystem} for host ${hostSystem}, supported: ${lib.concatStringsSep ", " (lib.attrNames guestMap)}";
in
if hostStdenv.isLinux then
linuxHostGuestMatrix.${guestSystem} or "${qemuPkg}/bin/qemu-kvm"
else
let
guestMap = (otherHostGuestMatrix.${hostSystem} or throwUnsupportedHostSystem);
in
(guestMap.${guestSystem} or (throwUnsupportedGuestSystem guestMap));
}

View file

@ -37,11 +37,11 @@ rec {
initrdContents = types.attrsOf (types.submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption "copying of this file and symlinking it" // { default = true; };
enable = mkEnableOption (lib.mdDoc "copying of this file and symlinking it") // { default = true; };
target = mkOption {
type = types.path;
description = ''
description = lib.mdDoc ''
Path of the symlink.
'';
default = name;
@ -50,12 +50,12 @@ rec {
text = mkOption {
default = null;
type = types.nullOr types.lines;
description = "Text of the file.";
description = lib.mdDoc "Text of the file.";
};
source = mkOption {
type = types.path;
description = "Path of the source file.";
description = lib.mdDoc "Path of the source file.";
};
};

View file

@ -37,24 +37,24 @@ in rec {
enable = mkOption {
default = true;
type = types.bool;
description = ''
description = lib.mdDoc ''
If set to false, this unit will be a symlink to
/dev/null. This is primarily useful to prevent specific
template instances
(e.g. <literal>serial-getty@ttyS0</literal>) from being
started. Note that <literal>enable=true</literal> does not
(e.g. `serial-getty@ttyS0`) from being
started. Note that `enable=true` does not
make a unit start by default at boot; if you want that, see
<literal>wantedBy</literal>.
`wantedBy`.
'';
};
requiredBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Units that require (i.e. depend on and need to go down with)
this unit. The discussion under <literal>wantedBy</literal>
applies here as well: inverse <literal>.requires</literal>
this unit. The discussion under `wantedBy`
applies here as well: inverse `.requires`
symlinks are established.
'';
};
@ -62,16 +62,16 @@ in rec {
wantedBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Units that want (i.e. depend on) this unit. The standard way
to make a unit start by default at boot is to set this option
to <literal>[ "multi-user.target" ]</literal>. That's despite
to `[ "multi-user.target" ]`. That's despite
the fact that the systemd.unit(5) manpage says this option
goes in the <literal>[Install]</literal> section that controls
the behaviour of <literal>systemctl enable</literal>. Since
goes in the `[Install]` section that controls
the behaviour of `systemctl enable`. Since
such a process is stateful and thus contrary to the design of
NixOS, setting this option instead causes the equivalent
inverse <literal>.wants</literal> symlink to be present,
inverse `.wants` symlink to be present,
establishing the same desired relationship in a stateless way.
'';
};
@ -79,7 +79,7 @@ in rec {
aliases = mkOption {
default = [];
type = types.listOf unitNameType;
description = "Aliases of that unit.";
description = lib.mdDoc "Aliases of that unit.";
};
};
@ -89,12 +89,12 @@ in rec {
text = mkOption {
type = types.nullOr types.str;
default = null;
description = "Text of this systemd unit.";
description = lib.mdDoc "Text of this systemd unit.";
};
unit = mkOption {
internal = true;
description = "The generated unit.";
description = lib.mdDoc "The generated unit.";
};
};
@ -105,19 +105,19 @@ in rec {
description = mkOption {
default = "";
type = types.singleLineStr;
description = "Description of this unit used in systemd messages and progress indicators.";
description = lib.mdDoc "Description of this unit used in systemd messages and progress indicators.";
};
documentation = mkOption {
default = [];
type = types.listOf types.str;
description = "A list of URIs referencing documentation for this unit or its configuration.";
description = lib.mdDoc "A list of URIs referencing documentation for this unit or its configuration.";
};
requires = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Start the specified units when this unit is started, and stop
this unit when the specified units are stopped or fail.
'';
@ -126,7 +126,7 @@ in rec {
wants = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Start the specified units when this unit is started.
'';
};
@ -134,7 +134,7 @@ in rec {
after = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
If the specified units are started at the same time as
this unit, delay this unit until they have started.
'';
@ -143,7 +143,7 @@ in rec {
before = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
If the specified units are started at the same time as
this unit, delay them until this unit has started.
'';
@ -152,7 +152,7 @@ in rec {
bindsTo = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Like requires, but in addition, if the specified units
unexpectedly disappear, this unit will be stopped as well.
'';
@ -161,7 +161,7 @@ in rec {
partOf = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
If the specified units are stopped or restarted, then this
unit is stopped or restarted as well.
'';
@ -170,7 +170,7 @@ in rec {
conflicts = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
If the specified units are started, then this unit is stopped
and vice versa.
'';
@ -179,7 +179,7 @@ in rec {
requisite = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
Similar to requires. However if the units listed are not started,
they will not be started and the transaction will fail.
'';
@ -189,18 +189,17 @@ in rec {
default = {};
example = { RequiresMountsFor = "/data"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Unit]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Unit]` section of the unit. See
{manpage}`systemd.unit(5)` for details.
'';
};
onFailure = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
A list of one or more units that are activated when
this unit enters the "failed" state.
'';
@ -209,7 +208,7 @@ in rec {
onSuccess = mkOption {
default = [];
type = types.listOf unitNameType;
description = ''
description = lib.mdDoc ''
A list of one or more units that are activated when
this unit enters the "inactive" state.
'';
@ -217,7 +216,7 @@ in rec {
startLimitBurst = mkOption {
type = types.int;
description = ''
description = lib.mdDoc ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -226,7 +225,7 @@ in rec {
startLimitIntervalSec = mkOption {
type = types.int;
description = ''
description = lib.mdDoc ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -245,7 +244,7 @@ in rec {
restartTriggers = mkOption {
default = [];
type = types.listOf types.unspecified;
description = ''
description = lib.mdDoc ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be restarted.
@ -255,7 +254,7 @@ in rec {
reloadTriggers = mkOption {
default = [];
type = types.listOf unitOption;
description = ''
description = lib.mdDoc ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be reloaded. If anything but a reload trigger changes in the
@ -273,16 +272,16 @@ in rec {
default = {};
type = with types; attrsOf (nullOr (oneOf [ str path package ]));
example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
description = "Environment variables passed to the service's processes.";
description = lib.mdDoc "Environment variables passed to the service's processes.";
};
path = mkOption {
default = [];
type = with types; listOf (oneOf [ package str ]);
description = ''
Packages added to the service's <envar>PATH</envar>
environment variable. Both the <filename>bin</filename>
and <filename>sbin</filename> subdirectories of each
description = lib.mdDoc ''
Packages added to the service's {env}`PATH`
environment variable. Both the {file}`bin`
and {file}`sbin` subdirectories of each
package are added.
'';
};
@ -293,30 +292,29 @@ in rec {
{ RestartSec = 5;
};
type = types.addCheck (types.attrsOf unitOption) checkService;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Service]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.service</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Service]` section of the unit. See
{manpage}`systemd.service(5)` for details.
'';
};
script = mkOption {
type = types.lines;
default = "";
description = "Shell commands executed as the service's main process.";
description = lib.mdDoc "Shell commands executed as the service's main process.";
};
scriptArgs = mkOption {
type = types.str;
default = "";
description = "Arguments passed to the main process script.";
description = lib.mdDoc "Arguments passed to the main process script.";
};
preStart = mkOption {
type = types.lines;
default = "";
description = ''
description = lib.mdDoc ''
Shell commands executed before the service's main process
is started.
'';
@ -325,7 +323,7 @@ in rec {
postStart = mkOption {
type = types.lines;
default = "";
description = ''
description = lib.mdDoc ''
Shell commands executed after the service's main process
is started.
'';
@ -334,7 +332,7 @@ in rec {
reload = mkOption {
type = types.lines;
default = "";
description = ''
description = lib.mdDoc ''
Shell commands executed when the service's main process
is reloaded.
'';
@ -343,7 +341,7 @@ in rec {
preStop = mkOption {
type = types.lines;
default = "";
description = ''
description = lib.mdDoc ''
Shell commands executed to stop the service.
'';
};
@ -351,7 +349,7 @@ in rec {
postStop = mkOption {
type = types.lines;
default = "";
description = ''
description = lib.mdDoc ''
Shell commands executed after the service's main process
has exited.
'';
@ -360,7 +358,7 @@ in rec {
jobScripts = mkOption {
type = with types; coercedTo path singleton (listOf path);
internal = true;
description = "A list of all job script derivations of this unit.";
description = lib.mdDoc "A list of all job script derivations of this unit.";
default = [];
};
@ -405,7 +403,7 @@ in rec {
restartIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
description = lib.mdDoc ''
Whether the service should be restarted during a NixOS
configuration switch if its definition has changed.
'';
@ -414,14 +412,14 @@ in rec {
reloadIfChanged = mkOption {
type = types.bool;
default = false;
description = ''
description = lib.mdDoc ''
Whether the service should be reloaded during a NixOS
configuration switch if its definition has changed. If
enabled, the value of <option>restartIfChanged</option> is
enabled, the value of {option}`restartIfChanged` is
ignored.
This option should not be used anymore in favor of
<option>reloadTriggers</option> which allows more granular
{option}`reloadTriggers` which allows more granular
control of when a service is reloaded and when a service
is restarted.
'';
@ -430,14 +428,14 @@ in rec {
stopIfChanged = mkOption {
type = types.bool;
default = true;
description = ''
description = lib.mdDoc ''
If set, a changed unit is restarted by calling
<command>systemctl stop</command> in the old configuration,
then <command>systemctl start</command> in the new one.
{command}`systemctl stop` in the old configuration,
then {command}`systemctl start` in the new one.
Otherwise, it is restarted in a single step using
<command>systemctl restart</command> in the new configuration.
{command}`systemctl restart` in the new configuration.
The latter is less correct because it runs the
<literal>ExecStop</literal> commands from the new
`ExecStop` commands from the new
configuration.
'';
};
@ -446,13 +444,12 @@ in rec {
type = with types; either str (listOf str);
default = [];
example = "Sun 14:00:00";
description = ''
description = lib.mdDoc ''
Automatically start this unit at the given date/time, which
must be in the format described in
<citerefentry><refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum></citerefentry>. This is equivalent
{manpage}`systemd.time(7)`. This is equivalent
to adding a corresponding timer unit with
<option>OnCalendar</option> set to the value given here.
{option}`OnCalendar` set to the value given here.
'';
apply = v: if isList v then v else [ v ];
};
@ -474,9 +471,9 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = ''
For each item in this list, a <literal>ListenStream</literal>
option in the <literal>[Socket]</literal> section will be created.
description = lib.mdDoc ''
For each item in this list, a `ListenStream`
option in the `[Socket]` section will be created.
'';
};
@ -484,9 +481,9 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = ''
For each item in this list, a <literal>ListenDatagram</literal>
option in the <literal>[Socket]</literal> section will be created.
description = lib.mdDoc ''
For each item in this list, a `ListenDatagram`
option in the `[Socket]` section will be created.
'';
};
@ -494,11 +491,10 @@ in rec {
default = {};
example = { ListenStream = "/run/my-socket"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Socket]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.socket</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Socket]` section of the unit. See
{manpage}`systemd.socket(5)` for details.
'';
};
};
@ -527,13 +523,11 @@ in rec {
default = {};
example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Timer]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.timer</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> and
<citerefentry><refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum></citerefentry> for details.
`[Timer]` section of the unit. See
{manpage}`systemd.timer(5)` and
{manpage}`systemd.time(7)` for details.
'';
};
@ -562,11 +556,10 @@ in rec {
default = {};
example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Path]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.path</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Path]` section of the unit. See
{manpage}`systemd.path(5)` for details.
'';
};
@ -594,13 +587,13 @@ in rec {
what = mkOption {
example = "/dev/sda1";
type = types.str;
description = "Absolute path of device node, file or other resource. (Mandatory)";
description = lib.mdDoc "Absolute path of device node, file or other resource. (Mandatory)";
};
where = mkOption {
example = "/mnt";
type = types.str;
description = ''
description = lib.mdDoc ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -610,25 +603,24 @@ in rec {
default = "";
example = "ext4";
type = types.str;
description = "File system type.";
description = lib.mdDoc "File system type.";
};
options = mkOption {
default = "";
example = "noatime";
type = types.commas;
description = "Options used to mount the file system.";
description = lib.mdDoc "Options used to mount the file system.";
};
mountConfig = mkOption {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Mount]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.mount</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Mount]` section of the unit. See
{manpage}`systemd.mount(5)` for details.
'';
};
@ -655,7 +647,7 @@ in rec {
where = mkOption {
example = "/mnt";
type = types.str;
description = ''
description = lib.mdDoc ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -665,11 +657,10 @@ in rec {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Automount]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.automount</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Automount]` section of the unit. See
{manpage}`systemd.automount(5)` for details.
'';
};
@ -697,11 +688,10 @@ in rec {
default = {};
example = { MemoryMax = "2G"; };
type = types.attrsOf unitOption;
description = ''
description = lib.mdDoc ''
Each attribute in this set specifies an option in the
<literal>[Slice]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.slice</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
`[Slice]` section of the unit. See
{manpage}`systemd.slice(5)` for details.
'';
};

View file

@ -426,7 +426,9 @@ class Machine:
self.monitor.send(message)
return self.wait_for_monitor_prompt()
def wait_for_unit(self, unit: str, user: Optional[str] = None) -> None:
def wait_for_unit(
self, unit: str, user: Optional[str] = None, timeout: int = 900
) -> None:
"""Wait for a systemd unit to get into "active" state.
Throws exceptions on "failed" and "inactive" states as well as
after timing out.
@ -456,7 +458,7 @@ class Machine:
unit, f" with user {user}" if user is not None else ""
)
):
retry(check_active)
retry(check_active, timeout)
def get_unit_info(self, unit: str, user: Optional[str] = None) -> Dict[str, str]:
status, lines = self.systemctl('--no-pager show "{}"'.format(unit), user)
@ -710,7 +712,7 @@ class Machine:
status, _ = self.execute("nc -z localhost {}".format(port))
return status != 0
with self.nested("waiting for TCP port {} to be closed"):
with self.nested("waiting for TCP port {} to be closed".format(port)):
retry(port_is_closed)
def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:

View file

@ -23,7 +23,7 @@ in {
options.amazonImage = {
name = mkOption {
type = types.str;
description = "The name of the generated derivation";
description = lib.mdDoc "The name of the generated derivation";
default = "nixos-amazon-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
};
@ -35,7 +35,7 @@ in {
]
'';
default = [];
description = ''
description = lib.mdDoc ''
This option lists files to be copied to fixed locations in the
generated image. Glob patterns work.
'';
@ -45,13 +45,13 @@ in {
type = with types; either (enum [ "auto" ]) int;
default = if config.ec2.hvm then 2048 else 8192;
example = 8192;
description = "The size in MB of the image";
description = lib.mdDoc "The size in MB of the image";
};
format = mkOption {
type = types.enum [ "raw" "qcow2" "vpc" ];
default = "vpc";
description = "The image format to output";
description = lib.mdDoc "The image format to output";
};
};

View file

@ -16,20 +16,20 @@ in
options.openstackImage = {
name = mkOption {
type = types.str;
description = "The name of the generated derivation";
description = lib.mdDoc "The name of the generated derivation";
default = "nixos-openstack-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
};
sizeMB = mkOption {
type = types.int;
default = 8192;
description = "The size in MB of the image";
description = lib.mdDoc "The size in MB of the image";
};
format = mkOption {
type = types.enum [ "raw" "qcow2" ];
default = "qcow2";
description = "The image format to output";
description = lib.mdDoc "The image format to output";
};
};

View file

@ -64,8 +64,8 @@ in
};
colors = mkOption {
type = types.listOf types.str;
default = [];
type = with types; listOf (strMatching "[[:xdigit:]]{6}");
default = [ ];
example = [
"002b36" "dc322f" "859900" "b58900"
"268bd2" "d33682" "2aa198" "eee8d5"

View file

@ -259,7 +259,7 @@ in
internal = true;
type = with types; listOf path;
default = [ ];
description = ''
description = lib.mdDoc ''
Fontconfig configuration packages.
'';
};

View file

@ -7,7 +7,7 @@ let
in
{
options.networking.iproute2 = {
enable = mkEnableOption "copy IP route configuration files";
enable = mkEnableOption (lib.mdDoc "copy IP route configuration files");
rttablesExtraConfig = mkOption {
type = types.lines;
default = "";

View file

@ -78,7 +78,7 @@ in {
options = {
krb5 = {
enable = mkEnableOption "building krb5.conf, configuration file for Kerberos V";
enable = mkEnableOption (lib.mdDoc "building krb5.conf, configuration file for Kerberos V");
kerberos = mkOption {
type = types.package;

View file

@ -59,7 +59,7 @@ in
users.ldap = {
enable = mkEnableOption "authentication against an LDAP server";
enable = mkEnableOption (lib.mdDoc "authentication against an LDAP server");
loginPam = mkOption {
type = types.bool;

View file

@ -77,24 +77,21 @@ in
environment.memoryAllocator.provider = mkOption {
type = types.enum ([ "libc" ] ++ attrNames providers);
default = "libc";
description = ''
description = lib.mdDoc ''
The system-wide memory allocator.
Briefly, the system-wide memory allocator providers are:
<itemizedlist>
<listitem><para><literal>libc</literal>: the standard allocator provided by libc</para></listitem>
${toString (mapAttrsToList
(name: value: "<listitem><para><literal>${name}</literal>: ${value.description}</para></listitem>")
providers)}
</itemizedlist>
<warning>
<para>
- `libc`: the standard allocator provided by libc
${concatStringsSep "\n" (mapAttrsToList
(name: value: "- `${name}`: ${replaceStrings [ "\n" ] [ " " ] value.description}")
providers)}
::: {.warning}
Selecting an alternative allocator (i.e., anything other than
<literal>libc</literal>) may result in instability, data loss,
`libc`) may result in instability, data loss,
and/or service failure.
</para>
</warning>
:::
'';
};
};

View file

@ -8,83 +8,73 @@ in
{
options = {
users.mysql = {
enable = mkEnableOption "Authentication against a MySQL/MariaDB database";
enable = mkEnableOption (lib.mdDoc "Authentication against a MySQL/MariaDB database");
host = mkOption {
type = types.str;
example = "localhost";
description = "The hostname of the MySQL/MariaDB server";
description = lib.mdDoc "The hostname of the MySQL/MariaDB server";
};
database = mkOption {
type = types.str;
example = "auth";
description = "The name of the database containing the users";
description = lib.mdDoc "The name of the database containing the users";
};
user = mkOption {
type = types.str;
example = "nss-user";
description = "The username to use when connecting to the database";
description = lib.mdDoc "The username to use when connecting to the database";
};
passwordFile = mkOption {
type = types.path;
example = "/run/secrets/mysql-auth-db-passwd";
description = "The path to the file containing the password for the user";
description = lib.mdDoc "The path to the file containing the password for the user";
};
pam = mkOption {
description = "Settings for <literal>pam_mysql</literal>";
description = lib.mdDoc "Settings for `pam_mysql`";
type = types.submodule {
options = {
table = mkOption {
type = types.str;
example = "users";
description = "The name of table that maps unique login names to the passwords.";
description = lib.mdDoc "The name of table that maps unique login names to the passwords.";
};
updateTable = mkOption {
type = types.nullOr types.str;
default = null;
example = "users_updates";
description = ''
description = lib.mdDoc ''
The name of the table used for password alteration. If not defined, the value
of the <literal>table</literal> option will be used instead.
of the `table` option will be used instead.
'';
};
userColumn = mkOption {
type = types.str;
example = "username";
description = "The name of the column that contains a unix login name.";
description = lib.mdDoc "The name of the column that contains a unix login name.";
};
passwordColumn = mkOption {
type = types.str;
example = "password";
description = "The name of the column that contains a (encrypted) password string.";
description = lib.mdDoc "The name of the column that contains a (encrypted) password string.";
};
statusColumn = mkOption {
type = types.nullOr types.str;
default = null;
example = "status";
description = ''
description = lib.mdDoc ''
The name of the column or an SQL expression that indicates the status of
the user. The status is expressed by the combination of two bitfields
shown below:
<itemizedlist>
<listitem>
<para>
<literal>bit 0 (0x01)</literal>:
if flagged, <literal>pam_mysql</literal> deems the account to be expired and
returns <literal>PAM_ACCT_EXPIRED</literal>. That is, the account is supposed
to no longer be available. Note this doesn't mean that <literal>pam_mysql</literal>
rejects further authentication operations.
</para>
</listitem>
<listitem>
<para>
<literal>bit 1 (0x02)</literal>:
if flagged, <literal>pam_mysql</literal> deems the authentication token
(password) to be expired and returns <literal>PAM_NEW_AUTHTOK_REQD</literal>.
This ends up requiring that the user enter a new password.
</para>
</listitem>
</itemizedlist>
- `bit 0 (0x01)`:
if flagged, `pam_mysql` deems the account to be expired and
returns `PAM_ACCT_EXPIRED`. That is, the account is supposed
to no longer be available. Note this doesn't mean that `pam_mysql`
rejects further authentication operations.
- `bit 1 (0x02)`:
if flagged, `pam_mysql` deems the authentication token
(password) to be expired and returns `PAM_NEW_AUTHTOK_REQD`.
This ends up requiring that the user enter a new password.
'';
};
passwordCrypt = mkOption {
@ -101,101 +91,59 @@ in
"8" "sha512"
"9" "sha256"
];
description = ''
description = lib.mdDoc ''
The method to encrypt the user's password:
<itemizedlist>
<listitem>
<para>
<literal>0</literal> (or <literal>"plain"</literal>):
No encryption. Passwords are stored in plaintext. HIGHLY DISCOURAGED.
</para>
</listitem>
<listitem>
<para>
<literal>1</literal> (or <literal>"Y"</literal>):
Use crypt(3) function.
</para>
</listitem>
<listitem>
<para>
<literal>2</literal> (or <literal>"mysql"</literal>):
Use the MySQL PASSWORD() function. It is possible that the encryption function used
by <literal>pam_mysql</literal> is different from that of the MySQL server, as
<literal>pam_mysql</literal> uses the function defined in MySQL's C-client API
instead of using PASSWORD() SQL function in the query.
</para>
</listitem>
<listitem>
<para>
<literal>3</literal> (or <literal>"md5"</literal>):
Use plain hex MD5.
</para>
</listitem>
<listitem>
<para>
<literal>4</literal> (or <literal>"sha1"</literal>):
Use plain hex SHA1.
</para>
</listitem>
<listitem>
<para>
<literal>5</literal> (or <literal>"drupal7"</literal>):
Use Drupal7 salted passwords.
</para>
</listitem>
<listitem>
<para>
<literal>6</literal> (or <literal>"joomla15"</literal>):
Use Joomla15 salted passwords.
</para>
</listitem>
<listitem>
<para>
<literal>7</literal> (or <literal>"ssha"</literal>):
Use ssha hashed passwords.
</para>
</listitem>
<listitem>
<para>
<literal>8</literal> (or <literal>"sha512"</literal>):
Use sha512 hashed passwords.
</para>
</listitem>
<listitem>
<para>
<literal>9</literal> (or <literal>"sha256"</literal>):
Use sha256 hashed passwords.
</para>
</listitem>
</itemizedlist>
- `0` (or `"plain"`):
No encryption. Passwords are stored in plaintext. HIGHLY DISCOURAGED.
- `1` (or `"Y"`):
Use crypt(3) function.
- `2` (or `"mysql"`):
Use the MySQL PASSWORD() function. It is possible that the encryption function used
by `pam_mysql` is different from that of the MySQL server, as
`pam_mysql` uses the function defined in MySQL's C-client API
instead of using PASSWORD() SQL function in the query.
- `3` (or `"md5"`):
Use plain hex MD5.
- `4` (or `"sha1"`):
Use plain hex SHA1.
- `5` (or `"drupal7"`):
Use Drupal7 salted passwords.
- `6` (or `"joomla15"`):
Use Joomla15 salted passwords.
- `7` (or `"ssha"`):
Use ssha hashed passwords.
- `8` (or `"sha512"`):
Use sha512 hashed passwords.
- `9` (or `"sha256"`):
Use sha256 hashed passwords.
'';
};
cryptDefault = mkOption {
type = types.nullOr (types.enum [ "md5" "sha256" "sha512" "blowfish" ]);
default = null;
example = "blowfish";
description = "The default encryption method to use for <literal>passwordCrypt = 1</literal>.";
description = lib.mdDoc "The default encryption method to use for `passwordCrypt = 1`.";
};
where = mkOption {
type = types.nullOr types.str;
default = null;
example = "host.name='web' AND user.active=1";
description = "Additional criteria for the query.";
description = lib.mdDoc "Additional criteria for the query.";
};
verbose = mkOption {
type = types.bool;
default = false;
description = ''
description = lib.mdDoc ''
If enabled, produces logs with detailed messages that describes what
<literal>pam_mysql</literal> is doing. May be useful for debugging.
`pam_mysql` is doing. May be useful for debugging.
'';
};
disconnectEveryOperation = mkOption {
type = types.bool;
default = false;
description = ''
By default, <literal>pam_mysql</literal> keeps the connection to the MySQL
description = lib.mdDoc ''
By default, `pam_mysql` keeps the connection to the MySQL
database until the session is closed. If this option is set to true it
disconnects every time the PAM operation has finished. This option may
be useful in case the session lasts quite long.
@ -205,17 +153,17 @@ in
enable = mkOption {
type = types.bool;
default = false;
description = "Enables logging of authentication attempts in the MySQL database.";
description = lib.mdDoc "Enables logging of authentication attempts in the MySQL database.";
};
table = mkOption {
type = types.str;
example = "logs";
description = "The name of the table to which logs are written.";
description = lib.mdDoc "The name of the table to which logs are written.";
};
msgColumn = mkOption {
type = types.str;
example = "msg";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the description
of the performed operation is stored.
'';
@ -223,7 +171,7 @@ in
userColumn = mkOption {
type = types.str;
example = "user";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the name of the
user being authenticated is stored.
'';
@ -231,16 +179,16 @@ in
pidColumn = mkOption {
type = types.str;
example = "pid";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the pid of the
process utilising the <literal>pam_mysql's</literal> authentication
process utilising the `pam_mysql's` authentication
service is stored.
'';
};
hostColumn = mkOption {
type = types.str;
example = "host";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the name of the user
being authenticated is stored.
'';
@ -248,17 +196,16 @@ in
rHostColumn = mkOption {
type = types.str;
example = "rhost";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the name of the remote
host that initiates the session is stored. The value is supposed to be
set by the PAM-aware application with <literal>pam_set_item(PAM_RHOST)
</literal>.
set by the PAM-aware application with `pam_set_item(PAM_RHOST)`.
'';
};
timeColumn = mkOption {
type = types.str;
example = "timestamp";
description = ''
description = lib.mdDoc ''
The name of the column in the log table to which the timestamp of the
log entry is stored.
'';
@ -268,11 +215,11 @@ in
};
};
nss = mkOption {
description = ''
Settings for <literal>libnss-mysql</literal>.
description = lib.mdDoc ''
Settings for `libnss-mysql`.
All examples are from the <link xlink:href="https://github.com/saknopper/libnss-mysql/tree/master/sample/minimal">minimal example</link>
of <literal>libnss-mysql</literal>, but they are modified with NixOS paths for bash.
All examples are from the [minimal example](https://github.com/saknopper/libnss-mysql/tree/master/sample/minimal)
of `libnss-mysql`, but they are modified with NixOS paths for bash.
'';
type = types.submodule {
options = {
@ -285,9 +232,8 @@ in
WHERE username='%1$s' \
LIMIT 1
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getpwnam.3.html">getpwnam</link>
description = lib.mdDoc ''
SQL query for the [getpwnam](https://man7.org/linux/man-pages/man3/getpwnam.3.html)
syscall.
'';
};
@ -300,9 +246,8 @@ in
WHERE uid='%1$u' \
LIMIT 1
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getpwuid.3.html">getpwuid</link>
description = lib.mdDoc ''
SQL query for the [getpwuid](https://man7.org/linux/man-pages/man3/getpwuid.3.html)
syscall.
'';
};
@ -315,9 +260,8 @@ in
WHERE username='%1$s' \
LIMIT 1
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getspnam.3.html">getspnam</link>
description = lib.mdDoc ''
SQL query for the [getspnam](https://man7.org/linux/man-pages/man3/getspnam.3.html)
syscall.
'';
};
@ -327,9 +271,8 @@ in
example = literalExpression ''
SELECT username,'x',uid,'5000','MySQL User', CONCAT('/home/',username),'/run/sw/current-system/bin/bash' FROM users
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getpwent.3.html">getpwent</link>
description = lib.mdDoc ''
SQL query for the [getpwent](https://man7.org/linux/man-pages/man3/getpwent.3.html)
syscall.
'';
};
@ -339,9 +282,8 @@ in
example = literalExpression ''
SELECT username,password,'1','0','99999','0','0','-1','0' FROM users
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getspent.3.html">getspent</link>
description = lib.mdDoc ''
SQL query for the [getspent](https://man7.org/linux/man-pages/man3/getspent.3.html)
syscall.
'';
};
@ -351,9 +293,8 @@ in
example = literalExpression ''
SELECT name,password,gid FROM groups WHERE name='%1$s' LIMIT 1
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getgrnam.3.html">getgrnam</link>
description = lib.mdDoc ''
SQL query for the [getgrnam](https://man7.org/linux/man-pages/man3/getgrnam.3.html)
syscall.
'';
};
@ -363,9 +304,8 @@ in
example = literalExpression ''
SELECT name,password,gid FROM groups WHERE gid='%1$u' LIMIT 1
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getgrgid.3.html">getgrgid</link>
description = lib.mdDoc ''
SQL query for the [getgrgid](https://man7.org/linux/man-pages/man3/getgrgid.3.html)
syscall.
'';
};
@ -375,9 +315,8 @@ in
example = literalExpression ''
SELECT name,password,gid FROM groups
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/getgrent.3.html">getgrent</link>
description = lib.mdDoc ''
SQL query for the [getgrent](https://man7.org/linux/man-pages/man3/getgrent.3.html)
syscall.
'';
};
@ -387,9 +326,8 @@ in
example = literalExpression ''
SELECT username FROM grouplist WHERE gid='%1$u'
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/memsbygid.3.html">memsbygid</link>
description = lib.mdDoc ''
SQL query for the [memsbygid](https://man7.org/linux/man-pages/man3/memsbygid.3.html)
syscall.
'';
};
@ -399,9 +337,8 @@ in
example = literalExpression ''
SELECT gid FROM grouplist WHERE username='%1$s'
'';
description = ''
SQL query for the <link
xlink:href="https://man7.org/linux/man-pages/man3/gidsbymem.3.html">gidsbymem</link>
description = lib.mdDoc ''
SQL query for the [gidsbymem](https://man7.org/linux/man-pages/man3/gidsbymem.3.html)
syscall.
'';
};

View file

@ -35,7 +35,7 @@ in
networking.hostFiles = lib.mkOption {
type = types.listOf types.path;
defaultText = literalDocBook "Hosts from <option>networking.hosts</option> and <option>networking.extraHosts</option>";
defaultText = literalMD "Hosts from {option}`networking.hosts` and {option}`networking.extraHosts`";
example = literalExpression ''[ "''${pkgs.my-blocklist-package}/share/my-blocklist/hosts" ]'';
description = lib.mdDoc ''
Files that should be concatenated together to form {file}`/etc/hosts`.
@ -141,7 +141,7 @@ in
type = types.attrs;
internal = true;
default = {};
description = ''
description = lib.mdDoc ''
Environment variables used for the network proxy.
'';
};

View file

@ -27,9 +27,13 @@ with lib;
fonts.fontconfig.enable = false;
nixpkgs.overlays = singleton (const (super: {
beam = super.beam_nox;
cairo = super.cairo.override { x11Support = false; };
dbus = super.dbus.override { x11Support = false; };
beam = super.beam_nox;
ffmpeg_4 = super.ffmpeg_4.override { sdlSupport = false; vdpauSupport = false; };
ffmpeg_5 = super.ffmpeg_5.override { sdlSupport = false; vdpauSupport = false; };
gobject-introspection = super.gobject-introspection.override { x11Support = false; };
libva = super.libva-minimal;
networkmanager-fortisslvpn = super.networkmanager-fortisslvpn.override { withGnome = false; };
networkmanager-iodine = super.networkmanager-iodine.override { withGnome = false; };
networkmanager-l2tp = super.networkmanager-l2tp.override { withGnome = false; };
@ -37,7 +41,6 @@ with lib;
networkmanager-openvpn = super.networkmanager-openvpn.override { withGnome = false; };
networkmanager-sstp = super.networkmanager-vpnc.override { withGnome = false; };
networkmanager-vpnc = super.networkmanager-vpnc.override { withGnome = false; };
gobject-introspection = super.gobject-introspection.override { x11Support = false; };
qemu = super.qemu.override { gtkSupport = false; spiceSupport = false; sdlSupport = false; };
}));
};

View file

@ -190,17 +190,17 @@ in {
zeroconf = {
discovery.enable =
mkEnableOption "discovery of pulseaudio sinks in the local network";
mkEnableOption (lib.mdDoc "discovery of pulseaudio sinks in the local network");
publish.enable =
mkEnableOption "publishing the pulseaudio sink in the local network";
mkEnableOption (lib.mdDoc "publishing the pulseaudio sink in the local network");
};
# TODO: enable by default?
tcp = {
enable = mkEnableOption "tcp streaming support";
enable = mkEnableOption (lib.mdDoc "tcp streaming support");
anonymousClients = {
allowAll = mkEnableOption "all anonymous clients to stream to the server";
allowAll = mkEnableOption (lib.mdDoc "all anonymous clients to stream to the server");
allowedIpRanges = mkOption {
type = types.listOf types.str;
default = [];
@ -263,7 +263,7 @@ in {
(drv: drv.override { pulseaudio = overriddenPackage; })
cfg.extraModules;
modulePaths = builtins.map
(drv: "${drv}/${overriddenPackage.pulseDir}/modules")
(drv: "${drv}/lib/pulseaudio/modules")
# User-provided extra modules take precedence
(overriddenModules ++ [ overriddenPackage ]);
in lib.concatStringsSep ":" modulePaths;

View file

@ -27,7 +27,7 @@ in
options = {
qt5 = {
enable = mkEnableOption "Qt5 theming configuration";
enable = mkEnableOption (lib.mdDoc "Qt5 theming configuration");
platformTheme = mkOption {
type = types.enum [

View file

@ -140,9 +140,9 @@ in
example = literalExpression ''"''${pkgs.dash}/bin/dash"'';
type = types.path;
visible = false;
description = ''
description = lib.mdDoc ''
The shell executable that is linked system-wide to
<literal>/bin/sh</literal>. Please note that NixOS assumes all
`/bin/sh`. Please note that NixOS assumes all
over the place that shell to be Bash, so override the default
setting only if you know exactly what you're doing.
'';

View file

@ -73,8 +73,8 @@ let
label = mkOption {
example = "swap";
type = types.str;
description = ''
Label of the device. Can be used instead of <varname>device</varname>.
description = lib.mdDoc ''
Label of the device. Can be used instead of {var}`device`.
'';
};

View file

@ -78,10 +78,11 @@ in
defaultPackages = mkOption {
type = types.listOf types.package;
default = defaultPackages;
defaultText = literalDocBook ''
these packages, with their <literal>meta.priority</literal> numerically increased
defaultText = literalMD ''
these packages, with their `meta.priority` numerically increased
(thus lowering their installation priority):
<programlisting>${defaultPackagesText}</programlisting>
${defaultPackagesText}
'';
example = [];
description = lib.mdDoc ''
@ -131,7 +132,7 @@ in
path = mkOption {
internal = true;
description = ''
description = lib.mdDoc ''
The packages you want in the boot environment.
'';
};

View file

@ -17,35 +17,35 @@ let
]);
passwordDescription = ''
The options <option>hashedPassword</option>,
<option>password</option> and <option>passwordFile</option>
The options {option}`hashedPassword`,
{option}`password` and {option}`passwordFile`
controls what password is set for the user.
<option>hashedPassword</option> overrides both
<option>password</option> and <option>passwordFile</option>.
<option>password</option> overrides <option>passwordFile</option>.
{option}`hashedPassword` overrides both
{option}`password` and {option}`passwordFile`.
{option}`password` overrides {option}`passwordFile`.
If none of these three options are set, no password is assigned to
the user, and the user will not be able to do password logins.
If the option <option>users.mutableUsers</option> is true, the
If the option {option}`users.mutableUsers` is true, the
password defined in one of the three options will only be set when
the user is created for the first time. After that, you are free to
change the password with the ordinary user management commands. If
<option>users.mutableUsers</option> is false, you cannot change
{option}`users.mutableUsers` is false, you cannot change
user passwords, they will always be set according to the password
options.
'';
hashedPasswordDescription = ''
To generate a hashed password run <literal>mkpasswd -m sha-512</literal>.
To generate a hashed password run `mkpasswd -m sha-512`.
If set to an empty string (<literal>""</literal>), this user will
If set to an empty string (`""`), this user will
be able to log in without being asked for a password (but not via remote
services such as SSH, or indirectly via <command>su</command> or
<command>sudo</command>). This should only be used for e.g. bootable
services such as SSH, or indirectly via {command}`su` or
{command}`sudo`). This should only be used for e.g. bootable
live systems. Note: this is different from setting an empty password,
which can be achieved using <option>users.users.&lt;name?&gt;.password</option>.
which can be achieved using {option}`users.users.<name?>.password`.
If set to <literal>null</literal> (default) this user will not
be able to log in using a password (i.e. via <command>login</command>
If set to `null` (default) this user will not
be able to log in using a password (i.e. via {command}`login`
command).
'';
@ -234,7 +234,7 @@ let
hashedPassword = mkOption {
type = with types; nullOr (passwdEntry str);
default = null;
description = ''
description = lib.mdDoc ''
Specifies the hashed password for the user.
${passwordDescription}
${hashedPasswordDescription}
@ -244,7 +244,7 @@ let
password = mkOption {
type = with types; nullOr str;
default = null;
description = ''
description = lib.mdDoc ''
Specifies the (clear text) password for the user.
Warning: do not set confidential information here
because it is world-readable in the Nix store. This option
@ -256,11 +256,11 @@ let
passwordFile = mkOption {
type = with types; nullOr str;
default = null;
description = ''
description = lib.mdDoc ''
The full path to a file that contains the user's password. The password
file is read on each system activation. The file should contain
exactly one line, which should be the password in an encrypted form
that is suitable for the <literal>chpasswd -e</literal> command.
that is suitable for the `chpasswd -e` command.
${passwordDescription}
'';
};
@ -268,13 +268,13 @@ let
initialHashedPassword = mkOption {
type = with types; nullOr (passwdEntry str);
default = null;
description = ''
description = lib.mdDoc ''
Specifies the initial hashed password for the user, i.e. the
hashed password assigned if the user does not already
exist. If <option>users.mutableUsers</option> is true, the
exist. If {option}`users.mutableUsers` is true, the
password can be changed subsequently using the
<command>passwd</command> command. Otherwise, it's
equivalent to setting the <option>hashedPassword</option> option.
{command}`passwd` command. Otherwise, it's
equivalent to setting the {option}`hashedPassword` option.
${hashedPasswordDescription}
'';
@ -458,25 +458,25 @@ in {
users.mutableUsers = mkOption {
type = types.bool;
default = true;
description = ''
If set to <literal>true</literal>, you are free to add new users and groups to the system
with the ordinary <literal>useradd</literal> and
<literal>groupadd</literal> commands. On system activation, the
existing contents of the <literal>/etc/passwd</literal> and
<literal>/etc/group</literal> files will be merged with the
contents generated from the <literal>users.users</literal> and
<literal>users.groups</literal> options.
description = lib.mdDoc ''
If set to `true`, you are free to add new users and groups to the system
with the ordinary `useradd` and
`groupadd` commands. On system activation, the
existing contents of the `/etc/passwd` and
`/etc/group` files will be merged with the
contents generated from the `users.users` and
`users.groups` options.
The initial password for a user will be set
according to <literal>users.users</literal>, but existing passwords
according to `users.users`, but existing passwords
will not be changed.
<warning><para>
If set to <literal>false</literal>, the contents of the user and
::: {.warning}
If set to `false`, the contents of the user and
group files will simply be replaced on system activation. This also
holds for the user passwords; all changed
passwords will be reset according to the
<literal>users.users</literal> configuration on activation.
</para></warning>
`users.users` configuration on activation.
:::
'';
};

View file

@ -33,7 +33,7 @@ in
options.xdg.portal = {
enable =
mkEnableOption ''<link xlink:href="https://github.com/flatpak/xdg-desktop-portal">xdg desktop integration</link>'' // {
mkEnableOption (lib.mdDoc ''[xdg desktop integration](https://github.com/flatpak/xdg-desktop-portal)'') // {
default = false;
};
@ -54,11 +54,11 @@ in
type = types.bool;
visible = false;
default = false;
description = ''
Sets environment variable <literal>GTK_USE_PORTAL</literal> to <literal>1</literal>.
description = lib.mdDoc ''
Sets environment variable `GTK_USE_PORTAL` to `1`.
This will force GTK-based programs ran outside Flatpak to respect and use XDG Desktop Portals
for features like file chooser but it is an unsupported hack that can easily break things.
Defaults to <literal>false</literal> to respect its opt-in nature.
Defaults to `false` to respect its opt-in nature.
'';
};
};

View file

@ -12,13 +12,13 @@ in
};
options.xdg.portal.lxqt = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
the desktop portal for the LXQt desktop environment.
This will add the <literal>lxqt.xdg-desktop-portal-lxqt</literal>
This will add the `lxqt.xdg-desktop-portal-lxqt`
package (with the extra Qt styles) into the
<option>xdg.portal.extraPortals</option> option
'';
{option}`xdg.portal.extraPortals` option
'');
styles = mkOption {
type = types.listOf types.package;

View file

@ -14,13 +14,13 @@ in
};
options.xdg.portal.wlr = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
desktop portal for wlroots-based desktops
This will add the <literal>xdg-desktop-portal-wlr</literal> package into
the <option>xdg.portal.extraPortals</option> option, and provide the
This will add the `xdg-desktop-portal-wlr` package into
the {option}`xdg.portal.extraPortals` option, and provide the
configuration file
'';
'');
settings = mkOption {
description = lib.mdDoc ''

View file

@ -73,10 +73,10 @@ in
default = 50;
type = types.int;
description = lib.mdDoc ''
Maximum amount of memory that can be used by the zram swap devices
Maximum total amount of memory that can be stored in the zram swap devices
(as a percentage of your total memory). Defaults to 1/2 of your total
RAM. Run `zramctl` to check how good memory is
compressed.
RAM. Run `zramctl` to check how good memory is compressed.
This doesn't define how much memory will be used by the zram swap devices.
'';
};
@ -84,8 +84,9 @@ in
default = null;
type = with types; nullOr int;
description = lib.mdDoc ''
Maximum total amount of memory (in bytes) that can be used by the zram
Maximum total amount of memory (in bytes) that can be stored in the zram
swap devices.
This doesn't define how much memory will be used by the zram swap devices.
'';
};

View file

@ -7,10 +7,10 @@ in
{
options = {
hardware.brillo = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
Enable brillo in userspace.
This will allow brightness control from users in the video group.
'';
'');
};
};

View file

@ -13,7 +13,7 @@ in
];
options.hardware.ckb-next = {
enable = mkEnableOption "the Corsair keyboard/mouse driver";
enable = mkEnableOption (lib.mdDoc "the Corsair keyboard/mouse driver");
gid = mkOption {
type = types.nullOr types.int;

View file

@ -7,15 +7,15 @@ let
in
{
options.programs.corectrl = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
A tool to overclock amd graphics cards and processors.
Add your user to the corectrl group to run corectrl without needing to enter your password
'';
'');
gpuOverclock = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
true
'';
'');
ppfeaturemask = mkOption {
type = types.str;
default = "0xfffd7fff";

View file

@ -6,7 +6,7 @@ let
in
with lib; {
options.hardware.cpu.amd.sev = {
enable = mkEnableOption "access to the AMD SEV device";
enable = mkEnableOption (lib.mdDoc "access to the AMD SEV device");
user = mkOption {
description = lib.mdDoc "Owner to assign to the SEV device.";
type = types.str;

View file

@ -20,7 +20,7 @@ in
};
options.hardware.cpu.intel.sgx.provision = {
enable = mkEnableOption "access to the Intel SGX provisioning device";
enable = mkEnableOption (lib.mdDoc "access to the Intel SGX provisioning device");
user = mkOption {
description = lib.mdDoc "Owner to assign to the SGX provisioning device.";
type = types.str;

View file

@ -14,6 +14,15 @@ let
'';
};
filter = mkOption {
type = types.nullOr types.str;
default = null;
example = "*rpi*.dtb";
description = lib.mdDoc ''
Only apply to .dtb files matching glob expression.
'';
};
dtsFile = mkOption {
type = types.nullOr types.path;
description = lib.mdDoc ''
@ -150,6 +159,7 @@ in
'';
type = types.listOf (types.coercedTo types.path (path: {
name = baseNameOf path;
filter = null;
dtboFile = path;
}) overlayType);
description = lib.mdDoc ''
@ -161,7 +171,7 @@ in
default = null;
type = types.nullOr types.path;
internal = true;
description = ''
description = lib.mdDoc ''
A path containing the result of applying `overlays` to `kernelPackage`.
'';
};

View file

@ -3,7 +3,7 @@ let
cfg = config.hardware.flirc;
in
{
options.hardware.flirc.enable = lib.mkEnableOption "software to configure a Flirc USB device";
options.hardware.flirc.enable = lib.mkEnableOption (lib.mdDoc "software to configure a Flirc USB device");
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.flirc ];

View file

@ -7,7 +7,7 @@ let
in
{
options.hardware.gkraken = {
enable = mkEnableOption "gkraken's udev rules for NZXT AIO liquid coolers";
enable = mkEnableOption (lib.mdDoc "gkraken's udev rules for NZXT AIO liquid coolers");
};
config = mkIf cfg.enable {

View file

@ -28,7 +28,7 @@ let
cfg = config.hardware.gpgSmartcards;
in {
options.hardware.gpgSmartcards = {
enable = mkEnableOption "udev rules for gnupg smart cards";
enable = mkEnableOption (lib.mdDoc "udev rules for gnupg smart cards");
};
config = mkIf cfg.enable {

View file

@ -8,11 +8,11 @@ in
{
options.hardware.i2c = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
i2c devices support. By default access is granted to users in the "i2c"
group (will be created if non-existent) and any user with a seat, meaning
logged on the computer locally.
'';
'');
group = mkOption {
type = types.str;

View file

@ -6,7 +6,7 @@ let
in
{
options.hardware.keyboard.teck = {
enable = mkEnableOption "non-root access to the firmware of TECK keyboards";
enable = mkEnableOption (lib.mdDoc "non-root access to the firmware of TECK keyboards");
};
config = mkIf cfg.enable {

View file

@ -6,12 +6,12 @@ let
in
{
options.hardware.keyboard.uhk = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
non-root access to the firmware of UHK keyboards.
You need it when you want to flash a new firmware on the keyboard.
Access to the keyboard is granted to users in the "input" group.
You may want to install the uhk-agent package.
'';
'');
};

View file

@ -11,7 +11,7 @@ in {
];
options.hardware.ksm = {
enable = mkEnableOption "Kernel Same-Page Merging";
enable = mkEnableOption (lib.mdDoc "Kernel Same-Page Merging");
sleep = mkOption {
type = types.nullOr types.int;
default = null;

View file

@ -6,7 +6,7 @@ let
cfg = config.hardware.ledger;
in {
options.hardware.ledger.enable = mkEnableOption "udev rules for Ledger devices";
options.hardware.ledger.enable = mkEnableOption (lib.mdDoc "udev rules for Ledger devices");
config = mkIf cfg.enable {
services.udev.packages = [ pkgs.ledger-udev-rules ];

View file

@ -19,7 +19,7 @@ in
options.hardware.logitech = {
lcd = {
enable = mkEnableOption "Logitech LCD Devices";
enable = mkEnableOption (lib.mdDoc "Logitech LCD Devices");
startWhenNeeded = mkOption {
type = types.bool;
@ -41,7 +41,7 @@ in
};
wireless = {
enable = mkEnableOption "Logitech Wireless Devices";
enable = mkEnableOption (lib.mdDoc "Logitech Wireless Devices");
enableGraphical = mkOption {
type = types.bool;

View file

@ -71,7 +71,7 @@ in
package = mkOption {
type = types.package;
internal = true;
description = ''
description = lib.mdDoc ''
The package that provides the OpenGL implementation.
'';
};
@ -79,9 +79,9 @@ in
package32 = mkOption {
type = types.package;
internal = true;
description = ''
description = lib.mdDoc ''
The package that provides the 32-bit OpenGL implementation on
64-bit systems. Used when <option>driSupport32Bit</option> is
64-bit systems. Used when {option}`driSupport32Bit` is
set.
'';
};
@ -111,11 +111,11 @@ in
type = types.bool;
internal = true;
default = false;
description = ''
Whether the <literal>LD_LIBRARY_PATH</literal> environment variable
description = lib.mdDoc ''
Whether the `LD_LIBRARY_PATH` environment variable
should be set to the locations of driver libraries. Drivers which
rely on overriding libraries should set this to true. Drivers which
support <literal>libglvnd</literal> and other dispatch libraries
support `libglvnd` and other dispatch libraries
instead of overriding libraries should not set this.
'';
};

View file

@ -49,9 +49,9 @@ in
{
options = {
hardware.openrazer = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
OpenRazer drivers and userspace daemon.
'';
'');
verboseLogging = mkOption {
type = types.bool;

View file

@ -48,7 +48,7 @@ in {
options = {
hardware.raid.HPSmartArray = {
enable = mkEnableOption "HP Smart Array kernel modules and CLI utility";
enable = mkEnableOption (lib.mdDoc "HP Smart Array kernel modules and CLI utility");
};
};

View file

@ -5,7 +5,7 @@ let
in
{
options.hardware.saleae-logic = {
enable = lib.mkEnableOption "udev rules for Saleae Logic devices";
enable = lib.mkEnableOption (lib.mdDoc "udev rules for Saleae Logic devices");
package = lib.mkOption {
type = lib.types.package;

View file

@ -36,7 +36,7 @@ in
meta.maintainers = with lib.maintainers; [ peterhoeg ];
options.hardware.sata.timeout = {
enable = mkEnableOption "SATA drive timeouts";
enable = mkEnableOption (lib.mdDoc "SATA drive timeouts");
deciSeconds = mkOption {
example = 70;

View file

@ -57,7 +57,7 @@ let
in {
options = {
hardware.system76 = {
enableAll = mkEnableOption "all recommended configuration for system76 systems";
enableAll = mkEnableOption (lib.mdDoc "all recommended configuration for system76 systems");
firmware-daemon.enable = mkOption {
default = cfg.enableAll;

View file

@ -8,23 +8,23 @@ let
in
{
options.hardware.tuxedo-keyboard = {
enable = mkEnableOption ''
enable = mkEnableOption (lib.mdDoc ''
Enables the tuxedo-keyboard driver.
To configure the driver, pass the options to the <option>boot.kernelParams</option> configuration.
To configure the driver, pass the options to the {option}`boot.kernelParams` configuration.
There are several parameters you can change. It's best to check at the source code description which options are supported.
You can find all the supported parameters at: <link xlink:href="https://github.com/tuxedocomputers/tuxedo-keyboard#kernelparam"/>
You can find all the supported parameters at: <https://github.com/tuxedocomputers/tuxedo-keyboard#kernelparam>
In order to use the <literal>custom</literal> lighting with the maximumg brightness and a color of <literal>0xff0a0a</literal> one would put pass <option>boot.kernelParams</option> like this:
In order to use the `custom` lighting with the maximumg brightness and a color of `0xff0a0a` one would put pass {option}`boot.kernelParams` like this:
<programlisting>
```
boot.kernelParams = [
"tuxedo_keyboard.mode=0"
"tuxedo_keyboard.brightness=255"
"tuxedo_keyboard.color_left=0xff0a0a"
];
</programlisting>
'';
```
'');
};
config = mkIf cfg.enable

View file

@ -10,7 +10,7 @@ let
};
in {
options.hardware.ubertooth = {
enable = mkEnableOption "Enable the Ubertooth software and its udev rules.";
enable = mkEnableOption (lib.mdDoc "Enable the Ubertooth software and its udev rules.");
group = mkOption {
type = types.str;

View file

@ -4,7 +4,7 @@ let
cfg = config.hardware.uinput;
in {
options.hardware.uinput = {
enable = lib.mkEnableOption "uinput support";
enable = lib.mkEnableOption (lib.mdDoc "uinput support");
};
config = lib.mkIf cfg.enable {

View file

@ -12,7 +12,7 @@ in
{
options.hardware.mwProCapture.enable = mkEnableOption "Magewell Pro Capture family kernel module";
options.hardware.mwProCapture.enable = mkEnableOption (lib.mdDoc "Magewell Pro Capture family kernel module");
config = mkIf cfg.enable {

View file

@ -2,7 +2,7 @@
with lib;
{
options.hardware.video.hidpi.enable = mkEnableOption "Font/DPI configuration optimized for HiDPI displays";
options.hardware.video.hidpi.enable = mkEnableOption (lib.mdDoc "Font/DPI configuration optimized for HiDPI displays");
config = mkIf config.hardware.video.hidpi.enable {
console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz";

View file

@ -233,11 +233,8 @@ in
}
{
assertion = cfg.powerManagement.enable -> (
builtins.pathExists (cfg.package.out + "/bin/nvidia-sleep.sh") &&
builtins.pathExists (cfg.package.out + "/lib/systemd/system-sleep/nvidia")
);
message = "Required files for driver based power management don't exist.";
assertion = cfg.powerManagement.enable -> versionAtLeast nvidia_x11.version "430.09";
message = "Required files for driver based power management only exist on versions >= 430.09.";
}
{
@ -260,8 +257,6 @@ in
# - Configure the display manager to run specific `xrandr` commands which will
# configure/enable displays connected to the Intel iGPU / AMD APU.
services.xserver.useGlamor = mkDefault offloadCfg.enable;
services.xserver.drivers = let
in optional primeEnabled {
name = igpuDriver;

View file

@ -6,7 +6,7 @@ let
cfg = config.services.switcherooControl;
in {
options.services.switcherooControl = {
enable = mkEnableOption "switcheroo-control, a D-Bus service to check the availability of dual-GPU";
enable = mkEnableOption (lib.mdDoc "switcheroo-control, a D-Bus service to check the availability of dual-GPU");
};
config = mkIf cfg.enable {

View file

@ -12,7 +12,7 @@ in
{
options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
options.hardware.facetimehd.enable = mkEnableOption (lib.mdDoc "facetimehd kernel module");
options.hardware.facetimehd.withCalibration = mkOption {
default = false;

View file

@ -3,7 +3,7 @@
with lib;
{
options.hardware.wooting.enable =
mkEnableOption "Enable support for Wooting keyboards";
mkEnableOption (lib.mdDoc "Enable support for Wooting keyboards");
config = mkIf config.hardware.wooting.enable {
environment.systemPackages = [ pkgs.wootility ];

View file

@ -6,7 +6,7 @@ let
in
{
options.hardware.xone = {
enable = mkEnableOption "the xone driver for Xbox One and Xbobx Series X|S accessories";
enable = mkEnableOption (lib.mdDoc "the xone driver for Xbox One and Xbobx Series X|S accessories");
};
config = mkIf cfg.enable {

View file

@ -6,7 +6,7 @@ let
in
{
options.hardware.xpadneo = {
enable = mkEnableOption "the xpadneo driver for Xbox One wireless controllers";
enable = mkEnableOption (lib.mdDoc "the xpadneo driver for Xbox One wireless controllers");
};
config = mkIf cfg.enable {

View file

@ -32,22 +32,20 @@ in
type = types.nullOr (types.enum [ "ibus" "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
default = null;
example = "fcitx";
description = ''
description = lib.mdDoc ''
Select the enabled input method. Input methods is a software to input symbols that are not available on standard input devices.
Input methods are specially used to input Chinese, Japanese and Korean characters.
Currently the following input methods are available in NixOS:
<itemizedlist>
<listitem><para>ibus: The intelligent input bus, extra input engines can be added using <literal>i18n.inputMethod.ibus.engines</literal>.</para></listitem>
<listitem><para>fcitx: A customizable lightweight input method, extra input engines can be added using <literal>i18n.inputMethod.fcitx.engines</literal>.</para></listitem>
<listitem><para>fcitx5: The next generation of fcitx, addons (including engines, dictionaries, skins) can be added using <literal>i18n.inputMethod.fcitx5.addons</literal>.</para></listitem>
<listitem><para>nabi: A Korean input method based on XIM. Nabi doesn't support Qt 5.</para></listitem>
<listitem><para>uim: The universal input method, is a library with a XIM bridge. uim mainly support Chinese, Japanese and Korean.</para></listitem>
<listitem><para>hime: An extremely easy-to-use input method framework.</para></listitem>
<listitem><para>kime: Koream IME.</para></listitem>
</itemizedlist>
- ibus: The intelligent input bus, extra input engines can be added using `i18n.inputMethod.ibus.engines`.
- fcitx: A customizable lightweight input method, extra input engines can be added using `i18n.inputMethod.fcitx.engines`.
- fcitx5: The next generation of fcitx, addons (including engines, dictionaries, skins) can be added using `i18n.inputMethod.fcitx5.addons`.
- nabi: A Korean input method based on XIM. Nabi doesn't support Qt 5.
- uim: The universal input method, is a library with a XIM bridge. uim mainly support Chinese, Japanese and Korean.
- hime: An extremely easy-to-use input method framework.
- kime: Koream IME.
'';
};
@ -55,7 +53,7 @@ in
internal = true;
type = types.nullOr types.path;
default = null;
description = ''
description = lib.mdDoc ''
The input method method package.
'';
};

View file

@ -20,7 +20,7 @@ in {
'';
};
enableRimeData = mkEnableOption "default rime-data with fcitx5-rime";
enableRimeData = mkEnableOption (lib.mdDoc "default rime-data with fcitx5-rime");
};
};

View file

@ -58,7 +58,7 @@ in
firmwarePartitionOffset = mkOption {
type = types.int;
default = 8;
description = ''
description = lib.mdDoc ''
Gap in front of the /boot/firmware partition, in mebibytes (1024×1024
bytes).
Can be increased to make more space for boards requiring to dd u-boot

View file

@ -1,7 +1,7 @@
{
x86_64-linux = "/nix/store/3af6g226v4hsv6x7xzh23d6wqyq0nzjp-nix-2.10.3";
i686-linux = "/nix/store/43xxh2jip6rpdhylc5z9a5fxx54dw206-nix-2.10.3";
aarch64-linux = "/nix/store/6qw3r57nra08ars8j8zyj3fl8lz4cvnd-nix-2.10.3";
x86_64-darwin = "/nix/store/3b7qrm0qjw57fmznrsvm0ai568i89hc2-nix-2.10.3";
aarch64-darwin = "/nix/store/gp7k17iy1n7hgf97qwnxw28c6v9nhb1i-nix-2.10.3";
x86_64-linux = "/nix/store/nmq5zcd93qb1yskx42rs910ff0247nn2-nix-2.11.0";
i686-linux = "/nix/store/ja6im1sw9a8lzczi10lc0iddffl9kzmn-nix-2.11.0";
aarch64-linux = "/nix/store/myr6fcqa9y4y2fb83zz73dck52vcn81z-nix-2.11.0";
x86_64-darwin = "/nix/store/2pfjz9b22k9997gh7cb0hjk1qa4lxrvy-nix-2.11.0";
aarch64-darwin = "/nix/store/lr32i0bdarx1iqsch4sy24jj1jkfw9vf-nix-2.11.0";
}

View file

@ -11,7 +11,7 @@ with lib;
internal = true;
default = [];
example = [ { assertion = false; message = "you can't enable this for that reason"; } ];
description = ''
description = lib.mdDoc ''
This option allows modules to express conditions that must
hold for the evaluation of the system configuration to
succeed, along with associated error messages for the user.
@ -23,7 +23,7 @@ with lib;
default = [];
type = types.listOf types.str;
example = [ "The `foo' service is deprecated and will go away soon!" ];
description = ''
description = lib.mdDoc ''
This option allows modules to show warnings to users during
the evaluation of the system configuration.
'';

View file

@ -226,15 +226,14 @@ in
nixos.enable = mkOption {
type = types.bool;
default = true;
description = ''
description = lib.mdDoc ''
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>documentation.man.enable</option> is
set.</para></listitem>
<listitem><para>This includes the HTML manual and the <command>nixos-help</command> command if
<option>documentation.doc.enable</option> is set.</para></listitem>
</itemizedlist>
- This includes man pages like
{manpage}`configuration.nix(5)` if {option}`documentation.man.enable` is
set.
- This includes the HTML manual and the {command}`nixos-help` command if
{option}`documentation.doc.enable` is set.
'';
};

View file

@ -30,7 +30,7 @@ let
specialArgs.someArg.myModule = { lib, ... }: {
options.foobar = lib.mkOption {
type = lib.types.str;
description = "The foobar option was added via specialArgs";
description = lib.mdDoc "The foobar option was added via specialArgs";
default = "qux";
};
};

View file

@ -19,7 +19,7 @@ in
ids.uids = lib.mkOption {
internal = true;
description = ''
description = lib.mdDoc ''
The user IDs used in NixOS.
'';
type = types.attrsOf types.int;
@ -27,7 +27,7 @@ in
ids.gids = lib.mkOption {
internal = true;
description = ''
description = lib.mdDoc ''
The group IDs used in NixOS.
'';
type = types.attrsOf types.int;

View file

@ -12,7 +12,7 @@ in
nixos.label = mkOption {
type = types.strMatching "[a-zA-Z0-9:_\\.-]*";
description = ''
description = lib.mdDoc ''
NixOS version name to be used in the names of generated
outputs and boot labels.
@ -20,25 +20,26 @@ in
this is the option for you.
It can only contain letters, numbers and the following symbols:
<literal>:</literal>, <literal>_</literal>, <literal>.</literal> and <literal>-</literal>.
`:`, `_`, `.` and `-`.
The default is <option>system.nixos.tags</option> separated by
"-" + "-" + <envar>NIXOS_LABEL_VERSION</envar> environment
The default is {option}`system.nixos.tags` separated by
"-" + "-" + {env}`NIXOS_LABEL_VERSION` environment
variable (defaults to the value of
<option>system.nixos.version</option>).
{option}`system.nixos.version`).
Can be overriden by setting <envar>NIXOS_LABEL</envar>.
Can be overriden by setting {env}`NIXOS_LABEL`.
Useful for not loosing track of configurations built from different
nixos branches/revisions, e.g.:
<screen>
```
#!/bin/sh
today=`date +%Y%m%d`
branch=`(cd nixpkgs ; git branch 2>/dev/null | sed -n '/^\* / { s|^\* ||; p; }')`
revision=`(cd nixpkgs ; git rev-parse HEAD)`
export NIXOS_LABEL_VERSION="$today.$branch-''${revision:0:7}"
nixos-rebuild switch</screen>
nixos-rebuild switch
```
'';
};
@ -46,19 +47,19 @@ in
type = types.listOf types.str;
default = [];
example = [ "with-xen" ];
description = ''
description = lib.mdDoc ''
Strings to prefix to the default
<option>system.nixos.label</option>.
{option}`system.nixos.label`.
Useful for not loosing track of configurations built with
different options, e.g.:
<screen>
```
{
system.nixos.tags = [ "with-xen" ];
virtualisation.xen.enable = true;
}
</screen>
```
'';
};

View file

@ -183,8 +183,8 @@ in
pruneNames = mkOption {
type = listOf str;
default = lib.optionals (!isFindutils) [ ".bzr" ".cache" ".git" ".hg" ".svn" ];
defaultText = literalDocBook ''
<literal>[ ".bzr" ".cache" ".git" ".hg" ".svn" ]</literal>, if
defaultText = literalMD ''
`[ ".bzr" ".cache" ".git" ".hg" ".svn" ]`, if
supported by the locate implementation (i.e. mlocate or plocate).
'';
description = lib.mdDoc ''

View file

@ -7,7 +7,7 @@ in
{
options = {
documentation.man.man-db = {
enable = lib.mkEnableOption "man-db as the default man page viewer" // {
enable = lib.mkEnableOption (lib.mdDoc "man-db as the default man page viewer") // {
default = config.documentation.man.enable;
defaultText = lib.literalExpression "config.documentation.man.enable";
example = false;

Some files were not shown because too many files have changed in this diff Show more