@@ -55,6 +55,11 @@ trim_trailing_whitespace = unset
56indent_size = unset
56indent_size = unset
58+# trailing whitespace is an actual syntax element of classic Markdown/
59+# CommonMark to enforce a line break
61+trim_trailing_whitespace = unset
59trim_trailing_whitespace = unset
64trim_trailing_whitespace = unset
@@ -41,7 +41,8 @@
41/pkgs/build-support/cc-wrapper @Ericson2314
41/pkgs/build-support/cc-wrapper @Ericson2314
42/pkgs/build-support/bintools-wrapper @Ericson2314
42/pkgs/build-support/bintools-wrapper @Ericson2314
43/pkgs/build-support/setup-hooks @Ericson2314
43/pkgs/build-support/setup-hooks @Ericson2314
44−/pkgs/build-support/setup-hooks/auto-patchelf.sh @aszlig
44+/pkgs/build-support/setup-hooks/auto-patchelf.sh @layus
45+/pkgs/build-support/setup-hooks/auto-patchelf.py @layus
46# Nixpkgs build-support
47# Nixpkgs build-support
47/pkgs/build-support/writers @lassulus @Profpatsch
48/pkgs/build-support/writers @lassulus @Profpatsch
@@ -242,9 +243,8 @@
243# Docker tools
244# Docker tools
244/pkgs/build-support/docker @roberth
245/pkgs/build-support/docker @roberth
245−/nixos/tests/docker-tools-overlay.nix @roberth
246+/nixos/tests/docker-tools* @roberth
246−/nixos/tests/docker-tools.nix @roberth
247−/doc/builders/images/dockertools.xml @roberth
247+/doc/builders/images/dockertools.section.md @roberth
249# Blockchains
249# Blockchains
250/pkgs/applications/blockchains @mmahut @RaghavSood
250/pkgs/applications/blockchains @mmahut @RaghavSood
@@ -285,3 +285,7 @@
285/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
285/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
286/nixos/tests/matrix-appservice-irc.nix @piegamesde
286/nixos/tests/matrix-appservice-irc.nix @piegamesde
287/nixos/tests/matrix-conduit.nix @piegamesde
287/nixos/tests/matrix-conduit.nix @piegamesde
290+/pkgs/build-support/dotnet @IvarWithoutBones
291+/pkgs/development/compilers/dotnet @IvarWithoutBones
.github/workflows/basic-eval.yml+1−1
@@ -16,7 +16,7 @@ jobs:
16 # we don't limit this action to only NixOS repo since the checks are cheap and useful developer feedback
16 # we don't limit this action to only NixOS repo since the checks are cheap and useful developer feedback
18 - uses: actions/checkout@v3
18 - uses: actions/checkout@v3
19− - uses: cachix/install-nix-action@v16
19+ - uses: cachix/install-nix-action@v17
20 - uses: cachix/cachix-action@v10
20 - uses: cachix/cachix-action@v10
22 # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
22 # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
.github/workflows/editorconfig.yml+1−1
@@ -28,7 +28,7 @@ jobs:
29 # pull_request_target checks out the base branch by default
29 # pull_request_target checks out the base branch by default
30 ref: refs/pull/${{ github.event.pull_request.number }}/merge
30 ref: refs/pull/${{ github.event.pull_request.number }}/merge
31− - uses: cachix/install-nix-action@v16
31+ - uses: cachix/install-nix-action@v17
33 # nixpkgs commit is pinned so that it doesn't break
33 # nixpkgs commit is pinned so that it doesn't break
34 # editorconfig-checker 2.4.0
34 # editorconfig-checker 2.4.0
.github/workflows/manual-nixos.yml+1−1
@@ -18,7 +18,7 @@ jobs:
19 # pull_request_target checks out the base branch by default
19 # pull_request_target checks out the base branch by default
20 ref: refs/pull/${{ github.event.pull_request.number }}/merge
20 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v16
21+ - uses: cachix/install-nix-action@v17
23 # explicitly enable sandbox
23 # explicitly enable sandbox
24 extra_nix_config: sandbox = true
24 extra_nix_config: sandbox = true
.github/workflows/manual-nixpkgs.yml+1−1
@@ -18,7 +18,7 @@ jobs:
19 # pull_request_target checks out the base branch by default
19 # pull_request_target checks out the base branch by default
20 ref: refs/pull/${{ github.event.pull_request.number }}/merge
20 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v16
21+ - uses: cachix/install-nix-action@v17
23 # explicitly enable sandbox
23 # explicitly enable sandbox
24 extra_nix_config: sandbox = true
24 extra_nix_config: sandbox = true
.github/workflows/nixos-manual.yml+1−1
@@ -19,7 +19,7 @@ jobs:
20 # pull_request_target checks out the base branch by default
20 # pull_request_target checks out the base branch by default
21 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21 ref: refs/pull/${{ github.event.pull_request.number }}/merge
22− - uses: cachix/install-nix-action@v16
22+ - uses: cachix/install-nix-action@v17
23 - name: Check DocBook files generated from Markdown are consistent
23 - name: Check DocBook files generated from Markdown are consistent
25 nixos/doc/manual/md-to-db.sh
25 nixos/doc/manual/md-to-db.sh
.github/workflows/update-terraform-providers.yml+7−6
@@ -11,7 +11,7 @@ jobs:
11 runs-on: ubuntu-latest
11 runs-on: ubuntu-latest
13 - uses: actions/checkout@v3
13 - uses: actions/checkout@v3
14− - uses: cachix/install-nix-action@v16
14+ - uses: cachix/install-nix-action@v17
15 - name: setup
15 - name: setup
@@ -25,14 +25,15 @@ jobs:
25 git commit -m "${{ steps.setup.outputs.title }}" providers.json
25 git commit -m "${{ steps.setup.outputs.title }}" providers.json
27 - name: create PR
27 - name: create PR
28− uses: peter-evans/create-pull-request@v3
28+ uses: peter-evans/create-pull-request@v4
31− Automatic update of terraform providers.
31+ Automatic update by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.
33− Created by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.
35− Check that all providers build with `@ofborg build terraform-full`
33+ Check that all providers build with:
35+ @ofborg build terraform-full
36 branch: terraform-providers-update
37 branch: terraform-providers-update
37 delete-branch: false
38 delete-branch: false
38 labels: "2.status: work-in-progress"
39 labels: "2.status: work-in-progress"
@@ -20,7 +20,7 @@ Below is a short excerpt of some points in there:
21 (pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
21 (pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
23− (Motivation for change. Additional information.)
23+ (Motivation for change. Link to release notes. Additional information.)
26 For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
26 For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
@@ -29,6 +29,7 @@ Below is a short excerpt of some points in there:
30 * nginx: init at 2.0.1
30 * nginx: init at 2.0.1
31 * firefox: 54.0.1 -> 55.0
31 * firefox: 54.0.1 -> 55.0
32+ https://www.mozilla.org/en-US/firefox/55.0/releasenotes/
32 * nixos/hydra: add bazBaz option
33 * nixos/hydra: add bazBaz option
34 Dual baz behavior is needed to do foo.
35 Dual baz behavior is needed to do foo.
@@ -52,6 +53,46 @@ In addition to writing properly formatted commit messages, it's important to inc
53For package version upgrades and such a one-line commit message is usually sufficient.
54For package version upgrades and such a one-line commit message is usually sufficient.
56+## Rebasing between branches (i.e. from master to staging)
58+From time to time, changes between branches must be rebased, for example, if the
59+number of new rebuilds they would cause is too large for the target branch. When
60+rebasing, care must be taken to include only the intended changes, otherwise
61+many CODEOWNERS will be inadvertently requested for review. To achieve this,
62+rebasing should not be performed directly on the target branch, but on the merge
63+base between the current and target branch.
65+In the following example, we see a rebase from `master` onto the merge base
66+between `master` and `staging`, so that a change can eventually be retargeted to
67+`staging`. The example uses `upstream` as the remote for `NixOS/nixpkgs.git`
68+while the `origin` remote is used for the remote you are pushing to.
72+# Find the common base between two branches
73+common=$(git merge-base upstream/master upstream/staging)
74+# Find the common base between your feature branch and master
75+commits=$(git merge-base $(git branch --show-current) upstream/master)
76+# Rebase all commits onto the common base
77+git rebase --onto=$common $commits
78+# Force push your changes
79+git push origin $(git branch --show-current) --force-with-lease
82+Then change the base branch in the GitHub PR using the *Edit* button in the upper
83+right corner, and switch from `master` to `staging`. After the PR has been
84+retargeted it might be necessary to do a final rebase onto the target branch, to
85+resolve any outstanding merge conflicts.
88+# Rebase onto target branch
89+git rebase upstream/staging
90+# Review and fixup possible conflicts
92+# Force push your changes
93+git push origin $(git branch --show-current) --force-with-lease
55## Backporting changes
96## Backporting changes
57Follow these steps to backport a change into a release branch in compliance with the [commit policy](https://nixos.org/nixpkgs/manual/#submitting-changes-stable-release-branches).
98Follow these steps to backport a change into a release branch in compliance with the [commit policy](https://nixos.org/nixpkgs/manual/#submitting-changes-stable-release-branches).
doc/builders/fetchers.chapter.md+12−12
@@ -6,11 +6,11 @@ When using Nix, you will frequently need to download source code and other files
7Because fixed output derivations are _identified_ by their hash, a common mistake is to update a fetcher's URL or a version parameter, without updating the hash. **This will cause the old contents to be used.** So remember to always invalidate the hash argument.
7Because fixed output derivations are _identified_ by their hash, a common mistake is to update a fetcher's URL or a version parameter, without updating the hash. **This will cause the old contents to be used.** So remember to always invalidate the hash argument.
9−For those who develop and maintain fetchers, a similar problem arises with changes to the implementation of a fetcher. These may cause a fixed output derivation to fail, but won't normally be caught by tests because the supposed output is already in the store or cache. For the purpose of testing, you can use a trick that is embodied by the [`invalidateFetcherByDrvHash`](#sec-pkgs-invalidateFetcherByDrvHash) function. It uses the derivation `name` to create a unique output path per fetcher implementation, defeating the caching precisely where it would be harmful.
9+For those who develop and maintain fetchers, a similar problem arises with changes to the implementation of a fetcher. These may cause a fixed output derivation to fail, but won't normally be caught by tests because the supposed output is already in the store or cache. For the purpose of testing, you can use a trick that is embodied by the [`invalidateFetcherByDrvHash`](#tester-invalidateFetcherByDrvHash) function. It uses the derivation `name` to create a unique output path per fetcher implementation, defeating the caching precisely where it would be harmful.
11## `fetchurl` and `fetchzip` {#fetchurl}
11## `fetchurl` and `fetchzip` {#fetchurl}
13−Two basic fetchers are `fetchurl` and `fetchzip`. Both of these have two required arguments, a URL and a hash. The hash is typically `sha256`, although many more hash algorithms are supported. Nixpkgs contributors are currently recommended to use `sha256`. This hash will be used by Nix to identify your source. A typical usage of fetchurl is provided below.
13+Two basic fetchers are `fetchurl` and `fetchzip`. Both of these have two required arguments, a URL and a hash. The hash is typically `sha256`, although many more hash algorithms are supported. Nixpkgs contributors are currently recommended to use `sha256`. This hash will be used by Nix to identify your source. A typical usage of `fetchurl` is provided below.
16{ stdenv, fetchurl }:
16{ stdenv, fetchurl }:
@@ -24,9 +24,9 @@ stdenv.mkDerivation {
27−The main difference between `fetchurl` and `fetchzip` is in how they store the contents. `fetchurl` will store the unaltered contents of the URL within the Nix store. `fetchzip` on the other hand will decompress the archive for you, making files and directories directly accessible in the future. `fetchzip` can only be used with archives. Despite the name, `fetchzip` is not limited to .zip files and can also be used with any tarball.
27+The main difference between `fetchurl` and `fetchzip` is in how they store the contents. `fetchurl` will store the unaltered contents of the URL within the Nix store. `fetchzip` on the other hand, will decompress the archive for you, making files and directories directly accessible in the future. `fetchzip` can only be used with archives. Despite the name, `fetchzip` is not limited to .zip files and can also be used with any tarball.
29−`fetchpatch` works very similarly to `fetchurl` with the same arguments expected. It expects patch files as a source and performs normalization on them before computing the checksum. For example it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.
29+`fetchpatch` works very similarly to `fetchurl` with the same arguments expected. It expects patch files as a source and performs normalization on them before computing the checksum. For example, it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.
31Most other fetchers return a directory rather than a single file.
31Most other fetchers return a directory rather than a single file.
@@ -38,9 +38,9 @@ Used with Subversion. Expects `url` to a Subversion directory, `rev`, and `sha25
39Used with Git. Expects `url` to a Git repo, `rev`, and `sha256`. `rev` in this case can be full the git commit id (SHA1 hash) or a tag name like `refs/tags/v1.0`.
39Used with Git. Expects `url` to a Git repo, `rev`, and `sha256`. `rev` in this case can be full the git commit id (SHA1 hash) or a tag name like `refs/tags/v1.0`.
41−Additionally the following optional arguments can be given: `fetchSubmodules = true` makes `fetchgit` also fetch the submodules of a repository. If `deepClone` is set to true, the entire repository is cloned as opposing to just creating a shallow clone. `deepClone = true` also implies `leaveDotGit = true` which means that the `.git` directory of the clone won't be removed after checkout.
41+Additionally, the following optional arguments can be given: `fetchSubmodules = true` makes `fetchgit` also fetch the submodules of a repository. If `deepClone` is set to true, the entire repository is cloned as opposing to just creating a shallow clone. `deepClone = true` also implies `leaveDotGit = true` which means that the `.git` directory of the clone won't be removed after checkout.
43−If only parts of the repository are needed, `sparseCheckout` can be used. This will prevent git from fetching unnecessary blobs from server, see [git sparse-checkout](https://git-scm.com/docs/git-sparse-checkout) and [git clone --filter](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterltfilter-specgt) for more infomation:
43+If only parts of the repository are needed, `sparseCheckout` can be used. This will prevent git from fetching unnecessary blobs from server, see [git sparse-checkout](https://git-scm.com/docs/git-sparse-checkout) and [git clone --filter](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterltfilter-specgt) for more information:
46{ stdenv, fetchgit }:
46{ stdenv, fetchgit }:
@@ -78,17 +78,17 @@ A number of fetcher functions wrap part of `fetchurl` and `fetchzip`. They are m
79## `fetchFromGitHub` {#fetchfromgithub}
79## `fetchFromGitHub` {#fetchfromgithub}
81−`fetchFromGitHub` expects four arguments. `owner` is a string corresponding to the GitHub user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every GitHub HTML page as `owner`/`repo`. `rev` corresponds to the Git commit hash or tag (e.g `v1.0`) that will be downloaded from Git. Finally, `sha256` corresponds to the hash of the extracted directory. Again, other hash algorithms are also available but `sha256` is currently preferred.
81+`fetchFromGitHub` expects four arguments. `owner` is a string corresponding to the GitHub user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every GitHub HTML page as `owner`/`repo`. `rev` corresponds to the Git commit hash or tag (e.g `v1.0`) that will be downloaded from Git. Finally, `sha256` corresponds to the hash of the extracted directory. Again, other hash algorithms are also available, but `sha256` is currently preferred.
83`fetchFromGitHub` uses `fetchzip` to download the source archive generated by GitHub for the specified revision. If `leaveDotGit`, `deepClone` or `fetchSubmodules` are set to `true`, `fetchFromGitHub` will use `fetchgit` instead. Refer to its section for documentation of these options.
83`fetchFromGitHub` uses `fetchzip` to download the source archive generated by GitHub for the specified revision. If `leaveDotGit`, `deepClone` or `fetchSubmodules` are set to `true`, `fetchFromGitHub` will use `fetchgit` instead. Refer to its section for documentation of these options.
85## `fetchFromGitLab` {#fetchfromgitlab}
85## `fetchFromGitLab` {#fetchfromgitlab}
87−This is used with GitLab repositories. The arguments expected are very similar to fetchFromGitHub above.
87+This is used with GitLab repositories. The arguments expected are very similar to `fetchFromGitHub` above.
89## `fetchFromGitiles` {#fetchfromgitiles}
89## `fetchFromGitiles` {#fetchfromgitiles}
91−This is used with Gitiles repositories. The arguments expected are similar to fetchgit.
91+This is used with Gitiles repositories. The arguments expected are similar to `fetchgit`.
93## `fetchFromBitbucket` {#fetchfrombitbucket}
93## `fetchFromBitbucket` {#fetchfrombitbucket}
@@ -96,11 +96,11 @@ This is used with BitBucket repositories. The arguments expected are very simila
97## `fetchFromSavannah` {#fetchfromsavannah}
97## `fetchFromSavannah` {#fetchfromsavannah}
99−This is used with Savannah repositories. The arguments expected are very similar to fetchFromGitHub above.
99+This is used with Savannah repositories. The arguments expected are very similar to `fetchFromGitHub` above.
101## `fetchFromRepoOrCz` {#fetchfromrepoorcz}
101## `fetchFromRepoOrCz` {#fetchfromrepoorcz}
103−This is used with repo.or.cz repositories. The arguments expected are very similar to fetchFromGitHub above.
103+This is used with repo.or.cz repositories. The arguments expected are very similar to `fetchFromGitHub` above.
105## `fetchFromSourcehut` {#fetchfromsourcehut}
105## `fetchFromSourcehut` {#fetchfromsourcehut}
@@ -111,4 +111,4 @@ or "hg"), `domain` and `fetchSubmodules`.
112If `fetchSubmodules` is `true`, `fetchFromSourcehut` uses `fetchgit`
112If `fetchSubmodules` is `true`, `fetchFromSourcehut` uses `fetchgit`
113or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
113or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
114−respectively. Otherwise the fetcher uses `fetchzip`.
114+respectively. Otherwise, the fetcher uses `fetchzip`.
doc/builders/images/dockertools.section.md+8−8
@@ -58,7 +58,7 @@ After the new layer has been created, its closure (to which `contents`, `config`
59At the end of the process, only one new single layer will be produced and added to the resulting image.
59At the end of the process, only one new single layer will be produced and added to the resulting image.
61−The resulting repository will only list the single image `image/tag`. In the case of [the `buildImage` example](#ex-dockerTools-buildImage) it would be `redis/latest`.
61+The resulting repository will only list the single image `image/tag`. In the case of [the `buildImage` example](#ex-dockerTools-buildImage), it would be `redis/latest`.
63It is possible to inspect the arguments with which an image was built using its `buildArgs` attribute.
63It is possible to inspect the arguments with which an image was built using its `buildArgs` attribute.
@@ -87,7 +87,7 @@ pkgs.dockerTools.buildImage {
90−and now the Docker CLI will display a reasonable date and sort the images as expected:
90+Now the Docker CLI will display a reasonable date and sort the images as expected:
92```ShellSession
92```ShellSession
93$ docker images
93$ docker images
@@ -95,7 +95,7 @@ REPOSITORY TAG IMAGE ID CREATED SIZE
95hello latest de2bf4786de6 About a minute ago 25.2MB
95hello latest de2bf4786de6 About a minute ago 25.2MB
98−however, the produced images will not be binary reproducible.
98+However, the produced images will not be binary reproducible.
100## buildLayeredImage {#ssec-pkgs-dockerTools-buildLayeredImage}
100## buildLayeredImage {#ssec-pkgs-dockerTools-buildLayeredImage}
@@ -119,13 +119,13 @@ Create a Docker image with many of the store paths being on their own layer to i
120`contents` _optional_
120`contents` _optional_
122−: Top level paths in the container. Either a single derivation, or a list of derivations.
122+: Top-level paths in the container. Either a single derivation, or a list of derivations.
124 *Default:* `[]`
124 *Default:* `[]`
126`config` _optional_
126`config` _optional_
128−: Run-time configuration of the container. A full list of the options are available at in the [ Docker Image Specification v1.2.0 ](https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions).
128+: Run-time configuration of the container. A full list of the options are available at in the [Docker Image Specification v1.2.0](https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions).
130 *Default:* `{}`
130 *Default:* `{}`
@@ -195,9 +195,9 @@ pkgs.dockerTools.buildLayeredImage {
196Increasing the `maxLayers` increases the number of layers which have a chance to be shared between different images.
196Increasing the `maxLayers` increases the number of layers which have a chance to be shared between different images.
198−Modern Docker installations support up to 128 layers, however older versions support as few as 42.
198+Modern Docker installations support up to 128 layers, but older versions support as few as 42.
200−If the produced image will not be extended by other Docker builds, it is safe to set `maxLayers` to `128`. However it will be impossible to extend the image further.
200+If the produced image will not be extended by other Docker builds, it is safe to set `maxLayers` to `128`. However, it will be impossible to extend the image further.
202The first (`maxLayers-2`) most "popular" paths will have their own individual layers, then layer \#`maxLayers-1` will contain all the remaining "unpopular" paths, and finally layer \#`maxLayers` will contain the Image configuration.
202The first (`maxLayers-2`) most "popular" paths will have their own individual layers, then layer \#`maxLayers-1` will contain all the remaining "unpopular" paths, and finally layer \#`maxLayers` will contain the Image configuration.
@@ -213,7 +213,7 @@ The image produced by running the output script can be piped directly into `dock
213$(nix-build) | docker load
213$(nix-build) | docker load
216−Alternatively, the image be piped via `gzip` into `skopeo`, e.g. to copy it into a registry:
216+Alternatively, the image be piped via `gzip` into `skopeo`, e.g., to copy it into a registry:
218```ShellSession
218```ShellSession
219$(nix-build) | gzip --fast | skopeo copy docker-archive:/dev/stdin docker://some_docker_registry/myimage:tag
219$(nix-build) | gzip --fast | skopeo copy docker-archive:/dev/stdin docker://some_docker_registry/myimage:tag
doc/builders/images/ocitools.section.md+3−3
@@ -1,10 +1,10 @@
1# pkgs.ociTools {#sec-pkgs-ociTools}
1# pkgs.ociTools {#sec-pkgs-ociTools}
3−`pkgs.ociTools` is a set of functions for creating containers according to the [OCI container specification v1.0.0](https://github.com/opencontainers/runtime-spec). Beyond that it makes no assumptions about the container runner you choose to use to run the created container.
3+`pkgs.ociTools` is a set of functions for creating containers according to the [OCI container specification v1.0.0](https://github.com/opencontainers/runtime-spec). Beyond that, it makes no assumptions about the container runner you choose to use to run the created container.
5## buildContainer {#ssec-pkgs-ociTools-buildContainer}
5## buildContainer {#ssec-pkgs-ociTools-buildContainer}
7−This function creates a simple OCI container that runs a single command inside of it. An OCI container consists of a `config.json` and a rootfs directory.The nix store of the container will contain all referenced dependencies of the given command.
7+This function creates a simple OCI container that runs a single command inside of it. An OCI container consists of a `config.json` and a rootfs directory. The nix store of the container will contain all referenced dependencies of the given command.
9The parameters of `buildContainer` with an example value are described below:
9The parameters of `buildContainer` with an example value are described below:
@@ -30,7 +30,7 @@ buildContainer {
33−- `args` specifies a set of arguments to run inside the container. This is the only required argument for `buildContainer`. All referenced packages inside the derivation will be made available inside the container
33+- `args` specifies a set of arguments to run inside the container. This is the only required argument for `buildContainer`. All referenced packages inside the derivation will be made available inside the container.
35- `mounts` specifies additional mount points chosen by the user. By default only a minimal set of necessary filesystems are mounted into the container (e.g procfs, cgroupfs)
35- `mounts` specifies additional mount points chosen by the user. By default only a minimal set of necessary filesystems are mounted into the container (e.g procfs, cgroupfs)
doc/builders/images/snaptools.section.md+1−1
@@ -33,7 +33,7 @@ in snapTools.makeSnap {
34## Build a Graphical Snap {#ssec-pkgs-snapTools-build-a-snap-firefox}
34## Build a Graphical Snap {#ssec-pkgs-snapTools-build-a-snap-firefox}
36−Graphical programs require many more integrations with the host. This example uses Firefox as an example, because it is one of the most complicated programs we could package.
36+Graphical programs require many more integrations with the host. This example uses Firefox as an example because it is one of the most complicated programs we could package.
38``` {#ex-snapTools-buildSnap-firefox .nix}
38``` {#ex-snapTools-buildSnap-firefox .nix}
doc/builders/packages/citrix.section.md+5−5
@@ -4,13 +4,13 @@ The [Citrix Workspace App](https://www.citrix.com/products/workspace-app/) is a
5## Basic usage {#sec-citrix-base}
5## Basic usage {#sec-citrix-base}
7−The tarball archive needs to be downloaded manually as the license agreements of the vendor for [Citrix Workspace](https://www.citrix.de/downloads/workspace-app/linux/workspace-app-for-linux-latest.html) needs to be accepted first. Then run `nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz`. With the archive available in the store the package can be built and installed with Nix.
7+The tarball archive needs to be downloaded manually, as the license agreements of the vendor for [Citrix Workspace](https://www.citrix.de/downloads/workspace-app/linux/workspace-app-for-linux-latest.html) needs to be accepted first. Then run `nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz`. With the archive available in the store, the package can be built and installed with Nix.
9−## Citrix Selfservice {#sec-citrix-selfservice}
9+## Citrix Self-service {#sec-citrix-selfservice}
11−The [selfservice](https://support.citrix.com/article/CTX200337) is an application managing Citrix desktops and applications. Please note that this feature only works with at least citrix_workspace_20_06_0 and later versions.
11+The [self-service](https://support.citrix.com/article/CTX200337) is an application managing Citrix desktops and applications. Please note that this feature only works with at least citrix_workspace_20_06_0 and later versions.
13−In order to set this up, you first have to [download the `.cr` file from the Netscaler Gateway](https://its.uiowa.edu/support/article/102186). After that you can configure the `selfservice` like this:
13+In order to set this up, you first have to [download the `.cr` file from the Netscaler Gateway](https://its.uiowa.edu/support/article/102186). After that, you can configure the `selfservice` like this:
15```ShellSession
15```ShellSession
16$ storebrowse -C ~/Downloads/receiverconfig.cr
16$ storebrowse -C ~/Downloads/receiverconfig.cr
@@ -19,7 +19,7 @@ $ selfservice
20## Custom certificates {#sec-citrix-custom-certs}
20## Custom certificates {#sec-citrix-custom-certs}
22−The `Citrix Workspace App` in `nixpkgs` trusts several certificates [from the Mozilla database](https://curl.haxx.se/docs/caextract.html) by default. However several companies using Citrix might require their own corporate certificate. On distros with imperative packaging these certs can be stored easily in [`$ICAROOT`](https://developer-docs.citrix.com/projects/receiver-for-linux-command-reference/en/13.7/), however this directory is a store path in `nixpkgs`. In order to work around this issue the package provides a simple mechanism to add custom certificates without rebuilding the entire package using `symlinkJoin`:
22+The `Citrix Workspace App` in `nixpkgs` trusts several certificates [from the Mozilla database](https://curl.haxx.se/docs/caextract.html) by default. However, several companies using Citrix might require their own corporate certificate. On distros with imperative packaging, these certs can be stored easily in [`$ICAROOT`](https://developer-docs.citrix.com/projects/receiver-for-linux-command-reference/en/13.7/), however this directory is a store path in `nixpkgs`. In order to work around this issue, the package provides a simple mechanism to add custom certificates without rebuilding the entire package using `symlinkJoin`:
25with import <nixpkgs> { config.allowUnfree = true; };
25with import <nixpkgs> { config.allowUnfree = true; };
doc/builders/packages/eclipse.section.md+5−5
@@ -8,9 +8,9 @@ Nixpkgs provides a number of packages that will install Eclipse in its various f
8$ nix-env -f '<nixpkgs>' -qaP -A eclipses --description
8$ nix-env -f '<nixpkgs>' -qaP -A eclipses --description
11−Once an Eclipse variant is installed it can be run using the `eclipse` command, as expected. From within Eclipse it is then possible to install plugins in the usual manner by either manually specifying an Eclipse update site or by installing the Marketplace Client plugin and using it to discover and install other plugins. This installation method provides an Eclipse installation that closely resemble a manually installed Eclipse.
11+Once an Eclipse variant is installed, it can be run using the `eclipse` command, as expected. From within Eclipse, it is then possible to install plugins in the usual manner by either manually specifying an Eclipse update site or by installing the Marketplace Client plugin and using it to discover and install other plugins. This installation method provides an Eclipse installation that closely resemble a manually installed Eclipse.
13−If you prefer to install plugins in a more declarative manner then Nixpkgs also offer a number of Eclipse plugins that can be installed in an _Eclipse environment_. This type of environment is created using the function `eclipseWithPlugins` found inside the `nixpkgs.eclipses` attribute set. This function takes as argument `{ eclipse, plugins ? [], jvmArgs ? [] }` where `eclipse` is a one of the Eclipse packages described above, `plugins` is a list of plugin derivations, and `jvmArgs` is a list of arguments given to the JVM running the Eclipse. For example, say you wish to install the latest Eclipse Platform with the popular Eclipse Color Theme plugin and also allow Eclipse to use more RAM. You could then add
13+If you prefer to install plugins in a more declarative manner, then Nixpkgs also offer a number of Eclipse plugins that can be installed in an _Eclipse environment_. This type of environment is created using the function `eclipseWithPlugins` found inside the `nixpkgs.eclipses` attribute set. This function takes as argument `{ eclipse, plugins ? [], jvmArgs ? [] }` where `eclipse` is a one of the Eclipse packages described above, `plugins` is a list of plugin derivations, and `jvmArgs` is a list of arguments given to the JVM running the Eclipse. For example, say you wish to install the latest Eclipse Platform with the popular Eclipse Color Theme plugin and also allow Eclipse to use more RAM. You could then add:
16packageOverrides = pkgs: {
16packageOverrides = pkgs: {
@@ -22,15 +22,15 @@ packageOverrides = pkgs: {
25−to your Nixpkgs configuration (`~/.config/nixpkgs/config.nix`) and install it by running `nix-env -f '<nixpkgs>' -iA myEclipse` and afterward run Eclipse as usual. It is possible to find out which plugins are available for installation using `eclipseWithPlugins` by running
25+to your Nixpkgs configuration (`~/.config/nixpkgs/config.nix`) and install it by running `nix-env -f '<nixpkgs>' -iA myEclipse` and afterward run Eclipse as usual. It is possible to find out which plugins are available for installation using `eclipseWithPlugins` by running:
27```ShellSession
27```ShellSession
28$ nix-env -f '<nixpkgs>' -qaP -A eclipses.plugins --description
28$ nix-env -f '<nixpkgs>' -qaP -A eclipses.plugins --description
31−If there is a need to install plugins that are not available in Nixpkgs then it may be possible to define these plugins outside Nixpkgs using the `buildEclipseUpdateSite` and `buildEclipsePlugin` functions found in the `nixpkgs.eclipses.plugins` attribute set. Use the `buildEclipseUpdateSite` function to install a plugin distributed as an Eclipse update site. This function takes `{ name, src }` as argument where `src` indicates the Eclipse update site archive. All Eclipse features and plugins within the downloaded update site will be installed. When an update site archive is not available then the `buildEclipsePlugin` function can be used to install a plugin that consists of a pair of feature and plugin JARs. This function takes an argument `{ name, srcFeature, srcPlugin }` where `srcFeature` and `srcPlugin` are the feature and plugin JARs, respectively.
31+If there is a need to install plugins that are not available in Nixpkgs then it may be possible to define these plugins outside Nixpkgs using the `buildEclipseUpdateSite` and `buildEclipsePlugin` functions found in the `nixpkgs.eclipses.plugins` attribute set. Use the `buildEclipseUpdateSite` function to install a plugin distributed as an Eclipse update site. This function takes `{ name, src }` as argument, where `src` indicates the Eclipse update site archive. All Eclipse features and plugins within the downloaded update site will be installed. When an update site archive is not available, then the `buildEclipsePlugin` function can be used to install a plugin that consists of a pair of feature and plugin JARs. This function takes an argument `{ name, srcFeature, srcPlugin }` where `srcFeature` and `srcPlugin` are the feature and plugin JARs, respectively.
33−Expanding the previous example with two plugins using the above functions we have
33+Expanding the previous example with two plugins using the above functions, we have:
36packageOverrides = pkgs: {
36packageOverrides = pkgs: {
doc/builders/packages/elm.section.md+1−1
@@ -1,6 +1,6 @@
1# Elm {#sec-elm}
1# Elm {#sec-elm}
3−To start a development environment do
3+To start a development environment, run:
5```ShellSession
5```ShellSession
6nix-shell -p elmPackages.elm elmPackages.elm-format
6nix-shell -p elmPackages.elm elmPackages.elm-format
doc/builders/packages/emacs.section.md+3−3
@@ -20,7 +20,7 @@ The Emacs package comes with some extra helpers to make it easier to configure.
23−You can install it like any other packages via `nix-env -iA myEmacs`. However, this will only install those packages. It will not `configure` them for us. To do this, we need to provide a configuration file. Luckily, it is possible to do this from within Nix! By modifying the above example, we can make Emacs load a custom config file. The key is to create a package that provide a `default.el` file in `/share/emacs/site-start/`. Emacs knows to load this file automatically when it starts.
23+You can install it like any other packages via `nix-env -iA myEmacs`. However, this will only install those packages. It will not `configure` them for us. To do this, we need to provide a configuration file. Luckily, it is possible to do this from within Nix! By modifying the above example, we can make Emacs load a custom config file. The key is to create a package that provides a `default.el` file in `/share/emacs/site-start/`. Emacs knows to load this file automatically when it starts.
@@ -101,9 +101,9 @@ You can install it like any other packages via `nix-env -iA myEmacs`. However, t
104−This provides a fairly full Emacs start file. It will load in addition to the user's presonal config. You can always disable it by passing `-q` to the Emacs command.
104+This provides a fairly full Emacs start file. It will load in addition to the user's personal config. You can always disable it by passing `-q` to the Emacs command.
106−Sometimes `emacs.pkgs.withPackages` is not enough, as this package set has some priorities imposed on packages (with the lowest priority assigned to Melpa Unstable, and the highest for packages manually defined in `pkgs/top-level/emacs-packages.nix`). But you can't control this priorities when some package is installed as a dependency. You can override it on per-package-basis, providing all the required dependencies manually - but it's tedious and there is always a possibility that an unwanted dependency will sneak in through some other package. To completely override such a package you can use `overrideScope'`.
106+Sometimes `emacs.pkgs.withPackages` is not enough, as this package set has some priorities imposed on packages (with the lowest priority assigned to Melpa Unstable, and the highest for packages manually defined in `pkgs/top-level/emacs-packages.nix`). But you can't control these priorities when some package is installed as a dependency. You can override it on a per-package-basis, providing all the required dependencies manually, but it's tedious and there is always a possibility that an unwanted dependency will sneak in through some other package. To completely override such a package, you can use `overrideScope'`.
109overrides = self: super: rec {
109overrides = self: super: rec {
doc/builders/packages/etc-files.section.md+4−4
@@ -1,10 +1,10 @@
1# /etc files {#etc}
1# /etc files {#etc}
3−Certain calls in glibc require access to runtime files found in /etc such as `/etc/protocols` or `/etc/services` -- [getprotobyname](https://linux.die.net/man/3/getprotobyname) is one such function.
3+Certain calls in glibc require access to runtime files found in `/etc` such as `/etc/protocols` or `/etc/services` -- [getprotobyname](https://linux.die.net/man/3/getprotobyname) is one such function.
5−On non-NixOS distributions these files are typically provided by packages (i.e. [netbase](https://packages.debian.org/sid/netbase)) if not already pre-installed in your distribution. This can cause non-reproducibility for code if they rely on these files being present.
5+On non-NixOS distributions these files are typically provided by packages (i.e., [netbase](https://packages.debian.org/sid/netbase)) if not already pre-installed in your distribution. This can cause non-reproducibility for code if they rely on these files being present.
7−If [iana-etc](https://hydra.nixos.org/job/nixos/trunk-combined/nixpkgs.iana-etc.x86_64-linux) is part of your _buildInputs_ then it will set the environment varaibles `NIX_ETC_PROTOCOLS` and `NIX_ETC_SERVICES` to the corresponding files in the package through a _setup-hook_.
7+If [iana-etc](https://hydra.nixos.org/job/nixos/trunk-combined/nixpkgs.iana-etc.x86_64-linux) is part of your `buildInputs`, then it will set the environment variables `NIX_ETC_PROTOCOLS` and `NIX_ETC_SERVICES` to the corresponding files in the package through a setup hook.
@@ -15,4 +15,4 @@ NIX_ETC_SERVICES=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/e
15NIX_ETC_PROTOCOLS=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/etc/protocols
15NIX_ETC_PROTOCOLS=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/etc/protocols
18−Nixpkg's version of [glibc](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/glibc/default.nix) has been patched to check for the existence of these environment variables. If the environment variable are *not set*, then it will attempt to find the files at the default location within _/etc_.
18+Nixpkg's version of [glibc](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/glibc/default.nix) has been patched to check for the existence of these environment variables. If the environment variables are *not* set, then it will attempt to find the files at the default location within `/etc`.
doc/builders/packages/firefox.section.md+7−8
@@ -2,7 +2,7 @@
3## Build wrapped Firefox with extensions and policies {#build-wrapped-firefox-with-extensions-and-policies}
3## Build wrapped Firefox with extensions and policies {#build-wrapped-firefox-with-extensions-and-policies}
5−The `wrapFirefox` function allows to pass policies, preferences and extension that are available to Firefox. With the help of `fetchFirefoxAddon` this allows build a Firefox version that already comes with addons pre-installed:
5+The `wrapFirefox` function allows to pass policies, preferences and extensions that are available to Firefox. With the help of `fetchFirefoxAddon` this allows to build a Firefox version that already comes with add-ons pre-installed:
@@ -40,13 +40,12 @@ The `wrapFirefox` function allows to pass policies, preferences and extension th
43−If `nixExtensions != null` then all manually installed addons will be uninstalled from your browser profile.
43+If `nixExtensions != null`, then all manually installed add-ons will be uninstalled from your browser profile.
44−To view available enterprise policies visit [enterprise policies](https://github.com/mozilla/policy-templates#enterprisepoliciesenabled)
44+To view available enterprise policies, visit [enterprise policies](https://github.com/mozilla/policy-templates#enterprisepoliciesenabled)
45−or type into the Firefox url bar: `about:policies#documentation`.
45+or type into the Firefox URL bar: `about:policies#documentation`.
46−Nix installed addons do not have a valid signature, which is why signature verification is disabled. This does not compromise security because downloaded addons are checksumed and manual addons can't be installed. Also make sure that the `name` field of fetchFirefoxAddon is unique. If you remove an addon from the nixExtensions array, rebuild and start Firefox the removed addon will be completly removed with all of its settings.
46+Nix installed add-ons do not have a valid signature, which is why signature verification is disabled. This does not compromise security because downloaded add-ons are checksummed and manual add-ons can't be installed. Also, make sure that the `name` field of `fetchFirefoxAddon` is unique. If you remove an add-on from the `nixExtensions` array, rebuild and start Firefox: the removed add-on will be completely removed with all of its settings.
48## Troubleshooting {#sec-firefox-troubleshooting}
48## Troubleshooting {#sec-firefox-troubleshooting}
49−If addons are marked as broken or the signature is invalid, make sure you have Firefox ESR installed. Normal Firefox does not provide the ability anymore to disable signature verification for addons thus nix addons get disabled by the normal Firefox binary.
49+If add-ons are marked as broken or the signature is invalid, make sure you have Firefox ESR installed. Normal Firefox does not provide the ability anymore to disable signature verification for add-ons thus nix add-ons get disabled by the normal Firefox binary.
51−If addons do not appear installed although they have been defined in your nix configuration file reset the local addon state of your Firefox profile by clicking `help -> restart with addons disabled -> restart -> refresh firefox`. This can happen if you switch from manual addon mode to nix addon mode and then back to manual mode and then again to nix addon mode.
51+If add-ons do not appear installed despite being defined in your nix configuration file, reset the local add-on state of your Firefox profile by clicking `Help -> More Troubleshooting Information -> Refresh Firefox`. This can happen if you switch from manual add-on mode to nix add-on mode and then back to manual mode and then again to nix add-on mode.
doc/builders/packages/fish.section.md+1−1
@@ -36,7 +36,7 @@ using `buildFishPlugin` and running unit tests with the `fishtape` test runner.
36## Fish wrapper {#sec-fish-wrapper}
36## Fish wrapper {#sec-fish-wrapper}
38The `wrapFish` package is a wrapper around Fish which can be used to create
38The `wrapFish` package is a wrapper around Fish which can be used to create
39−Fish shells initialised with some plugins as well as completions, configuration
39+Fish shells initialized with some plugins as well as completions, configuration
40snippets and functions sourced from the given paths. This provides a convenient
40snippets and functions sourced from the given paths. This provides a convenient
41way to test Fish plugins and scripts without having to alter the environment.
41way to test Fish plugins and scripts without having to alter the environment.
doc/builders/packages/fuse.section.md+2−2
@@ -24,10 +24,10 @@ packages on macOS:
24 checking for fuse.h... no
24 checking for fuse.h... no
25 configure: error: No fuse.h found.
25 configure: error: No fuse.h found.
27−This happens on autoconf based projects that uses `AC_CHECK_HEADERS` or
27+This happens on autoconf based projects that use `AC_CHECK_HEADERS` or
28`AC_CHECK_LIBS` to detect libfuse, and will occur even when the `fuse` package
28`AC_CHECK_LIBS` to detect libfuse, and will occur even when the `fuse` package
29is included in `buildInputs`. It happens because libfuse headers throw an error
29is included in `buildInputs`. It happens because libfuse headers throw an error
30−on macOS if the `FUSE_USE_VERSION` macro is undefined. Many proejcts do define
30+on macOS if the `FUSE_USE_VERSION` macro is undefined. Many projects do define
31`FUSE_USE_VERSION`, but only inside C source files. This results in the above
31`FUSE_USE_VERSION`, but only inside C source files. This results in the above
32error at configure time because the configure script would attempt to compile
32error at configure time because the configure script would attempt to compile
33sample FUSE programs without defining `FUSE_USE_VERSION`.
33sample FUSE programs without defining `FUSE_USE_VERSION`.
doc/builders/packages/ibus.section.md+3−3
@@ -6,7 +6,7 @@ This package is an ibus-based completion method to speed up typing.
7IBus needs to be configured accordingly to activate `typing-booster`. The configuration depends on the desktop manager in use. For detailed instructions, please refer to the [upstream docs](https://mike-fabian.github.io/ibus-typing-booster/documentation.html).
7IBus needs to be configured accordingly to activate `typing-booster`. The configuration depends on the desktop manager in use. For detailed instructions, please refer to the [upstream docs](https://mike-fabian.github.io/ibus-typing-booster/documentation.html).
9−On NixOS you need to explicitly enable `ibus` with given engines before customizing your desktop to use `typing-booster`. This can be achieved using the `ibus` module:
9+On NixOS, you need to explicitly enable `ibus` with given engines before customizing your desktop to use `typing-booster`. This can be achieved using the `ibus` module:
12{ pkgs, ... }: {
12{ pkgs, ... }: {
@@ -19,7 +19,7 @@ On NixOS you need to explicitly enable `ibus` with given engines before customiz
20## Using custom hunspell dictionaries {#sec-ibus-typing-booster-customize-hunspell}
20## Using custom hunspell dictionaries {#sec-ibus-typing-booster-customize-hunspell}
22−The IBus engine is based on `hunspell` to support completion in many languages. By default the dictionaries `de-de`, `en-us`, `fr-moderne` `es-es`, `it-it`, `sv-se` and `sv-fi` are in use. To add another dictionary, the package can be overridden like this:
22+The IBus engine is based on `hunspell` to support completion in many languages. By default, the dictionaries `de-de`, `en-us`, `fr-moderne` `es-es`, `it-it`, `sv-se` and `sv-fi` are in use. To add another dictionary, the package can be overridden like this:
25ibus-engines.typing-booster.override { langs = [ "de-at" "en-gb" ]; }
25ibus-engines.typing-booster.override { langs = [ "de-at" "en-gb" ]; }
@@ -31,7 +31,7 @@ _Note: each language passed to `langs` must be an attribute name in `pkgs.hunspe
32The `ibus-engines.typing-booster` package contains a program named `emoji-picker`. To display all emojis correctly, a special font such as `noto-fonts-emoji` is needed:
32The `ibus-engines.typing-booster` package contains a program named `emoji-picker`. To display all emojis correctly, a special font such as `noto-fonts-emoji` is needed:
34−On NixOS it can be installed using the following expression:
34+On NixOS, it can be installed using the following expression:
37{ pkgs, ... }: { fonts.fonts = with pkgs; [ noto-fonts-emoji ]; }
37{ pkgs, ... }: { fonts.fonts = with pkgs; [ noto-fonts-emoji ]; }
doc/builders/packages/linux.section.md+7−7
@@ -4,7 +4,7 @@ The Nix expressions to build the Linux kernel are in [`pkgs/os-specific/linux/ke
5The function that builds the kernel has an argument `kernelPatches` which should be a list of `{name, patch, extraConfig}` attribute sets, where `name` is the name of the patch (which is included in the kernel’s `meta.description` attribute), `patch` is the patch itself (possibly compressed), and `extraConfig` (optional) is a string specifying extra options to be concatenated to the kernel configuration file (`.config`).
5The function that builds the kernel has an argument `kernelPatches` which should be a list of `{name, patch, extraConfig}` attribute sets, where `name` is the name of the patch (which is included in the kernel’s `meta.description` attribute), `patch` is the patch itself (possibly compressed), and `extraConfig` (optional) is a string specifying extra options to be concatenated to the kernel configuration file (`.config`).
7−The kernel derivation exports an attribute `features` specifying whether optional functionality is or isn’t enabled. This is used in NixOS to implement kernel-specific behaviour. For instance, if the kernel has the `iwlwifi` feature (i.e. has built-in support for Intel wireless chipsets), then NixOS doesn’t have to build the external `iwlwifi` package:
7+The kernel derivation exports an attribute `features` specifying whether optional functionality is or isn’t enabled. This is used in NixOS to implement kernel-specific behaviour. For instance, if the kernel has the `iwlwifi` feature (i.e., has built-in support for Intel wireless chipsets), then NixOS doesn’t have to build the external `iwlwifi` package:
10modulesTree = [kernel]
10modulesTree = [kernel]
@@ -14,19 +14,19 @@ modulesTree = [kernel]
15How to add a new (major) version of the Linux kernel to Nixpkgs:
15How to add a new (major) version of the Linux kernel to Nixpkgs:
17−1. Copy the old Nix expression (e.g. `linux-2.6.21.nix`) to the new one (e.g. `linux-2.6.22.nix`) and update it.
17+1. Copy the old Nix expression (e.g., `linux-2.6.21.nix`) to the new one (e.g., `linux-2.6.22.nix`) and update it.
192. Add the new kernel to the `kernels` attribute set in `linux-kernels.nix` (e.g., create an attribute `kernel_2_6_22`).
192. Add the new kernel to the `kernels` attribute set in `linux-kernels.nix` (e.g., create an attribute `kernel_2_6_22`).
213. Now we’re going to update the kernel configuration. First unpack the kernel. Then for each supported platform (`i686`, `x86_64`, `uml`) do the following:
213. Now we’re going to update the kernel configuration. First unpack the kernel. Then for each supported platform (`i686`, `x86_64`, `uml`) do the following:
23− 1. Make an copy from the old config (e.g. `config-2.6.21-i686-smp`) to the new one (e.g. `config-2.6.22-i686-smp`).
23+ 1. Make a copy from the old config (e.g., `config-2.6.21-i686-smp`) to the new one (e.g., `config-2.6.22-i686-smp`).
25− 2. Copy the config file for this platform (e.g. `config-2.6.22-i686-smp`) to `.config` in the kernel source tree.
25+ 2. Copy the config file for this platform (e.g., `config-2.6.22-i686-smp`) to `.config` in the kernel source tree.
27− 3. Run `make oldconfig ARCH={i386,x86_64,um}` and answer all questions. (For the uml configuration, also add `SHELL=bash`.) Make sure to keep the configuration consistent between platforms (i.e. don’t enable some feature on `i686` and disable it on `x86_64`).
27+ 3. Run `make oldconfig ARCH={i386,x86_64,um}` and answer all questions. (For the uml configuration, also add `SHELL=bash`.) Make sure to keep the configuration consistent between platforms (i.e., don’t enable some feature on `i686` and disable it on `x86_64`).
29− 4. If needed you can also run `make menuconfig`:
29+ 4. If needed, you can also run `make menuconfig`:
31 ```ShellSession
31 ```ShellSession
32 $ nix-env -f "<nixpkgs>" -iA ncurses
32 $ nix-env -f "<nixpkgs>" -iA ncurses
@@ -34,7 +34,7 @@ How to add a new (major) version of the Linux kernel to Nixpkgs:
34 $ make menuconfig ARCH=arch
34 $ make menuconfig ARCH=arch
37− 5. Copy `.config` over the new config file (e.g. `config-2.6.22-i686-smp`).
37+ 5. Copy `.config` over the new config file (e.g., `config-2.6.22-i686-smp`).
394. Test building the kernel: `nix-build -A linuxKernel.kernels.kernel_2_6_22`. If it compiles, ship it! For extra credit, try booting NixOS with it.
394. Test building the kernel: `nix-build -A linuxKernel.kernels.kernel_2_6_22`. If it compiles, ship it! For extra credit, try booting NixOS with it.
doc/builders/packages/locales.section.md+2−2
@@ -1,5 +1,5 @@
1# Locales {#locales}
1# Locales {#locales}
3−To allow simultaneous use of packages linked against different versions of `glibc` with different locale archive formats Nixpkgs patches `glibc` to rely on `LOCALE_ARCHIVE` environment variable.
3+To allow simultaneous use of packages linked against different versions of `glibc` with different locale archive formats, Nixpkgs patches `glibc` to rely on `LOCALE_ARCHIVE` environment variable.
5−On non-NixOS distributions this variable is obviously not set. This can cause regressions in language support or even crashes in some Nixpkgs-provided programs. The simplest way to mitigate this problem is exporting the `LOCALE_ARCHIVE` variable pointing to `${glibcLocales}/lib/locale/locale-archive`. The drawback (and the reason this is not the default) is the relatively large (a hundred MiB) size of the full set of locales. It is possible to build a custom set of locales by overriding parameters `allLocales` and `locales` of the package.
5+On non-NixOS distributions, this variable is obviously not set. This can cause regressions in language support or even crashes in some Nixpkgs-provided programs. The simplest way to mitigate this problem is exporting the `LOCALE_ARCHIVE` variable pointing to `${glibcLocales}/lib/locale/locale-archive`. The drawback (and the reason this is not the default) is the relatively large (a hundred MiB) size of the full set of locales. It is possible to build a custom set of locales by overriding parameters `allLocales` and `locales` of the package.
doc/builders/packages/nginx.section.md+2−2
@@ -4,8 +4,8 @@
5## ETags on static files served from the Nix store {#sec-nginx-etag}
5## ETags on static files served from the Nix store {#sec-nginx-etag}
7−HTTP has a couple different mechanisms for caching to prevent clients from having to download the same content repeatedly if a resource has not changed since the last time it was requested. When nginx is used as a server for static files, it implements the caching mechanism based on the [`Last-Modified`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) response header automatically; unfortunately, it works by using filesystem timestamps to determine the value of the `Last-Modified` header. This doesn't give the desired behavior when the file is in the Nix store, because all file timestamps are set to 0 (for reasons related to build reproducibility).
7+HTTP has a couple of different mechanisms for caching to prevent clients from having to download the same content repeatedly if a resource has not changed since the last time it was requested. When nginx is used as a server for static files, it implements the caching mechanism based on the [`Last-Modified`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) response header automatically; unfortunately, it works by using filesystem timestamps to determine the value of the `Last-Modified` header. This doesn't give the desired behavior when the file is in the Nix store because all file timestamps are set to 0 (for reasons related to build reproducibility).
9−Fortunately, HTTP supports an alternative (and more effective) caching mechanism: the [`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) response header. The value of the `ETag` header specifies some identifier for the particular content that the server is sending (e.g. a hash). When a client makes a second request for the same resource, it sends that value back in an `If-None-Match` header. If the ETag value is unchanged, then the server does not need to resend the content.
9+Fortunately, HTTP supports an alternative (and more effective) caching mechanism: the [`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) response header. The value of the `ETag` header specifies some identifier for the particular content that the server is sending (e.g., a hash). When a client makes a second request for the same resource, it sends that value back in an `If-None-Match` header. If the ETag value is unchanged, then the server does not need to resend the content.
11As of NixOS 19.09, the nginx package in Nixpkgs is patched such that when nginx serves a file out of `/nix/store`, the hash in the store path is used as the `ETag` header in the HTTP response, thus providing proper caching functionality. This happens automatically; you do not need to do modify any configuration to get this behavior.
11As of NixOS 19.09, the nginx package in Nixpkgs is patched such that when nginx serves a file out of `/nix/store`, the hash in the store path is used as the `ETag` header in the HTTP response, thus providing proper caching functionality. This happens automatically; you do not need to do modify any configuration to get this behavior.
doc/builders/packages/opengl.section.md+1−1
@@ -12,4 +12,4 @@ The NixOS desktop or other non-headless configurations are the primary target fo
13If you are using a non-NixOS GNU/Linux/X11 desktop with free software video drivers, consider launching OpenGL-dependent programs from Nixpkgs with Nixpkgs versions of `libglvnd` and `mesa.drivers` in `LD_LIBRARY_PATH`. For Mesa drivers, the Linux kernel version doesn't have to match nixpkgs.
13If you are using a non-NixOS GNU/Linux/X11 desktop with free software video drivers, consider launching OpenGL-dependent programs from Nixpkgs with Nixpkgs versions of `libglvnd` and `mesa.drivers` in `LD_LIBRARY_PATH`. For Mesa drivers, the Linux kernel version doesn't have to match nixpkgs.
15−For proprietary video drivers you might have luck with also adding the corresponding video driver package.
15+For proprietary video drivers, you might have luck with also adding the corresponding video driver package.
doc/builders/packages/shell-helpers.section.md+1−1
@@ -4,7 +4,7 @@ Some packages provide the shell integration to be more useful. But unlike other
5- `fzf` : `fzf-share`
5- `fzf` : `fzf-share`
7−E.g. `fzf` can then used in the `.bashrc` like this:
7+E.g. `fzf` can then be used in the `.bashrc` like this:
10source "$(fzf-share)/completion.bash"
10source "$(fzf-share)/completion.bash"
doc/builders/packages/steam.section.md+8−8
@@ -2,20 +2,20 @@
3## Steam in Nix {#sec-steam-nix}
3## Steam in Nix {#sec-steam-nix}
5−Steam is distributed as a `.deb` file, for now only as an i686 package (the amd64 package only has documentation). When unpacked, it has a script called `steam` that in Ubuntu (their target distro) would go to `/usr/bin`. When run for the first time, this script copies some files to the user's home, which include another script that is the ultimate responsible for launching the steam binary, which is also in \$HOME.
5+Steam is distributed as a `.deb` file, for now only as an i686 package (the amd64 package only has documentation). When unpacked, it has a script called `steam` that in Ubuntu (their target distro) would go to `/usr/bin`. When run for the first time, this script copies some files to the user's home, which include another script that is the ultimate responsible for launching the steam binary, which is also in `$HOME`.
7Nix problems and constraints:
7Nix problems and constraints:
9−- We don't have `/bin/bash` and many scripts point there. Similarly for `/usr/bin/python`.
9+- We don't have `/bin/bash` and many scripts point there. Same thing for `/usr/bin/python`.
10- We don't have the dynamic loader in `/lib`.
10- We don't have the dynamic loader in `/lib`.
11−- The `steam.sh` script in \$HOME can not be patched, as it is checked and rewritten by steam.
11+- The `steam.sh` script in `$HOME` cannot be patched, as it is checked and rewritten by steam.
12- The steam binary cannot be patched, it's also checked.
12- The steam binary cannot be patched, it's also checked.
14The current approach to deploy Steam in NixOS is composing a FHS-compatible chroot environment, as documented [here](http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html). This allows us to have binaries in the expected paths without disrupting the system, and to avoid patching them to work in a non FHS environment.
14The current approach to deploy Steam in NixOS is composing a FHS-compatible chroot environment, as documented [here](http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html). This allows us to have binaries in the expected paths without disrupting the system, and to avoid patching them to work in a non FHS environment.
16## How to play {#sec-steam-play}
16## How to play {#sec-steam-play}
18−Use `programs.steam.enable = true;` if you want to add steam to systemPackages and also enable a few workarrounds aswell as Steam controller support or other Steam supported controllers such as the DualShock 4 or Nintendo Switch Pr.
18+Use `programs.steam.enable = true;` if you want to add steam to `systemPackages` and also enable a few workarounds as well as Steam controller support or other Steam supported controllers such as the DualShock 4 or Nintendo Switch Pro Controller.
20## Troubleshooting {#sec-steam-troub}
20## Troubleshooting {#sec-steam-troub}
@@ -32,7 +32,7 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
32- **Using the FOSS Radeon or nouveau (nvidia) drivers**
32- **Using the FOSS Radeon or nouveau (nvidia) drivers**
34 - The `newStdcpp` parameter was removed since NixOS 17.09 and should not be needed anymore.
34 - The `newStdcpp` parameter was removed since NixOS 17.09 and should not be needed anymore.
35− - Steam ships statically linked with a version of libcrypto that conflics with the one dynamically loaded by radeonsi_dri.so. If you get the error
35+ - Steam ships statically linked with a version of `libcrypto` that conflicts with the one dynamically loaded by radeonsi_dri.so. If you get the error:
38 steam.sh: line 713: 7842 Segmentation fault (core dumped)
38 steam.sh: line 713: 7842 Segmentation fault (core dumped)
@@ -42,13 +42,13 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
45− 1. There is no java in steam chrootenv by default. If you get a message like
45+ 1. There is no java in steam chrootenv by default. If you get a message like:
48 /home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found
48 /home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found
51− you need to add
51+ you need to add:
54 steam.override { withJava = true; };
54 steam.override { withJava = true; };
@@ -56,7 +56,7 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
57## steam-run {#sec-steam-run}
57## steam-run {#sec-steam-run}
59−The FHS-compatible chroot used for Steam can also be used to run other Linux games that expect a FHS environment. To use it, install the `steam-run` package and run the game with
59+The FHS-compatible chroot used for Steam can also be used to run other Linux games that expect a FHS environment. To use it, install the `steam-run` package and run the game with:
62steam-run ./foo
62steam-run ./foo
doc/builders/packages/urxvt.section.md+4−4
@@ -4,7 +4,7 @@ Urxvt, also known as rxvt-unicode, is a highly customizable terminal emulator.
5## Configuring urxvt {#sec-urxvt-conf}
5## Configuring urxvt {#sec-urxvt-conf}
7−In `nixpkgs`, urxvt is provided by the package `rxvt-unicode`. It can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, use an overlay or directly install an expression that overrides its configuration, such as
7+In `nixpkgs`, urxvt is provided by the package `rxvt-unicode`. It can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, use an overlay or directly install an expression that overrides its configuration, such as:
10rxvt-unicode.override {
10rxvt-unicode.override {
@@ -58,14 +58,14 @@ rxvt-unicode.override {
59## Packaging urxvt plugins {#sec-urxvt-pkg}
59## Packaging urxvt plugins {#sec-urxvt-pkg}
61−Urxvt plugins resides in `pkgs/applications/misc/rxvt-unicode-plugins`. To add a new plugin create an expression in a subdirectory and add the package to the set in `pkgs/applications/misc/rxvt-unicode-plugins/default.nix`.
61+Urxvt plugins resides in `pkgs/applications/misc/rxvt-unicode-plugins`. To add a new plugin, create an expression in a subdirectory and add the package to the set in `pkgs/applications/misc/rxvt-unicode-plugins/default.nix`.
63A plugin can be any kind of derivation, the only requirement is that it should always install perl scripts in `$out/lib/urxvt/perl`. Look for existing plugins for examples.
63A plugin can be any kind of derivation, the only requirement is that it should always install perl scripts in `$out/lib/urxvt/perl`. Look for existing plugins for examples.
65−If the plugin is itself a perl package that needs to be imported from other plugins or scripts, add the following passthrough:
65+If the plugin is itself a Perl package that needs to be imported from other plugins or scripts, add the following passthrough:
68passthru.perlPackages = [ "self" ];
68passthru.perlPackages = [ "self" ];
71−This will make the urxvt wrapper pick up the dependency and set up the perl path accordingly.
71+This will make the urxvt wrapper pick up the dependency and set up the Perl path accordingly.
doc/builders/packages/weechat.section.md+5−5
@@ -1,6 +1,6 @@
1−# Weechat {#sec-weechat}
1+# WeeChat {#sec-weechat}
3−Weechat can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, install an expression that overrides its configuration such as
3+WeeChat can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, install an expression that overrides its configuration, such as:
6weechat.override {configure = {availablePlugins, ...}: {
6weechat.override {configure = {availablePlugins, ...}: {
@@ -13,7 +13,7 @@ If the `configure` function returns an attrset without the `plugins` attribute,
14The plugins currently available are `python`, `perl`, `ruby`, `guile`, `tcl` and `lua`.
14The plugins currently available are `python`, `perl`, `ruby`, `guile`, `tcl` and `lua`.
16−The python and perl plugins allows the addition of extra libraries. For instance, the `inotify.py` script in `weechat-scripts` requires D-Bus or libnotify, and the `fish.py` script requires `pycrypto`. To use these scripts, use the plugin's `withPackages` attribute:
16+The Python and Perl plugins allows the addition of extra libraries. For instance, the `inotify.py` script in `weechat-scripts` requires D-Bus or libnotify, and the `fish.py` script requires `pycrypto`. To use these scripts, use the plugin's `withPackages` attribute:
19weechat.override { configure = {availablePlugins, ...}: {
19weechat.override { configure = {availablePlugins, ...}: {
@@ -49,7 +49,7 @@ weechat.override {
50Further values can be added to the list of commands when running `weechat --run-command "your-commands"`.
50Further values can be added to the list of commands when running `weechat --run-command "your-commands"`.
52−Additionally it's possible to specify scripts to be loaded when starting `weechat`. These will be loaded before the commands from `init`:
52+Additionally, it's possible to specify scripts to be loaded when starting `weechat`. These will be loaded before the commands from `init`:
55weechat.override {
55weechat.override {
@@ -64,7 +64,7 @@ weechat.override {
67−In `nixpkgs` there's a subpackage which contains derivations for WeeChat scripts. Such derivations expect a `passthru.scripts` attribute which contains a list of all scripts inside the store path. Furthermore all scripts have to live in `$out/share`. An exemplary derivation looks like this:
67+In `nixpkgs` there's a subpackage which contains derivations for WeeChat scripts. Such derivations expect a `passthru.scripts` attribute, which contains a list of all scripts inside the store path. Furthermore, all scripts have to live in `$out/share`. An exemplary derivation looks like this:
70{ stdenv, fetchurl }:
70{ stdenv, fetchurl }:
doc/builders/special.xml−1
@@ -7,5 +7,4 @@
8 <xi:include href="special/fhs-environments.section.xml" />
8 <xi:include href="special/fhs-environments.section.xml" />
9 <xi:include href="special/mkshell.section.xml" />
9 <xi:include href="special/mkshell.section.xml" />
10− <xi:include href="special/invalidateFetcherByDrvHash.section.xml" />
doc/builders/special/invalidateFetcherByDrvHash.section.mddeleted−31
@@ -1,31 +0,0 @@
2−## `invalidateFetcherByDrvHash` {#sec-pkgs-invalidateFetcherByDrvHash}
4−Use the derivation hash to invalidate the output via name, for testing.
6−Type: `(a@{ name, ... } -> Derivation) -> a -> Derivation`
8−Normally, fixed output derivations can and should be cached by their output
9−hash only, but for testing we want to re-fetch everytime the fetcher changes.
11−Changes to the fetcher become apparent in the drvPath, which is a hash of
12−how to fetch, rather than a fixed store path.
13−By inserting this hash into the name, we can make sure to re-run the fetcher
14−every time the fetcher changes.
16−This relies on the assumption that Nix isn't clever enough to reuse its
17−database of local store contents to optimize fetching.
19−You might notice that the "salted" name derives from the normal invocation,
20−not the final derivation. `invalidateFetcherByDrvHash` has to invoke the fetcher
21−function twice: once to get a derivation hash, and again to produce the final
22−fixed output derivation.
26− tests.fetchgit = invalidateFetcherByDrvHash fetchgit {
28− url = "https://github.com/NixOS/nix";
29− rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a";
30− sha256 = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY=";
doc/builders/testers.chapter.mdnew file+82
@@ -0,0 +1,82 @@
1+# Testers {#chap-testers}
2+This chapter describes several testing builders which are available in the <literal>testers</literal> namespace.
4+## `testVersion` {#tester-testVersion}
6+Checks the command output contains the specified version
8+Although simplistic, this test assures that the main program
9+can run. While there's no substitute for a real test case,
10+it does catch dynamic linking errors and such. It also provides
11+some protection against accidentally building the wrong version,
12+for example when using an 'old' hash in a fixed-output derivation.
17+passthru.tests.version = testVersion { package = hello; };
19+passthru.tests.version = testVersion {
21+ command = "weed version";
24+passthru.tests.version = testVersion {
26+ command = "KeY --help";
27+ # Wrong '2.5' version in the code. Drop on next version.
32+## `testEqualDerivation` {#tester-testEqualDerivation}
34+Checks that two packages produce the exact same build instructions.
36+This can be used to make sure that a certain difference of configuration,
37+such as the presence of an overlay does not cause a cache miss.
39+When the derivations are equal, the return value is an empty file.
40+Otherwise, the build log explains the difference via `nix-diff`.
46+ "The hello package must stay the same when enabling checks."
48+ (hello.overrideAttrs(o: { doCheck = true; }))
51+## `invalidateFetcherByDrvHash` {#tester-invalidateFetcherByDrvHash}
53+Use the derivation hash to invalidate the output via name, for testing.
55+Type: `(a@{ name, ... } -> Derivation) -> a -> Derivation`
57+Normally, fixed output derivations can and should be cached by their output
58+hash only, but for testing we want to re-fetch everytime the fetcher changes.
60+Changes to the fetcher become apparent in the drvPath, which is a hash of
61+how to fetch, rather than a fixed store path.
62+By inserting this hash into the name, we can make sure to re-run the fetcher
63+every time the fetcher changes.
65+This relies on the assumption that Nix isn't clever enough to reuse its
66+database of local store contents to optimize fetching.
68+You might notice that the "salted" name derives from the normal invocation,
69+not the final derivation. `invalidateFetcherByDrvHash` has to invoke the fetcher
70+function twice: once to get a derivation hash, and again to produce the final
71+fixed output derivation.
76+tests.fetchgit = invalidateFetcherByDrvHash fetchgit {
78+ url = "https://github.com/NixOS/nix";
79+ rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a";
80+ sha256 = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY=";
doc/builders/trivial-builders.chapter.md+3−3
@@ -35,10 +35,10 @@ This works just like `runCommand`. The only difference is that it also provides
36## `runCommandLocal` {#trivial-builder-runCommandLocal}
36## `runCommandLocal` {#trivial-builder-runCommandLocal}
38−Variant of `runCommand` that forces the derivation to be built locally, it is not substituted. This is intended for very cheap commands (<1s execution time). It saves on the network roundrip and can speed up a build.
38+Variant of `runCommand` that forces the derivation to be built locally, it is not substituted. This is intended for very cheap commands (<1s execution time). It saves on the network round-trip and can speed up a build.
40::: {.note}
40::: {.note}
41−This sets [`allowSubstitutes` to `false`](https://nixos.org/nix/manual/#adv-attr-allowSubstitutes), so only use `runCommandLocal` if you are certain the user will always have a builder for the `system` of the derivation. This should be true for most trivial use cases (e.g. just copying some files to a different location or adding symlinks), because there the `system` is usually the same as `builtins.currentSystem`.
41+This sets [`allowSubstitutes` to `false`](https://nixos.org/nix/manual/#adv-attr-allowSubstitutes), so only use `runCommandLocal` if you are certain the user will always have a builder for the `system` of the derivation. This should be true for most trivial use cases (e.g., just copying some files to a different location or adding symlinks) because there the `system` is usually the same as `builtins.currentSystem`.
44## `writeTextFile`, `writeText`, `writeTextDir`, `writeScript`, `writeScriptBin` {#trivial-builder-writeText}
44## `writeTextFile`, `writeText`, `writeTextDir`, `writeScript`, `writeScriptBin` {#trivial-builder-writeText}
@@ -219,5 +219,5 @@ produces an output path `/nix/store/<hash>-runtime-references` containing
219/nix/store/<hash>-hello-2.10
219/nix/store/<hash>-hello-2.10
222−but none of `hello`'s dependencies, because those are not referenced directly
222+but none of `hello`'s dependencies because those are not referenced directly
223by `hi`'s output.
223by `hi`'s output.
doc/contributing/coding-conventions.chapter.md+5−5
@@ -214,15 +214,15 @@ Most of the time, these are the same. For instance, the package `e2fsprogs` has
215There are a few naming guidelines:
215There are a few naming guidelines:
217−- The `name` attribute _should_ be identical to the upstream package name.
217+- The `pname` attribute _should_ be identical to the upstream package name.
219−- The `name` attribute _must not_ contain uppercase letters — e.g., `"mplayer-1.0rc2"` instead of `"MPlayer-1.0rc2"`.
219+- The `pname` and the `version` attribute _must not_ contain uppercase letters — e.g., `"mplayer" instead of `"MPlayer"`.
221−- The version part of the `name` attribute _must_ start with a digit (following a dash) — e.g., `"hello-0.3.1rc2"`.
221+- The `version` attribute _must_ start with a digit e.g`"0.3.1rc2".
223−- If a package is not a release but a commit from a repository, then the version part of the name _must_ be the date of that (fetched) commit. The date _must_ be in `"YYYY-MM-DD"` format. Also append `"unstable"` to the name - e.g., `"pkgname-unstable-2014-09-23"`.
223+- If a package is not a release but a commit from a repository, then the `version` attribute _must_ be the date of that (fetched) commit. The date _must_ be in `"unstable-YYYY-MM-DD"` format.
225−- Dashes in the package name _should_ be preserved in new variable names, rather than converted to underscores or camel cased — e.g., `http-parser` instead of `http_parser` or `httpParser`. The hyphenated style is preferred in all three package names.
225+- Dashes in the package `pname` _should_ be preserved in new variable names, rather than converted to underscores or camel cased — e.g., `http-parser` instead of `http_parser` or `httpParser`. The hyphenated style is preferred in all three package names.
227- If there are multiple versions of a package, this _should_ be reflected in the variable names in `all-packages.nix`, e.g. `json-c_0_9` and `json-c_0_11`. If there is an obvious “default” version, make an attribute like `json-c = json-c_0_9;`. See also [](#sec-versioning)
227- If there are multiple versions of a package, this _should_ be reflected in the variable names in `all-packages.nix`, e.g. `json-c_0_9` and `json-c_0_11`. If there is an obvious “default” version, make an attribute like `json-c = json-c_0_9;`. See also [](#sec-versioning)
doc/contributing/submitting-changes.chapter.md+1−1
@@ -96,7 +96,7 @@ We use jbidwatcher as an example for a discontinued project here.
971. Have Nixpkgs checked out locally and up to date.
971. Have Nixpkgs checked out locally and up to date.
981. Create a new branch for your change, e.g. `git checkout -b jbidwatcher`
981. Create a new branch for your change, e.g. `git checkout -b jbidwatcher`
99−1. Remove the actual package including its directory, e.g. `rm -rf pkgs/applications/misc/jbidwatcher`
99+1. Remove the actual package including its directory, e.g. `git rm -rf pkgs/applications/misc/jbidwatcher`
1001. Remove the package from the list of all packages (`pkgs/top-level/all-packages.nix`).
1001. Remove the package from the list of all packages (`pkgs/top-level/all-packages.nix`).
1011. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/applications/editors/vim/plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
1011. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/applications/editors/vim/plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
doc/hooks/index.xmlnew file+10
@@ -0,0 +1,10 @@
1+<chapter xmlns="http://docbook.org/ns/docbook"
2+ xmlns:xlink="http://www.w3.org/1999/xlink"
3+ xmlns:xi="http://www.w3.org/2001/XInclude"
5+ <title>Hooks reference</title>
7+ Nixpkgs has several hook packages that augment the stdenv phases.
9+ <xi:include href="./postgresql-test-hook.section.xml" />
doc/hooks/postgresql-test-hook.section.mdnew file+59
@@ -0,0 +1,59 @@
2+# `postgresqlTestHook` {#sec-postgresqlTestHook}
4+This hook starts a PostgreSQL server during the `checkPhase`. Example:
7+{ stdenv, postgresql, postgresqlTestHook }:
19+If you use a custom `checkPhase`, remember to add the `runHook` calls:
30+## Variables {#sec-postgresqlTestHook-variables}
32+The hook logic will read a number of variables and set them to a default value if unset or empty.
36+ - `PGDATA`: location of server files.
37+ - `PGHOST`: location of UNIX domain socket directory; the default `host` in a connection string.
38+ - `PGUSER`: user to create / log in with, default: `test_user`.
39+ - `PGDATABASE`: database name, default: `test_db`.
43+ - `postgresqlTestUserOptions`: SQL options to use when creating the `$PGUSER` role, default: `LOGIN`.
44+ - `postgresqlTestSetupSQL`: SQL commands to run as database administrator after startup, default: statements that create `$PGUSER` and `$PGDATABASE`.
45+ - `postgresqlTestSetupCommands`: bash commands to run after database start, defaults to running `$postgresqlTestSetupSQL` as database administrator.
46+ - `postgresqlEnableTCP`: set to `1` to enable TCP listening. Flaky; not recommended.
47+ - `postgresqlStartCommands`: defaults to `pg_ctl start`.
49+## TCP and the Nix sandbox {#sec-postgresqlTestHook-tcp}
51+`postgresqlEnableTCP` relies on network sandboxing, which is not available on macOS and some custom Nix installations, resulting in flaky tests.
52+For this reason, it is disabled by default.
54+The preferred solution is to make the test suite use a UNIX domain socket connection. This is the default behavior when no `host` connection parameter is provided.
55+Some test suites hardcode a value for `host` though, so a patch may be required. If you can upstream the patch, you can make `host` default to the `PGHOST` environment variable when set. Otherwise, you can patch it locally to omit the `host` connection string parameter altogether.
58+The error `libpq: failed (could not receive data from server: Connection refused` is generally an indication that the test suite is trying to connect through TCP.
doc/languages-frameworks/chicken.section.mdnew file+49
@@ -0,0 +1,49 @@
1+# CHICKEN {#sec-chicken}
3+[CHICKEN](https://call-cc.org/) is a
4+[R⁵RS](https://schemers.org/Documents/Standards/R5RS/HTML/)-compliant Scheme
5+compiler. It includes an interactive mode and a custom package format, "eggs".
9+Eggs described in nixpkgs are available inside the
10+`chickenPackages.chickenEggs` attrset. Including an egg as a build input is
11+done in the typical Nix fashion. For example, to include support for [SRFI
12+189](https://srfi.schemers.org/srfi-189/srfi-189.html) in a derivation, one
18+ chickenPackages.chickenEggs.srfi-189
22+Both `chicken` and its eggs have a setup hook which configures the environment
23+variables `CHICKEN_INCLUDE_PATH` and `CHICKEN_REPOSITORY_PATH`.
27+nixpkgs only knows about a subset of all published eggs. It uses
28+[egg2nix](https://github.com/the-kenny/egg2nix) to generate a
29+package set from a list of eggs to include.
31+The package set is regenerated by running the following shell commands:
34+$ nix-shell -p chickenPackages.egg2nix
35+$ cd pkgs/development/compilers/chicken/5/
36+$ egg2nix eggs.scm > eggs.nix
41+When we run `egg2nix`, we obtain one collection of eggs with
42+mutually-compatible versions. This means that when we add new eggs, we may
43+need to update existing eggs. To keep those separate, follow the procedure for
44+updating eggs before including more eggs.
46+To include more eggs, edit `pkgs/development/compilers/chicken/5/eggs.scm`.
47+The first section of this file lists eggs which are required by `egg2nix`
48+itself; all other eggs go into the second section. After editing, follow the
49+procedure for updating eggs.
doc/languages-frameworks/cuda.section.mdnew file+34
@@ -0,0 +1,34 @@
3+CUDA-only packages are stored in the `cudaPackages` packages set. This set
4+includes the `cudatoolkit`, portions of the toolkit in separate derivations,
5+`cudnn`, `cutensor` and `nccl`.
7+A package set is available for each CUDA version, so for example
8+`cudaPackages_11_6`. Within each set is a matching version of the above listed
9+packages. Additionally, other versions of the packages that are packaged and
10+compatible are available as well. For example, there can be a
11+`cudaPackages.cudnn_8_3_2` package.
13+To use one or more CUDA packages in an expression, give the expression a `cudaPackages` parameter, and in case CUDA is optional
19+When using `callPackage`, you can choose to pass in a different variant, e.g.
20+when a different version of the toolkit suffices
22+mypkg = callPackage { cudaPackages = cudaPackages_11_5; }
25+If another version of say `cudnn` or `cutensor` is needed, you can override the
26+package set to make it the default. This guarantees you get a consistent package
30+ cudaPackages = cudaPackages_11_5.overrideScope' (final: prev {
31+ cudnn = prev.cudnn_8_3_2;
33+in callPackage { inherit cudaPackages; };
doc/languages-frameworks/gnome.section.md+16−2
@@ -42,7 +42,21 @@ Unlike other libraries mentioned in this section, GdkPixbuf only supports a sing
43### Icons {#ssec-gnome-icons}
43### Icons {#ssec-gnome-icons}
45−When an application uses icons, an icon theme should be available in `XDG_DATA_DIRS` during runtime. The package for the default, icon-less [hicolor-icon-theme](https://www.freedesktop.org/wiki/Software/icon-theme/) (should be propagated by every icon theme) contains [a setup hook](#ssec-gnome-hooks-hicolor-icon-theme) that will pick up icon themes from `buildInputs` and pass it to our wrapper. Unfortunately, relying on that would mean every user has to download the theme included in the package expression no matter their preference. For that reason, we leave the installation of icon theme on the user. If you use one of the desktop environments, you probably already have an icon theme installed.
45+When an application uses icons, an icon theme should be available in `XDG_DATA_DIRS` during runtime. The package for the default, icon-less [hicolor-icon-theme](https://www.freedesktop.org/wiki/Software/icon-theme/) (should be propagated by every icon theme) contains [a setup hook](#ssec-gnome-hooks-hicolor-icon-theme) that will pick up icon themes from `buildInputs` and add their datadirs to `XDG_ICON_DIRS` environment variable (this is Nixpkgs specific, not actually a XDG standard variable). Unfortunately, relying on that would mean every user has to download the theme included in the package expression no matter their preference. For that reason, we leave the installation of icon theme on the user. If you use one of the desktop environments, you probably already have an icon theme installed.
47+In the rare case you need to use icons from dependencies (e.g. when an app forces an icon theme), you can use the following to pick them up:
51+ pantheon.elementary-icon-theme
55+ # The icon theme is hardcoded.
56+ --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS"
47To avoid costly file system access when locating icons, GTK, [as well as Qt](https://woboq.com/blog/qicon-reads-gtk-icon-cache-in-qt57.html), can rely on `icon-theme.cache` files from the themes' top-level directories. These files are generated using `gtk-update-icon-cache`, which is expected to be run whenever an icon is added or removed to an icon theme (typically an application icon into `hicolor` theme) and some programs do indeed run this after icon installation. However, since packages are installed into their own prefix by Nix, this would lead to conflicts. For that reason, `gtk3` provides a [setup hook](#ssec-gnome-hooks-gtk-drop-icon-theme-cache) that will clean the file from installation. Since most applications only ship their own icon that will be loaded on start-up, it should not affect them too much. On the other hand, icon themes are much larger and more widely used so we need to cache them. Because we recommend installing icon themes globally, we will generate the cache files from all packages in a profile using a NixOS module. You can enable the cache generation using `gtk.iconCache.enable` option if your desktop environment does not already do that.
61To avoid costly file system access when locating icons, GTK, [as well as Qt](https://woboq.com/blog/qicon-reads-gtk-icon-cache-in-qt57.html), can rely on `icon-theme.cache` files from the themes' top-level directories. These files are generated using `gtk-update-icon-cache`, which is expected to be run whenever an icon is added or removed to an icon theme (typically an application icon into `hicolor` theme) and some programs do indeed run this after icon installation. However, since packages are installed into their own prefix by Nix, this would lead to conflicts. For that reason, `gtk3` provides a [setup hook](#ssec-gnome-hooks-gtk-drop-icon-theme-cache) that will clean the file from installation. Since most applications only ship their own icon that will be loaded on start-up, it should not affect them too much. On the other hand, icon themes are much larger and more widely used so we need to cache them. Because we recommend installing icon themes globally, we will generate the cache files from all packages in a profile using a NixOS module. You can enable the cache generation using `gtk.iconCache.enable` option if your desktop environment does not already do that.
@@ -98,7 +112,7 @@ For convenience, it also adds `dconf.lib` for a GIO module implementing a GSetti
99- []{#ssec-gnome-hooks-dconf} `dconf.lib` is a dependency of `wrapGAppsHook`, which then also adds it to the `GIO_EXTRA_MODULES` variable.
113- []{#ssec-gnome-hooks-dconf} `dconf.lib` is a dependency of `wrapGAppsHook`, which then also adds it to the `GIO_EXTRA_MODULES` variable.
101−- []{#ssec-gnome-hooks-hicolor-icon-theme} `hicolor-icon-theme`’s setup hook will add icon themes to `XDG_ICON_DIRS` which is prepended to `XDG_DATA_DIRS` by `wrapGAppsHook`.
115+- []{#ssec-gnome-hooks-hicolor-icon-theme} `hicolor-icon-theme`’s setup hook will add icon themes to `XDG_ICON_DIRS`.
103- []{#ssec-gnome-hooks-gobject-introspection} `gobject-introspection` setup hook populates `GI_TYPELIB_PATH` variable with `lib/girepository-1.0` directories of dependencies, which is then added to wrapper by `wrapGAppsHook`. It also adds `share` directories of dependencies to `XDG_DATA_DIRS`, which is intended to promote GIR files but it also [pollutes the closures](https://github.com/NixOS/nixpkgs/issues/32790) of packages using `wrapGAppsHook`.
117- []{#ssec-gnome-hooks-gobject-introspection} `gobject-introspection` setup hook populates `GI_TYPELIB_PATH` variable with `lib/girepository-1.0` directories of dependencies, which is then added to wrapper by `wrapGAppsHook`. It also adds `share` directories of dependencies to `XDG_DATA_DIRS`, which is intended to promote GIR files but it also [pollutes the closures](https://github.com/NixOS/nixpkgs/issues/32790) of packages using `wrapGAppsHook`.
doc/languages-frameworks/go.section.md+5−1
@@ -142,4 +142,8 @@ Removes the pre-existing vendor directory. This should only be used if the depen
143### `subPackages` {#var-go-subPackages}
143### `subPackages` {#var-go-subPackages}
145−Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
145+Specified as a string or list of strings. Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
147+### `excludedPackages` {#var-go-excludedPackages}
149+Specified as a string or list of strings. Causes the builder to skip building child packages that match any of the provided values. If `excludedPackages` is not specified, all child packages will be built.
doc/languages-frameworks/index.xml+2
@@ -9,8 +9,10 @@
9 <xi:include href="android.section.xml" />
9 <xi:include href="android.section.xml" />
10 <xi:include href="beam.section.xml" />
10 <xi:include href="beam.section.xml" />
11 <xi:include href="bower.section.xml" />
11 <xi:include href="bower.section.xml" />
12+ <xi:include href="chicken.section.xml" />
12 <xi:include href="coq.section.xml" />
13 <xi:include href="coq.section.xml" />
13 <xi:include href="crystal.section.xml" />
14 <xi:include href="crystal.section.xml" />
15+ <xi:include href="cuda.section.xml" />
14 <xi:include href="dhall.section.xml" />
16 <xi:include href="dhall.section.xml" />
15 <xi:include href="dotnet.section.xml" />
17 <xi:include href="dotnet.section.xml" />
16 <xi:include href="emscripten.section.xml" />
18 <xi:include href="emscripten.section.xml" />
@@ -25,8 +25,10 @@
25 <title>Builders</title>
25 <title>Builders</title>
26 <xi:include href="builders/fetchers.chapter.xml" />
26 <xi:include href="builders/fetchers.chapter.xml" />
27 <xi:include href="builders/trivial-builders.chapter.xml" />
27 <xi:include href="builders/trivial-builders.chapter.xml" />
28+ <xi:include href="builders/testers.chapter.xml" />
28 <xi:include href="builders/special.xml" />
29 <xi:include href="builders/special.xml" />
29 <xi:include href="builders/images.xml" />
30 <xi:include href="builders/images.xml" />
31+ <xi:include href="hooks/index.xml" />
30 <xi:include href="languages-frameworks/index.xml" />
32 <xi:include href="languages-frameworks/index.xml" />
31 <xi:include href="builders/packages/index.xml" />
33 <xi:include href="builders/packages/index.xml" />
doc/stdenv/cross-compilation.chapter.md+35−10
@@ -78,21 +78,46 @@ If both the dependency and depending packages aren't compilers or other machine-
79Finally, if the depending package is a compiler or other machine-code-producing tool, it might need dependencies that run at "emit time". This is for compilers that (regrettably) insist on being built together with their source languages' standard libraries. Assuming build != host != target, a run-time dependency of the standard library cannot be run at the compiler's build time or run time, but only at the run time of code emitted by the compiler.
79Finally, if the depending package is a compiler or other machine-code-producing tool, it might need dependencies that run at "emit time". This is for compilers that (regrettably) insist on being built together with their source languages' standard libraries. Assuming build != host != target, a run-time dependency of the standard library cannot be run at the compiler's build time or run time, but only at the run time of code emitted by the compiler.
81−Putting this all together, that means we have dependencies in the form "host → target", in at most the following six combinations:
81+Putting this all together, that means that we have dependency types of the form "X→ E", which means that the dependency executes on X and emits code for E; each of X and E can be `build`, `host`, or `target`, and E can be `*` to indicate that the dependency is not a compiler-like package.
83+Dependency types describe the relationships that a package has with each of its transitive dependencies. You could think of attaching one or more dependency types to each of the formal parameters at the top of a package's `.nix` file, as well as to all of *their* formal parameters, and so on. Triples like `(foo, bar, baz)`, on the other hand, are a property of an instantiated derivation -- you could would attach a triple `(mips-linux, mips-linux, sparc-solaris)` to a `.drv` file in `/nix/store`.
85+Only nine dependency types matter in practice:
83#### Possible dependency types {#possible-dependency-types}
87#### Possible dependency types {#possible-dependency-types}
85−| Dependency’s host platform | Dependency’s target platform |
89+| Dependency type | Dependency’s host platform | Dependency’s target platform |
86−|----------------------------|------------------------------|
90+|-----------------|----------------------------|------------------------------|
91+| build → * | build | (none) |
87−| build | build |
92+| build → build | build | build |
88−| build | host |
93+| build → host | build | host |
89−| build | target |
94+| build → target | build | target |
90−| host | host |
95+| host → * | host | (none) |
96+| host → host | host | host |
91−| host | target |
97+| host → target | host | target |
92−| target | target |
98+| target → * | target | (none) |
99+| target → target | target | target |
101+Let's use `g++` as an example to make this table clearer. `g++` is a C++ compiler written in C. Suppose we are building `g++` with a `(build, host, target)` platform triple of `(foo, bar, baz)`. This means we are using a `foo`-machine to build a copy of `g++` which will run on a `bar`-machine and emit binaries for the `baz`-machine.
103+* `g++` links against the host platform's `glibc` C library, which is a "host→ *" dependency with a triple of `(bar, bar, *)`. Since it is a library, not a compiler, it has no "target".
105+* Since `g++` is written in C, the `gcc` compiler used to compile it is a "build→ host" dependency of `g++` with a triple of `(foo, foo, bar)`. This compiler runs on the build platform and emits code for the host platform.
107+* `gcc` links against the build platform's `glibc` C library, which is a "build→ *" dependency with a triple of `(foo, foo, *)`. Since it is a library, not a compiler, it has no "target".
109+* This `gcc` is itself compiled by an *earlier* copy of `gcc`. This earlier copy of `gcc` is a "build→ build" dependency of `g++` with a triple of `(foo, foo, foo)`. This "early `gcc`" runs on the build platform and emits code for the build platform.
111+* `g++` is bundled with `libgcc`, which includes a collection of target-machine routines for exception handling and
112+software floating point emulation. `libgcc` would be a "target→ *" dependency with triple `(foo, baz, *)`, because it consists of machine code which gets linked against the output of the compiler that we are building. It is a library, not a compiler, so it has no target of its own.
114+* `libgcc` is written in C and compiled with `gcc`. The `gcc` that compiles it will be a "build→ target" dependency with triple `(foo, foo, baz)`. It gets compiled *and run* at `g++`-build-time (on platform `foo`), but must emit code for the `baz`-platform.
116+* `g++` allows inline assembler code, so it depends on access to a copy of the `gas` assembler. This would be a "host→ target" dependency with triple `(foo, bar, baz)`.
118+* `g++` (and `gcc`) include a library `libgccjit.so`, which wrap the compiler in a library to create a just-in-time compiler. In nixpkgs, this library is in the `libgccjit` package; if C++ required that programs have access to a JIT, `g++` would need to add a "target→ target" dependency for `libgccjit` with triple `(foo, baz, baz)`. This would ensure that the compiler ships with a copy of `libgccjit` which both executes on and generates code for the `baz`-platform.
95−Some examples will make this table clearer. Suppose there's some package that is being built with a `(build, host, target)` platform triple of `(foo, bar, baz)`. If it has a build-time library dependency, that would be a "host → build" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). If it needs a compiler to be built, that would be a "build → host" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). That compiler, would be built with another compiler, also "build → host" dependency, with a triple of `(foo, foo, foo)`.
120+* If `g++` itself linked against `libgccjit.so` (for example, to allow compile-time-evaluated C++ expressions), then the `libgccjit` package used to provide this functionality would be a "host→ host" dependency of `g++`: it is code which runs on the `host` and emits code for execution on the `host`.
97### Cross packaging cookbook {#ssec-cross-cookbook}
122### Cross packaging cookbook {#ssec-cross-cookbook}
doc/stdenv/meta.chapter.md+34
@@ -175,6 +175,40 @@ The NixOS tests are available as `nixosTests` in parameters of derivations. For
176NixOS tests run in a VM, so they are slower than regular package tests. For more information see [NixOS module tests](https://nixos.org/manual/nixos/stable/#sec-nixos-tests).
176NixOS tests run in a VM, so they are slower than regular package tests. For more information see [NixOS module tests](https://nixos.org/manual/nixos/stable/#sec-nixos-tests).
178+Alternatively, you can specify other derivations as tests. You can make use of
179+the optional parameter to inject the correct package without
180+relying on non-local definitions, even in the presence of `overrideAttrs`.
181+Here that's `finalAttrs.finalPackage`, but you could choose a different name if
182+`finalAttrs` already exists in your scope.
184+`(mypkg.overrideAttrs f).passthru.tests` will be as expected, as long as the
185+definition of `tests` does not rely on the original `mypkg` or overrides it in
189+# my-package/default.nix
190+{ stdenv, callPackage }:
191+stdenv.mkDerivation (finalAttrs: {
193+ passthru.tests.example = callPackage ./example.nix { my-package = finalAttrs.finalPackage; };
198+# my-package/example.nix
199+{ runCommand, lib, my-package, ... }:
200+runCommand "my-package-test" {
201+ nativeBuildInputs = [ my-package ];
202+ src = lib.sources.sourcesByRegex ./. [ ".*.in" ".*.expected" ];
205+ my-package <example.in >example.actual
206+ diff -U3 --color=auto example.expected example.actual
178### `timeout` {#var-meta-timeout}
212### `timeout` {#var-meta-timeout}
180A timeout (in seconds) for building the derivation. If the derivation takes longer than this time to build, it can fail due to breaking the timeout. However, all computers do not have the same computing power, hence some builders may decide to apply a multiplicative factor to this value. When filling this value in, try to keep it approximately consistent with other values already present in `nixpkgs`.
214A timeout (in seconds) for building the derivation. If the derivation takes longer than this time to build, it can fail due to breaking the timeout. However, all computers do not have the same computing power, hence some builders may decide to apply a multiplicative factor to this value. When filling this value in, try to keep it approximately consistent with other values already present in `nixpkgs`.
doc/stdenv/stdenv.chapter.md+56−2
@@ -125,7 +125,7 @@ The extension of `PATH` with dependencies, alluded to above, proceeds according
125A dependency is said to be **propagated** when some of its other-transitive (non-immediate) downstream dependencies also need it as an immediate dependency.
125A dependency is said to be **propagated** when some of its other-transitive (non-immediate) downstream dependencies also need it as an immediate dependency.
126[^footnote-stdenv-propagated-dependencies]
126[^footnote-stdenv-propagated-dependencies]
128−It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`), representing how respectively its host and target platforms are "offset" from the depending derivation’s platforms. The following table summarize the different combinations that can be obtained:
128+It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`) representing its [dependency type](#possible-dependency-types), which captures how its host and target platforms are each "offset" from the depending derivation’s host and target platforms. The following table summarize the different combinations that can be obtained:
130| `host → target` | attribute name | offset |
130| `host → target` | attribute name | offset |
131| ------------------- | ------------------- | -------- |
131| ------------------- | ------------------- | -------- |
@@ -317,6 +317,60 @@ The script will be usually run from the root of the Nixpkgs repository but you s
318For information about how to run the updates, execute `nix-shell maintainers/scripts/update.nix`.
318For information about how to run the updates, execute `nix-shell maintainers/scripts/update.nix`.
320+### Recursive attributes in `mkDerivation`
322+If you pass a function to `mkDerivation`, it will receive as its argument the final arguments, including the overrides when reinvoked via `overrideAttrs`. For example:
325+mkDerivation (finalAttrs: {
329+ lib.optionals finalAttrs.withFeature ["--with-feature"];
333+Note that this does not use the `rec` keyword to reuse `withFeature` in `configureFlags`.
334+The `rec` keyword works at the syntax level and is unaware of overriding.
336+Instead, the definition references `finalAttrs`, allowing users to change `withFeature`
337+consistently with `overrideAttrs`.
339+`finalAttrs` also contains the attribute `finalPackage`, which includes the output paths, etc.
341+Let's look at a more elaborate example to understand the differences between
345+# `pkg` is the _original_ definition (for illustration purposes)
347+ mkDerivation (finalAttrs: {
350+ # An example attribute
353+ # `passthru.tests` is a commonly defined attribute.
354+ passthru.tests.simple = f finalAttrs.finalPackage;
356+ # An example of an attribute containing a function
357+ passthru.appendPackages = packages':
358+ finalAttrs.finalPackage.overrideAttrs (newSelf: super: {
359+ packages = super.packages ++ packages';
362+ # For illustration purposes; referenced as
363+ # `(pkg.overrideAttrs(x)).finalAttrs` etc in the text below.
364+ passthru.finalAttrs = finalAttrs;
365+ passthru.original = pkg;
370+Unlike the `pkg` binding in the above example, the `finalAttrs` parameter always references the final attributes. For instance `(pkg.overrideAttrs(x)).finalAttrs.finalPackage` is identical to `pkg.overrideAttrs(x)`, whereas `(pkg.overrideAttrs(x)).original` is the same as the original `pkg`.
372+See also the section about [`passthru.tests`](#var-meta-tests).
320## Phases {#sec-stdenv-phases}
374## Phases {#sec-stdenv-phases}
322`stdenv.mkDerivation` sets the Nix [derivation](https://nixos.org/manual/nix/stable/expressions/derivations.html#derivations)'s builder to a script that loads the stdenv `setup.sh` bash library and calls `genericBuild`. Most packaging functions rely on this default builder.
376`stdenv.mkDerivation` sets the Nix [derivation](https://nixos.org/manual/nix/stable/expressions/derivations.html#derivations)'s builder to a script that loads the stdenv `setup.sh` bash library and calls `genericBuild`. Most packaging functions rely on this default builder.
@@ -1043,7 +1097,7 @@ You can also specify a `runtimeDependencies` variable which lists dependencies t
1044In certain situations you may want to run the main command (`autoPatchelf`) of the setup hook on a file or a set of directories instead of unconditionally patching all outputs. This can be done by setting the `dontAutoPatchelf` environment variable to a non-empty value.
1098In certain situations you may want to run the main command (`autoPatchelf`) of the setup hook on a file or a set of directories instead of unconditionally patching all outputs. This can be done by setting the `dontAutoPatchelf` environment variable to a non-empty value.
1046−By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value.
1100+By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value. `autoPatchelfIgnoreMissingDeps` can be set to a list like `autoPatchelfIgnoreMissingDeps = [ "libcuda.so.1" "libcudart.so.1" ];` or to simply `[ "*" ]` to ignore all missing dependencies.
1048The `autoPatchelf` command also recognizes a `--no-recurse` command line flag, which prevents it from recursing into subdirectories.
1102The `autoPatchelf` command also recognizes a `--no-recurse` command line flag, which prevents it from recursing into subdirectories.
doc/using/overrides.chapter.md+6−2
@@ -39,14 +39,18 @@ The function `overrideAttrs` allows overriding the attribute set passed to a `st
39Example usage:
39Example usage:
42−helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
42+helloWithDebug = pkgs.hello.overrideAttrs (finalAttrs: previousAttrs: {
43 separateDebugInfo = true;
43 separateDebugInfo = true;
47In the above example, the `separateDebugInfo` attribute is overridden to be true, thus building debug info for `helloWithDebug`, while all other attributes will be retained from the original `hello` package.
47In the above example, the `separateDebugInfo` attribute is overridden to be true, thus building debug info for `helloWithDebug`, while all other attributes will be retained from the original `hello` package.
49−The argument `oldAttrs` is conventionally used to refer to the attr set originally passed to `stdenv.mkDerivation`.
49+The argument `previousAttrs` is conventionally used to refer to the attr set originally passed to `stdenv.mkDerivation`.
51+The argument `finalAttrs` refers to the final attributes passed to `mkDerivation`, plus the `finalPackage` attribute which is equal to the result of `mkDerivation` or subsequent `overrideAttrs` calls.
53+If only a one-argument function is written, the argument has the meaning of `previousAttrs`.
51::: {.note}
55::: {.note}
52Note that `separateDebugInfo` is processed only by the `stdenv.mkDerivation` function, not the generated, raw Nix derivation. Thus, using `overrideDerivation` will not work in this case, as it overrides only the attributes of the final derivation. It is for this reason that `overrideAttrs` should be preferred in (almost) all cases to `overrideDerivation`, i.e. to allow using `stdenv.mkDerivation` to process input arguments, as well as the fact that it is easier to use (you can use the same attribute names you see in your Nix code, instead of the ones generated (e.g. `buildInputs` vs `nativeBuildInputs`), and it involves less typing).
56Note that `separateDebugInfo` is processed only by the `stdenv.mkDerivation` function, not the generated, raw Nix derivation. Thus, using `overrideDerivation` will not work in this case, as it overrides only the attributes of the final derivation. It is for this reason that `overrideAttrs` should be preferred in (almost) all cases to `overrideDerivation`, i.e. to allow using `stdenv.mkDerivation` to process input arguments, as well as the fact that it is easier to use (you can use the same attribute names you see in your Nix code, instead of the ones generated (e.g. `buildInputs` vs `nativeBuildInputs`), and it involves less typing).
@@ -11,6 +11,9 @@ let
11 callLibs = file: import file { lib = self; };
11 callLibs = file: import file { lib = self; };
14+ # interacting with flakes
15+ flakes = callLibs ./flakes.nix;
14 # often used, or depending on very little
17 # often used, or depending on very little
15 trivial = callLibs ./trivial.nix;
18 trivial = callLibs ./trivial.nix;
16 fixedPoints = callLibs ./fixed-points.nix;
19 fixedPoints = callLibs ./fixed-points.nix;
@@ -59,6 +62,7 @@ let
59 # linux kernel configuration
62 # linux kernel configuration
60 kernel = callLibs ./kernel.nix;
63 kernel = callLibs ./kernel.nix;
65+ inherit (self.flakes) callLocklessFlake;
62 inherit (builtins) add addErrorContext attrNames concatLists
66 inherit (builtins) add addErrorContext attrNames concatLists
63 deepSeq elem elemAt filter genericClosure genList getAttr
67 deepSeq elem elemAt filter genericClosure genList getAttr
64 hasAttr head isAttrs isBool isInt isList isString length
68 hasAttr head isAttrs isBool isInt isList isString length
@@ -94,7 +98,8 @@ let
94 concatImapStringsSep makeSearchPath makeSearchPathOutput
98 concatImapStringsSep makeSearchPath makeSearchPathOutput
95 makeLibraryPath makeBinPath optionalString
99 makeLibraryPath makeBinPath optionalString
96 hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
100 hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
101+ escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
97− escapeShellArg escapeShellArgs escapeRegex escapeXML replaceChars lowerChars
102+ escapeRegex escapeXML replaceChars lowerChars
98 upperChars toLower toUpper addContextFrom splitString
103 upperChars toLower toUpper addContextFrom splitString
99 removePrefix removeSuffix versionOlder versionAtLeast
104 removePrefix removeSuffix versionOlder versionAtLeast
100 getName getVersion
105 getName getVersion
@@ -108,7 +113,7 @@ let
108 makeScope makeScopeWithSplicing;
113 makeScope makeScopeWithSplicing;
109 inherit (self.meta) addMetaAttrs dontDistribute setName updateName
114 inherit (self.meta) addMetaAttrs dontDistribute setName updateName
110 appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
115 appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
111− hiPrioSet getLicenseFromSpdxId;
116+ hiPrioSet getLicenseFromSpdxId getExe;
112 inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
117 inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
113 cleanSource sourceByRegex sourceFilesBySuffices
118 cleanSource sourceByRegex sourceFilesBySuffices
114 commitIdFromGitRepo cleanSourceWith pathHasContext
119 commitIdFromGitRepo cleanSourceWith pathHasContext
lib/flakes.nixnew file+22
@@ -0,0 +1,22 @@
5+ /* imports a flake.nix without acknowledging its lock file, useful for
6+ referencing subflakes from a parent flake. The second argument allows
7+ specifying the inputs of this flake.
11+ path = ./directoryContainingFlake;
12+ inputs = { inherit nixpkgs; };
15+ callLocklessFlake = { path, inputs ? { } }:
17+ self = { outPath = path; } //
18+ ((import (path + "/flake.nix")).outputs (inputs // { self = self; }));
@@ -10,7 +10,7 @@
10 * are mostly generators themselves, called with
10 * are mostly generators themselves, called with
11 * their respective default values; they can be reused.
11 * their respective default values; they can be reused.
13− * Tests can be found in ./tests.nix
13+ * Tests can be found in ./tests/misc.nix
14 * Documentation in the manual, #sec-generators
14 * Documentation in the manual, #sec-generators
@@ -108,7 +108,7 @@ rec {
108 * The mk* configuration attributes can generically change
108 * The mk* configuration attributes can generically change
109 * the way sections and key-value strings are generated.
109 * the way sections and key-value strings are generated.
111− * For more examples see the test cases in ./tests.nix.
111+ * For more examples see the test cases in ./tests/misc.nix.
113 toINI = {
113 toINI = {
114 # apply transformations (e.g. escapes) to section names
114 # apply transformations (e.g. escapes) to section names
@@ -130,6 +130,51 @@ rec {
130 # map input to ini sections
130 # map input to ini sections
131 mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
131 mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
133+ /* Generate an INI-style config file from an attrset
134+ * specifying the global section (no header), and an
135+ * attrset of sections to an attrset of key-value pairs.
137+ * generators.toINIWithGlobalSection {} {
139+ * someGlobalKey = "hi";
142+ * foo = { hi = "${pkgs.hello}"; ciao = "bar"; };
143+ * baz = { "also, integers" = 42; };
149+ *> also, integers=42
153+ *> hi=/nix/store/y93qql1p5ggfnaqjjqhxcw0vqw95rlz0-hello-2.10
155+ * The mk* configuration attributes can generically change
156+ * the way sections and key-value strings are generated.
158+ * For more examples see the test cases in ./tests/misc.nix.
160+ * If you don’t need a global section, you can also use
161+ * `generators.toINI` directly, which only takes
162+ * the part in `sections`.
164+ toINIWithGlobalSection = {
165+ # apply transformations (e.g. escapes) to section names
166+ mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
167+ # format a setting line from key and value
168+ mkKeyValue ? mkKeyValueDefault {} "=",
169+ # allow lists as values for duplicate keys
170+ listsAsDuplicateKeys ? false
171+ }: { globalSection, sections }:
172+ ( if globalSection == {}
174+ else (toKeyValue { inherit mkKeyValue listsAsDuplicateKeys; } globalSection)
176+ + (toINI { inherit mkSectionName mkKeyValue listsAsDuplicateKeys; } sections);
133 /* Generate a git-config file from an attrset.
178 /* Generate a git-config file from an attrset.
135 * It has two major differences from the regular INI format:
180 * It has two major differences from the regular INI format:
@@ -126,4 +126,18 @@ rec {
126 lib.warn "getLicenseFromSpdxId: No license matches the given SPDX ID: ${licstr}"
126 lib.warn "getLicenseFromSpdxId: No license matches the given SPDX ID: ${licstr}"
127 { shortName = licstr; }
127 { shortName = licstr; }
130+ /* Get the path to the main program of a derivation with either
131+ meta.mainProgram or pname or name
133+ Type: getExe :: derivation -> string
137+ => "/nix/store/g124820p9hlv4lj8qplzxw1c44dxaw1k-hello-2.12/bin/hello"
138+ getExe pkgs.mustache-go
139+ => "/nix/store/am9ml4f4ywvivxnkiaqwr0hyxka1xjsf-mustache-go-1.3.0/bin/mustache"
142+ "${lib.getBin x}/bin/${x.meta.mainProgram or (lib.getName x)}";
@@ -46,6 +46,7 @@ let
47 showOption
47 showOption
48 unknownModule
48 unknownModule
51 showDeclPrefix = loc: decl: prefix:
52 showDeclPrefix = loc: decl: prefix:
@@ -112,6 +113,10 @@ rec {
112 args ? {}
113 args ? {}
113 , # This would be remove in the future, Prefer _module.check option instead.
114 , # This would be remove in the future, Prefer _module.check option instead.
114 check ? true
115 check ? true
116+ # Internal variable to avoid `_key` collisions regardless
117+ # of `extendModules`. Used in `submoduleWith`.
118+ # Test case: lib/tests/modules, "168767"
119+ , extensionOffset ? 0
117 withWarnings = x:
122 withWarnings = x:
@@ -140,7 +145,7 @@ rec {
140 # this module is used, to avoid conflicts and allow chaining of
145 # this module is used, to avoid conflicts and allow chaining of
141 # extendModules.
146 # extendModules.
142 internalModule = rec {
147 internalModule = rec {
143− _file = ./modules.nix;
148+ _file = "lib/modules.nix";
145 key = _file;
150 key = _file;
@@ -153,8 +158,94 @@ rec {
153 # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't
158 # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't
154 # start a download when `pkgs` wasn't evaluated.
159 # start a download when `pkgs` wasn't evaluated.
155 type = types.lazyAttrsOf types.raw;
160 type = types.lazyAttrsOf types.raw;
161+ # Only render documentation once at the root of the option tree,
162+ # not for all individual submodules.
163+ # Allow merging option decls to make this internal regardless.
165+ then null # unset => visible
156− internal = true;
166+ else "internal"} = true;
167+ # TODO: Change the type of this option to a submodule with a
168+ # freeformType, so that individual arguments can be documented
157− description = "Arguments passed to each module.";
170+ description = ''
171+ Additional arguments passed to each module in addition to ones
172+ like <literal>lib</literal>, <literal>config</literal>,
173+ and <literal>pkgs</literal>, <literal>modulesPath</literal>.
176+ This option is also available to all submodules. Submodules do not
177+ inherit args from their parent module, nor do they provide args to
178+ their parent module or sibling submodules. The sole exception to
179+ this is the argument <literal>name</literal> which is provided by
180+ parent modules to a submodule and contains the attribute name
181+ the submodule is bound to, or a unique generated name if it is
182+ not bound to an attribute.
185+ Some arguments are already passed by default, of which the
186+ following <emphasis>cannot</emphasis> be changed with this option:
190+ <varname>lib</varname>: The nixpkgs library.
195+ <varname>config</varname>: The results of all options after merging the values from all modules together.
200+ <varname>options</varname>: The options declared in all modules.
205+ <varname>specialArgs</varname>: The <literal>specialArgs</literal> argument passed to <literal>evalModules</literal>.
210+ All attributes of <varname>specialArgs</varname>
213+ Whereas option values can generally depend on other option values
214+ thanks to laziness, this does not apply to <literal>imports</literal>, which
215+ must be computed statically before anything else.
218+ For this reason, callers of the module system can provide <literal>specialArgs</literal>
219+ which are available during import resolution.
222+ For NixOS, <literal>specialArgs</literal> includes
223+ <varname>modulesPath</varname>, which allows you to import
224+ extra modules from the nixpkgs package tree without having to
225+ somehow make the module aware of the location of the
226+ <literal>nixpkgs</literal> or NixOS directories.
228+ { modulesPath, ... }: {
230+ (modulesPath + "/profiles/minimal.nix")
239+ For NixOS, the default value for this option includes at least this argument:
243+ <varname>pkgs</varname>: The nixpkgs package set according to
244+ the <option>nixpkgs.pkgs</option> option.
160 _module.check = mkOption {
251 _module.check = mkOption {
@@ -254,15 +345,17 @@ rec {
254 modules ? [],
345 modules ? [],
255 specialArgs ? {},
346 specialArgs ? {},
256 prefix ? [],
347 prefix ? [],
348+ extensionOffset ? length modules,
258 evalModules (evalModulesArgs // {
350 evalModules (evalModulesArgs // {
259 modules = regularModules ++ modules;
351 modules = regularModules ++ modules;
260 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
352 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
261 prefix = extendArgs.prefix or evalModulesArgs.prefix;
353 prefix = extendArgs.prefix or evalModulesArgs.prefix;
354+ inherit extensionOffset;
264 type = lib.types.submoduleWith {
357 type = lib.types.submoduleWith {
265− inherit modules specialArgs;
358+ inherit modules specialArgs extensionOffset;
268 result = withWarnings {
361 result = withWarnings {
@@ -17,6 +17,7 @@ rec {
22 parseDrvName
23 parseDrvName
@@ -253,10 +254,7 @@ rec {
255 hasInfix = infix: content:
256 hasInfix = infix: content:
256− let
257+ builtins.match ".*${escapeRegex infix}.*" "${content}" != null;
257− drop = x: substring 1 (stringLength x) x;
258− in hasPrefix infix content
259− || content != "" && hasInfix infix (drop content);
261 /* Convert a string to a list of characters (i.e. singleton strings).
259 /* Convert a string to a list of characters (i.e. singleton strings).
262 This allows you to, e.g., map a function over each character. However,
260 This allows you to, e.g., map a function over each character. However,
@@ -327,6 +325,65 @@ rec {
328 escapeShellArgs = concatMapStringsSep " " escapeShellArg;
326 escapeShellArgs = concatMapStringsSep " " escapeShellArg;
328+ /* Test whether the given name is a valid POSIX shell variable name.
330+ Type: string -> bool
333+ isValidPosixName "foo_bar000"
335+ isValidPosixName "0-bad.jpg"
338+ isValidPosixName = name: match "[a-zA-Z_][a-zA-Z0-9_]*" name != null;
340+ /* Translate a Nix value into a shell variable declaration, with proper escaping.
342+ Supported value types are strings (mapped to regular variables), lists of strings
343+ (mapped to Bash-style arrays) and attribute sets of strings (mapped to Bash-style
344+ associative arrays). Note that "strings" include string-coercible values like paths.
346+ Strings are translated into POSIX sh-compatible code; lists and attribute sets
347+ assume a shell that understands Bash syntax (e.g. Bash or ZSH).
349+ Type: string -> (string | listOf string | attrsOf string) -> string
353+ ${toShellVar "foo" "some string"}
354+ [[ "$foo" == "some string" ]]
357+ toShellVar = name: value:
358+ lib.throwIfNot (isValidPosixName name) "toShellVar: ${name} is not a valid shell variable name" (
359+ if isAttrs value then
360+ "declare -A ${name}=(${
361+ concatStringsSep " " (lib.mapAttrsToList (n: v:
362+ "[${escapeShellArg n}]=${escapeShellArg v}"
365+ else if isList value then
366+ "declare -a ${name}=(${escapeShellArgs value})"
368+ "${name}=${escapeShellArg value}"
371+ /* Translate an attribute set into corresponding shell variable declarations
374+ Type: attrsOf (string | listOf string | attrsOf string) -> string
381+ ${toShellVars { inherit foo bar; }}
382+ [[ "$foo" == "$bar" ]]
385+ toShellVars = vars: concatStringsSep "\n" (lib.mapAttrsToList toShellVar vars);
330 /* Turn a string into a Nix expression representing that string
387 /* Turn a string into a Nix expression representing that string
332 Type: string -> string
389 Type: string -> string
@@ -756,7 +813,14 @@ rec {
756 sanitizeDerivationName pkgs.hello
813 sanitizeDerivationName pkgs.hello
757 => "-nix-store-2g75chlbpxlrqn15zlby2dfh8hr9qwbk-hello-2.10"
814 => "-nix-store-2g75chlbpxlrqn15zlby2dfh8hr9qwbk-hello-2.10"
759− sanitizeDerivationName = string: lib.pipe string [
816+ sanitizeDerivationName =
817+ let okRegex = match "[[:alnum:]+_?=-][[:alnum:]+._?=-]*";
820+ # First detect the common case of already valid strings, to speed those up
821+ if stringLength string <= 207 && okRegex string != null
822+ then unsafeDiscardStringContext string
823+ else lib.pipe string [
760 # Get rid of string context. This is safe under the assumption that the
824 # Get rid of string context. This is safe under the assumption that the
761 # resulting string is only used as a derivation name
825 # resulting string is only used as a derivation name
762 unsafeDiscardStringContext
826 unsafeDiscardStringContext
lib/systems/doubles.nix+2
@@ -74,6 +74,8 @@ in {
74 mips = filterDoubles predicates.isMips;
74 mips = filterDoubles predicates.isMips;
75 mmix = filterDoubles predicates.isMmix;
75 mmix = filterDoubles predicates.isMmix;
76 riscv = filterDoubles predicates.isRiscV;
76 riscv = filterDoubles predicates.isRiscV;
77+ riscv32 = filterDoubles predicates.isRiscV32;
78+ riscv64 = filterDoubles predicates.isRiscV64;
77 vc4 = filterDoubles predicates.isVc4;
79 vc4 = filterDoubles predicates.isVc4;
78 or1k = filterDoubles predicates.isOr1k;
80 or1k = filterDoubles predicates.isOr1k;
79 m68k = filterDoubles predicates.isM68k;
81 m68k = filterDoubles predicates.isM68k;
lib/systems/inspect.nix+3
@@ -13,6 +13,7 @@ rec {
13 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
13 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
14 isPowerPC = { cpu = cpuTypes.powerpc; };
14 isPowerPC = { cpu = cpuTypes.powerpc; };
15 isPower = { cpu = { family = "power"; }; };
15 isPower = { cpu = { family = "power"; }; };
16+ isPower64 = { cpu = { family = "power"; bits = 64; }; };
16 isx86 = { cpu = { family = "x86"; }; };
17 isx86 = { cpu = { family = "x86"; }; };
17 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
18 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
18 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
19 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
@@ -23,6 +24,8 @@ rec {
23 isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
24 isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
24 isMmix = { cpu = { family = "mmix"; }; };
25 isMmix = { cpu = { family = "mmix"; }; };
25 isRiscV = { cpu = { family = "riscv"; }; };
26 isRiscV = { cpu = { family = "riscv"; }; };
27+ isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; };
28+ isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
26 isSparc = { cpu = { family = "sparc"; }; };
29 isSparc = { cpu = { family = "sparc"; }; };
27 isWasm = { cpu = { family = "wasm"; }; };
30 isWasm = { cpu = { family = "wasm"; }; };
28 isMsp430 = { cpu = { family = "msp430"; }; };
31 isMsp430 = { cpu = { family = "msp430"; }; };
lib/systems/platforms.nix+3−3
@@ -3,7 +3,7 @@
3# targetPlatform, etc) containing at least the minimal set of attrs
3# targetPlatform, etc) containing at least the minimal set of attrs
4# required (see types.parsedPlatform in lib/systems/parse.nix). This
4# required (see types.parsedPlatform in lib/systems/parse.nix). This
5# file takes an already-valid platform and further elaborates it with
5# file takes an already-valid platform and further elaborates it with
6−# optional fields such as linux-kernel, gcc, etc.
6+# optional fields; currently these are: linux-kernel, gcc, and rustc.
@@ -500,7 +500,7 @@ rec {
500 # based on:
500 # based on:
501 # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
501 # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
502 # https://gmplib.org/~tege/qemu.html#mips64-debian
502 # https://gmplib.org/~tege/qemu.html#mips64-debian
503− mips64el-qemu-linux-gnuabi64 = (import ./examples).mips64el-linux-gnuabi64 // {
503+ mips64el-qemu-linux-gnuabi64 = {
504 linux-kernel = {
504 linux-kernel = {
505 name = "mips64el";
505 name = "mips64el";
506 baseConfig = "64r2el_defconfig";
506 baseConfig = "64r2el_defconfig";
@@ -568,5 +568,5 @@ rec {
569 else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv
569 else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv
571− else pc;
571+ else { };
lib/tests/flakes/subflakeTest/flake.nixnew file+8
@@ -0,0 +1,8 @@
2+ outputs = { self, subflake, callLocklessFlake }: rec {
3+ x = (callLocklessFlake {
lib/tests/flakes/subflakeTest/subflake/flake.nixnew file+5
@@ -22,6 +22,15 @@ in
27+ testCallLocklessFlake = {
28+ expr = callLocklessFlake {
29+ path = ./flakes/subflakeTest;
30+ inputs = { subflake = ./flakes/subflakeTest/subflake; inherit callLocklessFlake; };
32+ expected = { x = 1; outPath = ./flakes/subflakeTest; };
@@ -251,6 +260,56 @@ runTests {
251 expected = ""test" 'test' < & >";
260 expected = ""test" 'test' < & >";
266+ STRing01 = "just a 'string'";
267+ _array_ = [ "with" "more strings" ];
268+ assoc."with some" = ''
275+ STRing01='just a '\'''string'\''''
276+ declare -a _array_=('with' 'more strings')
277+ declare -A assoc=(['with some']='strings
283+ testHasInfixFalse = {
284+ expr = hasInfix "c" "abde";
288+ testHasInfixTrue = {
289+ expr = hasInfix "c" "abcde";
293+ testHasInfixDerivation = {
294+ expr = hasInfix "hello" (import ../.. { system = "x86_64-linux"; }).hello;
298+ testHasInfixPath = {
299+ expr = hasInfix "tests" ./.;
303+ testHasInfixPathStoreDir = {
304+ expr = hasInfix builtins.storeDir ./.;
308+ testHasInfixToString = {
309+ expr = hasInfix "a" { __toString = _: "a"; };
256 testFilter = {
315 testFilter = {
@@ -471,6 +530,66 @@ runTests {
533+ testToINIWithGlobalSectionEmpty = {
534+ expr = generators.toINIWithGlobalSection {} {
544+ testToINIWithGlobalSectionGlobalEmptyIsTheSameAsToINI =
549+ x = "Me-se JarJar Binx";
552+ "he\\h=he" = "this is okay";
557+ generators.toINIWithGlobalSection {} {
559+ sections = sections;
561+ expected = generators.toINI {} sections;
564+ testToINIWithGlobalSectionFull = {
565+ expr = generators.toINIWithGlobalSection {} {
573+ x = "Me-se JarJar Binx";
576+ "he\\h=he" = "this is okay";
585+ he\h\=he=this is okay
474 /* right now only invocation check */
593 /* right now only invocation check */
475 testToJSONSimple =
594 testToJSONSimple =
476 let val = {
595 let val = {
@@ -649,6 +768,11 @@ runTests {
649 expected = "foo";
768 expected = "foo";
771+ testSanitizeDerivationNameUnicode = testSanitizeDerivationName {
652 testSanitizeDerivationNameAscii = testSanitizeDerivationName {
776 testSanitizeDerivationNameAscii = testSanitizeDerivationName {
653 name = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
777 name = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
654 expected = "-+--.-0123456789-=-?-ABCDEFGHIJKLMNOPQRSTUVWXYZ-_-abcdefghijklmnopqrstuvwxyz-";
778 expected = "-+--.-0123456789-=-?-ABCDEFGHIJKLMNOPQRSTUVWXYZ-_-abcdefghijklmnopqrstuvwxyz-";
@@ -691,7 +815,7 @@ runTests {
692 locs = filter (o: ! o.internal) (optionAttrSetToDocList options);
816 locs = filter (o: ! o.internal) (optionAttrSetToDocList options);
693 in map (o: o.loc) locs;
817 in map (o: o.loc) locs;
694− expected = [ [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
818+ expected = [ [ "_module" "args" ] [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
697 testCartesianProductOfEmptySet = {
821 testCartesianProductOfEmptySet = {
@@ -293,7 +293,7 @@ checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
294# moduleType
294# moduleType
295checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
295checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
296−checkConfigOutput '^"a y z"$' config.resultFooBar ./declare-variants.nix ./define-variant.nix
296+checkConfigOutput '^"a b y z"$' config.resultFooBar ./declare-variants.nix ./define-variant.nix
297checkConfigOutput '^"a b c"$' config.resultFooFoo ./declare-variants.nix ./define-variant.nix
297checkConfigOutput '^"a b c"$' config.resultFooFoo ./declare-variants.nix ./define-variant.nix
299## emptyValue's
299## emptyValue's
@@ -327,6 +327,10 @@ checkConfigError 'The option .theOption.nested. in .other.nix. is already declar
327# Test that types.optionType leaves types untouched as long as they don't need to be merged
327# Test that types.optionType leaves types untouched as long as they don't need to be merged
328checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix
328checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix
330+# Anonymous submodules don't get nixed by import resolution/deduplication
331+# because of an `extendModules` bug, issue 168767.
332+checkConfigOutput '^1$' config.sub.specialisation.value ./extendModules-168767-imports.nix
331====== module tests ======
335====== module tests ======
332$pass Pass
336$pass Pass
lib/tests/modules/extendModules-168767-imports.nixnew file+41
@@ -0,0 +1,41 @@
10+ options.sub = mkOption {
12+ type = types.submodule (
18+ options.value = mkOption {
22+ options.specialisation = mkOption {
27+ specialisation = mkOverride 0 { };
37+ { config.sub.value = 1; }
@@ -19,6 +19,9 @@ with lib.systems.doubles; lib.runTests {
19 testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
19 testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
20 testmips = mseteq mips [ "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
20 testmips = mseteq mips [ "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
21 testmmix = mseteq mmix [ "mmix-mmixware" ];
21 testmmix = mseteq mmix [ "mmix-mmixware" ];
22+ testriscv = mseteq riscv [ "riscv32-linux" "riscv64-linux" "riscv32-netbsd" "riscv64-netbsd" "riscv32-none" "riscv64-none" ];
23+ testriscv32 = mseteq riscv32 [ "riscv32-linux" "riscv32-netbsd" "riscv32-none" ];
24+ testriscv64 = mseteq riscv64 [ "riscv64-linux" "riscv64-netbsd" "riscv64-none" ];
22 testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
25 testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
24 testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
27 testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
@@ -568,6 +568,11 @@ rec {
568 { modules
568 { modules
569 , specialArgs ? {}
569 , specialArgs ? {}
570 , shorthandOnlyDefinesConfig ? false
570 , shorthandOnlyDefinesConfig ? false
572+ # Internal variable to avoid `_key` collisions regardless
573+ # of `extendModules`. Wired through by `evalModules`.
574+ # Test case: lib/tests/modules, "168767"
575+ , extensionOffset ? 0
573 inherit (lib.modules) evalModules;
578 inherit (lib.modules) evalModules;
@@ -579,11 +584,11 @@ rec {
579 allModules = defs: imap1 (n: { value, file }:
584 allModules = defs: imap1 (n: { value, file }:
580 if isFunction value
585 if isFunction value
581 then setFunctionArgs
586 then setFunctionArgs
582− (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (value args))
587+ (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args))
583 (functionArgs value)
588 (functionArgs value)
584 else if isAttrs value
589 else if isAttrs value
586− lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (shorthandToModule value)
591+ lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value)
587 else value
592 else value
@@ -620,6 +625,7 @@ rec {
620 (base.extendModules {
625 (base.extendModules {
621 modules = [ { _module.args.name = last loc; } ] ++ allModules defs;
626 modules = [ { _module.args.name = last loc; } ] ++ allModules defs;
622 prefix = loc;
627 prefix = loc;
628+ extensionOffset = extensionOffset + length defs;
623 }).config;
629 }).config;
624 emptyValue = { value = {}; };
630 emptyValue = { value = {}; };
625 getSubOptions = prefix: (base.extendModules
631 getSubOptions = prefix: (base.extendModules
maintainers/maintainer-list.nix+252−37
@@ -380,6 +380,12 @@
380 githubId = 209175;
380 githubId = 209175;
381 name = "Alesya Huzik";
381 name = "Alesya Huzik";
384+ email = "aidalgol+nixpkgs@fastmail.net";
385+ github = "aidalgol";
387+ name = "Aidan Gauland";
384 email = "aij+git@mrph.org";
390 email = "aij+git@mrph.org";
385 github = "aij";
391 github = "aij";
@@ -519,6 +525,12 @@
519 githubId = 38869148;
525 githubId = 38869148;
520 name = "Alex Eyre";
526 name = "Alex Eyre";
529+ email = "aliasgram@gmail.com";
532+ name = "Alias Gram";
522 alibabzo = {
534 alibabzo = {
523 email = "alistair.bill@gmail.com";
535 email = "alistair.bill@gmail.com";
524 github = "alibabzo";
536 github = "alibabzo";
@@ -669,6 +681,18 @@
669 githubId = 858965;
681 githubId = 858965;
670 name = "Andrew Morsillo";
682 name = "Andrew Morsillo";
685+ name = "Tris Emmy Wilson";
686+ email = "tris@tris.fyi";
687+ github = "an-empty-string";
691+ email = "aipopov@live.ru";
692+ github = "AnatolyPopov";
694+ name = "Anatolii Popov";
672 andehen = {
696 andehen = {
673 email = "git@andehen.net";
697 email = "git@andehen.net";
674 github = "andehen";
698 github = "andehen";
@@ -817,6 +841,13 @@
817 githubId = 5327697;
841 githubId = 5327697;
818 name = "Anatolii Prylutskyi";
842 name = "Anatolii Prylutskyi";
845+ email = "mail@anselmschueler.com";
846+ github = "schuelermine";
847+ githubId = 48802534;
848+ name = "Anselm Schüler";
849+ matrix = "@schuelermine:matrix.org";
820 antoinerg = {
851 antoinerg = {
821 email = "roygobeil.antoine@gmail.com";
852 email = "roygobeil.antoine@gmail.com";
822 github = "antoinerg";
853 github = "antoinerg";
@@ -1037,8 +1068,8 @@
1037 name = "Kirill Boltaev";
1068 name = "Kirill Boltaev";
1039 ashley = {
1070 ashley = {
1040− email = "personavinny@protonmail.com";
1071+ email = "ashley@kira64.xyz";
1041− github = "paranoidcat";
1072+ github = "kira64xyz";
1042 githubId = 84152630;
1073 githubId = 84152630;
1043 name = "Ashley Chiara";
1074 name = "Ashley Chiara";
@@ -1378,6 +1409,12 @@
1378 githubId = 164148;
1409 githubId = 164148;
1379 name = "Ben Darwin";
1410 name = "Ben Darwin";
1413+ email = "bdd@mindcast.org";
1416+ name = "Berk D. Demir";
1381 bdesham = {
1418 bdesham = {
1382 email = "benjamin@esham.io";
1419 email = "benjamin@esham.io";
1383 github = "bdesham";
1420 github = "bdesham";
@@ -1794,6 +1831,12 @@
1794 githubId = 7214361;
1831 githubId = 7214361;
1795 name = "Roman Gerasimenko";
1832 name = "Roman Gerasimenko";
1835+ email = "builditluc@icloud.com";
1836+ github = "builditluc";
1837+ githubId = 37375448;
1797 bburdette = {
1840 bburdette = {
1798 email = "bburdette@protonmail.com";
1841 email = "bburdette@protonmail.com";
1799 github = "bburdette";
1842 github = "bburdette";
@@ -2043,6 +2086,12 @@
2043 githubId = 8228888;
2086 githubId = 8228888;
2044 name = "Charlie Hanley";
2087 name = "Charlie Hanley";
2090+ email = "charlesbaynham@gmail.com";
2091+ github = "charlesbaynham";
2092+ githubId = 4397637;
2093+ name = "Charles Baynham";
2046 CharlesHD = {
2095 CharlesHD = {
2047 email = "charleshdespointes@gmail.com";
2096 email = "charleshdespointes@gmail.com";
2048 github = "CharlesHD";
2097 github = "CharlesHD";
@@ -2083,12 +2132,6 @@
2083 githubId = 18648043;
2132 githubId = 18648043;
2084 name = "Daniel Cartwright";
2133 name = "Daniel Cartwright";
2087− email = "okinan@protonmail.com";
2088− github = "chiiruno";
2089− githubId = 30435868;
2090− name = "Okina Matara";
2092 Chili-Man = {
2135 Chili-Man = {
2093 email = "dr.elhombrechile@gmail.com";
2136 email = "dr.elhombrechile@gmail.com";
2094 name = "Diego Rodriguez";
2137 name = "Diego Rodriguez";
@@ -2260,6 +2303,7 @@
2260 fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215";
2303 fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215";
2262 name = "ckie";
2305 name = "ckie";
2306+ matrix = "@ckie:ckie.dev";
2264 clkamp = {
2308 clkamp = {
2265 email = "c@lkamp.de";
2309 email = "c@lkamp.de";
@@ -3837,6 +3881,13 @@
3837 githubId = 222467;
3881 githubId = 222467;
3838 name = "Dmitry Ivanov";
3882 name = "Dmitry Ivanov";
3885+ name = "Ethin Probst";
3886+ email = "harlydavidsen@gmail.com";
3887+ matrix = "@ethindp:the-gdn.net";
3888+ github = "ethindp";
3889+ githubId = 8030501;
3840 Etjean = {
3891 Etjean = {
3841 email = "et.jean@outlook.fr";
3892 email = "et.jean@outlook.fr";
3842 github = "Etjean";
3893 github = "Etjean";
@@ -4073,11 +4124,18 @@
4073 matrix = "@felschr:matrix.org";
4124 matrix = "@felschr:matrix.org";
4074 github = "felschr";
4125 github = "felschr";
4075 githubId = 3314323;
4126 githubId = 3314323;
4076− name = "Felix Tenley";
4127+ name = "Felix Schröter";
4077− keys = [{
4128+ keys = [
4078− longkeyid = "ed25519/0x910ACB9F6BD26F58";
4131+ longkeyid = "ed25519/0x910ACB9F6BD26F58";
4079− fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
4132+ fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
4135+ longkeyid = "ed25519/0x671E39E6744C807D";
4136+ fingerprint = "7E08 6842 0934 AA1D 6821 1F2A 671E 39E6 744C 807D";
4082 ffinkdevs = {
4140 ffinkdevs = {
4083 email = "fink@h0st.space";
4141 email = "fink@h0st.space";
@@ -4502,6 +4560,12 @@
4502 githubId = 3217744;
4560 githubId = 3217744;
4503 name = "Peter Ferenczy";
4561 name = "Peter Ferenczy";
4564+ name = "Kasper Kondzielski";
4565+ email = "kghost0@gmail.com";
4566+ github = "ghostbuster91";
4567+ githubId = 5662622;
4505 ghuntley = {
4569 ghuntley = {
4506 email = "ghuntley@ghuntley.com";
4570 email = "ghuntley@ghuntley.com";
4507 github = "ghuntley";
4571 github = "ghuntley";
@@ -4656,6 +4720,12 @@
4656 githubId = 4656860;
4720 githubId = 4656860;
4657 name = "Gaute Ravndal";
4721 name = "Gaute Ravndal";
4724+ email = "grayson@graysonhead.net";
4725+ github = "graysonhead";
4726+ githubId = 6179496;
4727+ name = "Grayson Head";
4659 grburst = {
4729 grburst = {
4660 email = "GRBurst@protonmail.com";
4730 email = "GRBurst@protonmail.com";
4661 github = "GRBurst";
4731 github = "GRBurst";
@@ -4684,6 +4754,12 @@
4684 githubId = 201997;
4754 githubId = 201997;
4685 name = "Eric Seidel";
4755 name = "Eric Seidel";
4758+ name = "grindhold";
4759+ email = "grindhold+nix@skarphed.org";
4760+ github = "grindhold";
4761+ githubId = 2592640;
4687 gspia = {
4763 gspia = {
4688 email = "iahogsp@gmail.com";
4764 email = "iahogsp@gmail.com";
4689 github = "gspia";
4765 github = "gspia";
@@ -4702,6 +4778,12 @@
4702 githubId = 343415;
4778 githubId = 343415;
4703 name = "Greg Roodt";
4779 name = "Greg Roodt";
4782+ email = "grnnja@gmail.com";
4784+ githubId = 31556469;
4785+ name = "Prem Netsuwan";
4705 gruve-p = {
4787 gruve-p = {
4706 email = "groestlcoin@gmail.com";
4788 email = "groestlcoin@gmail.com";
4707 github = "gruve-p";
4789 github = "gruve-p";
@@ -5417,6 +5499,12 @@
5417 githubId = 41924494;
5499 githubId = 41924494;
5418 name = "Ivar";
5500 name = "Ivar";
5503+ email = "tracnar@gmail.com";
5505+ githubId = 4035835;
5420 ixmatus = {
5508 ixmatus = {
5421 email = "parnell@digitalmentat.com";
5509 email = "parnell@digitalmentat.com";
5422 github = "ixmatus";
5510 github = "ixmatus";
@@ -5561,6 +5649,12 @@
5561 githubId = 488556;
5649 githubId = 488556;
5562 name = "Javier Aguirre";
5650 name = "Javier Aguirre";
5653+ name = "Jayesh Bhoot";
5654+ email = "jayesh@bhoot.sh";
5655+ github = "jayesh-bhoot";
5656+ githubId = 1915507;
5564 jb55 = {
5658 jb55 = {
5565 email = "jb55@jb55.com";
5659 email = "jb55@jb55.com";
5566 github = "jb55";
5660 github = "jb55";
@@ -6791,12 +6885,6 @@
6791 githubId = 99639;
6885 githubId = 99639;
6792 name = "Pawel Kruszewski";
6886 name = "Pawel Kruszewski";
6795− email = "tomasz.kontusz@gmail.com";
6796− github = "ktosiek";
6798− name = "Tomasz Kontusz";
6800 kubukoz = {
6888 kubukoz = {
6801 email = "kubukoz@gmail.com";
6889 email = "kubukoz@gmail.com";
6802 github = "kubukoz";
6890 github = "kubukoz";
@@ -7130,6 +7218,13 @@
7130 githubId = 1769386;
7218 githubId = 1769386;
7131 name = "Liam Diprose";
7219 name = "Liam Diprose";
7222+ email = "jared@perrycode.com";
7223+ github = "libjared";
7224+ githubId = 3746656;
7225+ matrix = "@libjared:matrix.org";
7226+ name = "Jared Perry";
7133 liff = {
7228 liff = {
7134 email = "liff@iki.fi";
7229 email = "liff@iki.fi";
7135 github = "liff";
7230 github = "liff";
@@ -7160,6 +7255,13 @@
7160 githubId = 714;
7255 githubId = 714;
7161 name = "Lily Ballard";
7256 name = "Lily Ballard";
7258+ lilyinstarlight = {
7259+ email = "lily@lily.flowers";
7260+ matrix = "@lily:lily.flowers";
7261+ github = "lilyinstarlight";
7263+ name = "Lily Foster";
7163 limeytexan = {
7265 limeytexan = {
7164 email = "limeytexan@gmail.com";
7266 email = "limeytexan@gmail.com";
7165 github = "limeytexan";
7267 github = "limeytexan";
@@ -7288,7 +7390,7 @@
7288 name = "Anthony Lodi";
7390 name = "Anthony Lodi";
7290 loicreynier = {
7392 loicreynier = {
7291− email = "loic@loireynier.fr";
7393+ email = "loic@loicreynier.fr";
7292 github = "loicreynier";
7394 github = "loicreynier";
7293 githubId = 88983487;
7395 githubId = 88983487;
7294 name = "Loïc Reynier";
7396 name = "Loïc Reynier";
@@ -8079,6 +8181,12 @@
8079 githubId = 20536514;
8181 githubId = 20536514;
8080 name = "Magdalena Haselsteiner";
8182 name = "Magdalena Haselsteiner";
8185+ email = "mh182@chello.at";
8187+ githubId = 9980864;
8188+ name = "Max Hofer";
8082 mic92 = {
8190 mic92 = {
8083 email = "joerg@thalheim.io";
8191 email = "joerg@thalheim.io";
8084 matrix = "@mic92:nixos.dev";
8192 matrix = "@mic92:nixos.dev";
@@ -8252,6 +8360,17 @@
8252 githubId = 1776903;
8360 githubId = 1776903;
8253 name = "Andrew Abbott";
8361 name = "Andrew Abbott";
8364+ email = "eu@misterio.me";
8365+ github = "misterio77";
8366+ githubId = 5727578;
8367+ matrix = "@misterio:matrix.org";
8368+ name = "Gabriel Fontes";
8370+ longkeyid = "rsa3072/0x245CAB70B4C225E9";
8371+ fingerprint = "7088 C742 1873 E0DB 97FF 17C2 245C AB70 B4C2 25E9";
8255 mitchmindtree = {
8374 mitchmindtree = {
8256 email = "mail@mitchellnordine.com";
8375 email = "mail@mitchellnordine.com";
8257 github = "mitchmindtree";
8376 github = "mitchmindtree";
@@ -8803,6 +8922,12 @@
8803 githubId = 3747396;
8922 githubId = 3747396;
8804 name = "Nathan Isom";
8923 name = "Nathan Isom";
8926+ email = "nix@neil.mayhew.name";
8927+ github = "neilmayhew";
8929+ name = "Neil Mayhew";
8806 nelsonjeppesen = {
8931 nelsonjeppesen = {
8807 email = "nix@jeppesen.io";
8932 email = "nix@jeppesen.io";
8808 github = "NelsonJeppesen";
8933 github = "NelsonJeppesen";
@@ -9910,6 +10035,12 @@
9910 fingerprint = "2CD2 B030 BD22 32EF DF5A 008A 3618 20A4 5DB4 1E9A";
10035 fingerprint = "2CD2 B030 BD22 32EF DF5A 008A 3618 20A4 5DB4 1E9A";
10039+ email = "xdjiaxd@gmail.com";
10040+ github = "podocarp";
10041+ githubId = 10473184;
10042+ name = "Jia Xiaodong";
9913 polendri = {
10044 polendri = {
9914 email = "paul@ijj.li";
10045 email = "paul@ijj.li";
9915 github = "polendri";
10046 github = "polendri";
@@ -10169,6 +10300,12 @@
10169 githubId = 115877;
10300 githubId = 115877;
10170 name = "Kenny Shen";
10301 name = "Kenny Shen";
10304+ email = "quaggy@gmail.com";
10307+ name = "Jonathan Wright";
10172 queezle = {
10309 queezle = {
10173 email = "git@queezle.net";
10310 email = "git@queezle.net";
10174 github = "qzle";
10311 github = "qzle";
@@ -10989,28 +11126,22 @@
10989 githubId = 132835;
11126 githubId = 132835;
10990 name = "Samuel Dionne-Riel";
11127 name = "Samuel Dionne-Riel";
10993− email = "s@muel.gr";
10994− github = "samuelgrf";
10995− githubId = 67663538;
10996− name = "Samuel Gräfenstein";
10999− longkeyid = "rsa4096/0xDE75F92E318123F0";
11000− fingerprint = "6F2E 2A90 423C 8111 BFF2 895E DE75 F92E 3181 23F0";
11003− longkeyid = "rsa4096/0xEF76A063F15C63C8";
11004− fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8";
11008 samuelrivas = {
11129 samuelrivas = {
11009 email = "samuelrivas@gmail.com";
11130 email = "samuelrivas@gmail.com";
11010 github = "samuelrivas";
11131 github = "samuelrivas";
11011 githubId = 107703;
11132 githubId = 107703;
11012 name = "Samuel Rivas";
11133 name = "Samuel Rivas";
11136+ name = "Samyak Sarnayak";
11137+ email = "samyak201@gmail.com";
11138+ github = "Samyak2";
11139+ githubId = 34161949;
11141+ longkeyid = "rsa4096/0x365873F2F0C6153B";
11142+ fingerprint = "155C F413 0129 C058 9A5F 5524 3658 73F2 F0C6 153B";
11014 sander = {
11145 sander = {
11015 email = "s.vanderburg@tudelft.nl";
11146 email = "s.vanderburg@tudelft.nl";
11016 github = "svanderburg";
11147 github = "svanderburg";
@@ -11117,6 +11248,16 @@
11117 email = "schristopher@konputa.com";
11248 email = "schristopher@konputa.com";
11118 name = "Scott Christopher";
11249 name = "Scott Christopher";
11251+ sciencentistguy = {
11252+ email = "jamie@quigley.xyz";
11253+ name = "Jamie Quigley";
11254+ github = "Sciencentistguy";
11255+ githubId = 4983935;
11257+ longkeyid = "rsa2048/0x8E8FF66E2AE8D970";
11258+ fingerprint = "30BB FF3F AB0B BB3E 0435 F83C 8E8F F66E 2AE8 D970";
11120 scode = {
11261 scode = {
11121 email = "peter.schuller@infidyne.com";
11262 email = "peter.schuller@infidyne.com";
11122 github = "scode";
11263 github = "scode";
@@ -11227,6 +11368,12 @@
11227 githubId = 307899;
11368 githubId = 307899;
11228 name = "Gurkan Gur";
11369 name = "Gurkan Gur";
11372+ email = "sb@canva.com";
11373+ github = "serge-belov";
11374+ githubId = 38824235;
11375+ name = "Serge Belov";
11230 sersorrel = {
11377 sersorrel = {
11231 email = "ash@sorrel.sh";
11378 email = "ash@sorrel.sh";
11232 github = "sersorrel";
11379 github = "sersorrel";
@@ -11271,6 +11418,12 @@
11271 githubId = 1151264;
11418 githubId = 1151264;
11272 name = "Sebastian Graf";
11419 name = "Sebastian Graf";
11422+ email = "shadaj@users.noreply.github.com";
11423+ github = "shadaj";
11424+ githubId = 543055;
11425+ name = "Shadaj Laddad";
11274 shahrukh330 = {
11427 shahrukh330 = {
11275 email = "shahrukh330@gmail.com";
11428 email = "shahrukh330@gmail.com";
11276 github = "shahrukh330";
11429 github = "shahrukh330";
@@ -11467,6 +11620,12 @@
11467 githubId = 2770647;
11620 githubId = 2770647;
11468 name = "Simon Vandel Sillesen";
11621 name = "Simon Vandel Sillesen";
11624+ email = "sir4ur0n@users.noreply.github.com";
11625+ github = "sir4ur0n";
11626+ githubId = 1204125;
11627+ name = "sir4ur0n";
11470 siraben = {
11629 siraben = {
11471 email = "bensiraphob@gmail.com";
11630 email = "bensiraphob@gmail.com";
11472 matrix = "@siraben:matrix.org";
11631 matrix = "@siraben:matrix.org";
@@ -11904,6 +12063,12 @@
11904 githubId = 1694705;
12063 githubId = 1694705;
11905 name = "Sam Stites";
12064 name = "Sam Stites";
12067+ email = "strager.nds@gmail.com";
12068+ github = "strager";
12070+ name = "Matthew \"strager\" Glazar";
11907 stumoss = {
12072 stumoss = {
11908 email = "samoss@gmail.com";
12073 email = "samoss@gmail.com";
11909 github = "stumoss";
12074 github = "stumoss";
@@ -12396,6 +12561,12 @@
12396 githubId = 844343;
12561 githubId = 844343;
12397 name = "Thiago K. Okada";
12562 name = "Thiago K. Okada";
12564+ thibaultlemaire = {
12565+ email = "thibault.lemaire@protonmail.com";
12566+ github = "ThibaultLemaire";
12567+ githubId = 21345269;
12568+ name = "Thibault Lemaire";
12399 thibautmarty = {
12570 thibautmarty = {
12400 email = "github@thibautmarty.fr";
12571 email = "github@thibautmarty.fr";
12401 matrix = "@thibaut:thibautmarty.fr";
12572 matrix = "@thibaut:thibautmarty.fr";
@@ -12642,6 +12813,13 @@
12642 githubId = 90456;
12813 githubId = 90456;
12643 name = "Rebecca (Bex) Kelly";
12814 name = "Rebecca (Bex) Kelly";
12817+ name = "Thomas Watson";
12818+ email = "twatson52@icloud.com";
12819+ matrix = "@tpw_rules:matrix.org";
12820+ github = "tpwrules";
12821+ githubId = 208010;
12645 travisbhartwell = {
12823 travisbhartwell = {
12646 email = "nafai@travishartwell.net";
12824 email = "nafai@travishartwell.net";
12647 github = "travisbhartwell";
12825 github = "travisbhartwell";
@@ -13116,6 +13294,12 @@
13116 githubId = 1771332;
13294 githubId = 1771332;
13117 name = "László Vaskó";
13295 name = "László Vaskó";
13298+ email = "vmfuentes64@gmail.com";
13299+ github = "vlinkz";
13300+ githubId = 20145996;
13301+ name = "Victor Fuentes";
13119 vlstill = {
13303 vlstill = {
13120 email = "xstill@fi.muni.cz";
13304 email = "xstill@fi.muni.cz";
13121 github = "vlstill";
13305 github = "vlstill";
@@ -13408,7 +13592,7 @@
13408 name = "Andrei Pampu";
13592 name = "Andrei Pampu";
13410 wolfangaukang = {
13594 wolfangaukang = {
13411− email = "liquid.query960@4wrd.cc";
13595+ email = "clone.gleeful135+nixpkgs@anonaddy.me";
13412 github = "wolfangaukang";
13596 github = "wolfangaukang";
13413 githubId = 8378365;
13597 githubId = 8378365;
13414 name = "P. R. d. O.";
13598 name = "P. R. d. O.";
@@ -13461,6 +13645,13 @@
13461 github = "wunderbrick";
13645 github = "wunderbrick";
13462 githubId = 52174714;
13646 githubId = 52174714;
13649+ email = "72203260+wyndon@users.noreply.github.com";
13650+ matrix = "@wyndon:envs.net";
13651+ github = "wyndon";
13652+ githubId = 72203260;
13464 wyvie = {
13655 wyvie = {
13465 email = "elijahrum@gmail.com";
13656 email = "elijahrum@gmail.com";
13466 github = "wyvie";
13657 github = "wyvie";
@@ -14020,6 +14211,12 @@
14020 github = "deifactor";
14211 github = "deifactor";
14021 githubId = 30192992;
14212 githubId = 30192992;
14215+ name = "deinferno";
14216+ email = "14363193+deinferno@users.noreply.github.com";
14217+ github = "deinferno";
14218+ githubId = 14363193;
14023 fzakaria = {
14220 fzakaria = {
14024 name = "Farid Zakaria";
14221 name = "Farid Zakaria";
14025 email = "farid.m.zakaria@gmail.com";
14222 email = "farid.m.zakaria@gmail.com";
@@ -14143,6 +14340,12 @@
14143 github = "zbioe";
14340 github = "zbioe";
14144 githubId = 7332055;
14341 githubId = 7332055;
14345+ email = "linzway@qq.com";
14347+ githubId = 348013;
14146 zenithal = {
14349 zenithal = {
14147 name = "zenithal";
14350 name = "zenithal";
14148 email = "i@zenithal.me";
14351 email = "i@zenithal.me";
@@ -14263,4 +14466,16 @@
14263 github = "kuwii";
14466 github = "kuwii";
14264 githubId = 10705175;
14467 githubId = 10705175;
14470+ name = "Martin Elias";
14471+ email = "martin+nixpkgs@elias.sx";
14472+ github = "melias122";
14473+ githubId = 1027766;
14476+ name = "Bryan Honof";
14477+ email = "bryanhonof@gmail.com";
14478+ github = "bryanhonof";
14479+ githubId = 5932804;
maintainers/scripts/dep-licenses.sh+1−1
@@ -9,7 +9,7 @@ tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX)
9exitHandler() {
9exitHandler() {
10 exitCode=$?
10 exitCode=$?
11 rm -rf "$tmp"
11 rm -rf "$tmp"
12− exit $exitCode
12+ return $exitCode
15trap "exitHandler" EXIT
15trap "exitHandler" EXIT
maintainers/scripts/haskell/merge-and-open-pr.sh+1−1
@@ -99,7 +99,7 @@ This PR is the regular merge of the \`haskell-updates\` branch into \`master\`.
100This branch is being continually built and tested by hydra at https://hydra.nixos.org/jobset/nixpkgs/haskell-updates. You may be able to find an up-to-date Hydra build report at [cdepillabout/nix-haskell-updates-status](https://github.com/cdepillabout/nix-haskell-updates-status).
100This branch is being continually built and tested by hydra at https://hydra.nixos.org/jobset/nixpkgs/haskell-updates. You may be able to find an up-to-date Hydra build report at [cdepillabout/nix-haskell-updates-status](https://github.com/cdepillabout/nix-haskell-updates-status).
102−We roughly aim to merge these \`haskell-updates\` PRs at least once every two weeks. See the @NixOS/haskell [team calendar](https://cloud.maralorn.de/apps/calendar/p/Mw5WLnzsP7fC4Zky) for who is currently in charge of this branch.
102+We roughly aim to merge these \`haskell-updates\` PRs at least once every two weeks. See the @NixOS/haskell [team calendar](https://cloud.maralorn.de/apps/calendar/p/H6migHmKX7xHoTFa) for who is currently in charge of this branch.
104### haskellPackages Workflow Summary
104### haskellPackages Workflow Summary
maintainers/scripts/luarocks-packages.csv+2−1
@@ -52,7 +52,7 @@ luadbi-postgresql,,,,,,
52luadbi-sqlite3,,,,,,
52luadbi-sqlite3,,,,,,
53luaepnf,,,,,,
53luaepnf,,,,,,
54luaevent,,,,,,
54luaevent,,,,,,
55−luaexpat,,,,1.3.0-1,,arobyn flosse
55+luaexpat,,,,1.4.1-1,,arobyn flosse
56luaffi,,,http://luarocks.org/dev,,,
56luaffi,,,http://luarocks.org/dev,,,
57luafilesystem,,,,1.7.0-2,,flosse
57luafilesystem,,,,1.7.0-2,,flosse
58lualogging,,,,,,
58lualogging,,,,,,
@@ -64,6 +64,7 @@ luasocket,,,,,,
64luasql-sqlite3,,,,,,vyp
64luasql-sqlite3,,,,,,vyp
65luassert,,,,,,
65luassert,,,,,,
66luasystem,,,,,,
66luasystem,,,,,,
67luautf8,,,,,,pstn
68luautf8,,,,,,pstn
68luazip,,,,,,
69luazip,,,,,,
69lua-yajl,,,,,,pstn
70lua-yajl,,,,,,pstn
maintainers/scripts/pluginupdate.py+135−108
@@ -8,6 +8,7 @@
8# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
8# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
10import argparse
10import argparse
11import functools
12import functools
12import http
13import http
13import json
14import json
@@ -28,7 +29,7 @@ from pathlib import Path
28from typing import Dict, List, Optional, Tuple, Union, Any, Callable
29from typing import Dict, List, Optional, Tuple, Union, Any, Callable
29from urllib.parse import urljoin, urlparse
30from urllib.parse import urljoin, urlparse
30from tempfile import NamedTemporaryFile
31from tempfile import NamedTemporaryFile
31−from dataclasses import dataclass
32+from dataclasses import dataclass, asdict
@@ -85,21 +86,31 @@ def make_request(url: str, token=None) -> urllib.request.Request:
85 headers["Authorization"] = f"token {token}"
86 headers["Authorization"] = f"token {token}"
86 return urllib.request.Request(url, headers=headers)
87 return urllib.request.Request(url, headers=headers)
90+# a dictionary of plugins and their new repositories
91+Redirects = Dict['PluginDesc', 'Repo']
88class Repo:
93class Repo:
89 def __init__(
94 def __init__(
90− self, uri: str, branch: str, alias: Optional[str]
95+ self, uri: str, branch: str
91 ) -> None:
96 ) -> None:
92 self.uri = uri
97 self.uri = uri
93 '''Url to the repo'''
98 '''Url to the repo'''
94− self.branch = branch
99+ self._branch = branch
95− self.alias = alias
100+ # Redirect is the new Repo to use
96− self.redirect: Dict[str, str] = {}
101+ self.redirect: Optional['Repo'] = None
97 self.token = "dummy_token"
102 self.token = "dummy_token"
99 @property
104 @property
100 def name(self):
105 def name(self):
101 return self.uri.split('/')[-1]
106 return self.uri.split('/')[-1]
110+ return self._branch or "HEAD"
112+ def __str__(self) -> str:
113+ return f"{self.uri}"
103 def __repr__(self) -> str:
114 def __repr__(self) -> str:
104 return f"Repo({self.name}, {self.uri})"
115 return f"Repo({self.name}, {self.uri})"
@@ -109,6 +120,7 @@ class Repo:
110 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
121 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
111 def latest_commit(self) -> Tuple[str, datetime]:
122 def latest_commit(self) -> Tuple[str, datetime]:
123+ log.debug("Latest commit")
112 loaded = self._prefetch(None)
124 loaded = self._prefetch(None)
113 updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z")
125 updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z")
@@ -124,6 +136,7 @@ class Repo:
124 return loaded
136 return loaded
126 def prefetch(self, ref: Optional[str]) -> str:
138 def prefetch(self, ref: Optional[str]) -> str:
139+ print("Prefetching")
127 loaded = self._prefetch(ref)
140 loaded = self._prefetch(ref)
128 return loaded["sha256"]
141 return loaded["sha256"]
@@ -137,21 +150,22 @@ class Repo:
138class RepoGitHub(Repo):
151class RepoGitHub(Repo):
139 def __init__(
152 def __init__(
140− self, owner: str, repo: str, branch: str, alias: Optional[str]
153+ self, owner: str, repo: str, branch: str
141 ) -> None:
154 ) -> None:
142 self.owner = owner
155 self.owner = owner
143 self.repo = repo
156 self.repo = repo
144 self.token = None
157 self.token = None
145 '''Url to the repo'''
158 '''Url to the repo'''
146− super().__init__(self.url(""), branch, alias)
159+ super().__init__(self.url(""), branch)
147− log.debug("Instantiating github repo %s/%s", self.owner, self.repo)
160+ log.debug("Instantiating github repo owner=%s and repo=%s", self.owner, self.repo)
149 @property
162 @property
150 def name(self):
163 def name(self):
151 return self.repo
164 return self.repo
153 def url(self, path: str) -> str:
166 def url(self, path: str) -> str:
154− return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
167+ res = urljoin(f"https://github.com/{self.owner}/{self.repo}/", path)
156 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
170 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
157 def has_submodules(self) -> bool:
171 def has_submodules(self) -> bool:
@@ -168,6 +182,7 @@ class RepoGitHub(Repo):
168 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
182 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
169 def latest_commit(self) -> Tuple[str, datetime]:
183 def latest_commit(self) -> Tuple[str, datetime]:
170 commit_url = self.url(f"commits/{self.branch}.atom")
184 commit_url = self.url(f"commits/{self.branch}.atom")
185+ log.debug("Sending request to %s", commit_url)
171 commit_req = make_request(commit_url, self.token)
186 commit_req = make_request(commit_url, self.token)
172 with urllib.request.urlopen(commit_req, timeout=10) as req:
187 with urllib.request.urlopen(commit_req, timeout=10) as req:
173 self._check_for_redirect(commit_url, req)
188 self._check_for_redirect(commit_url, req)
@@ -191,12 +206,9 @@ class RepoGitHub(Repo):
191 new_owner, new_name = (
206 new_owner, new_name = (
192 urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
207 urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
194− end_line = "\n" if self.alias is None else f" as {self.alias}\n"
195− plugin_line = "{owner}/{name}" + end_line
197− old_plugin = plugin_line.format(owner=self.owner, name=self.name)
210+ new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
198− new_plugin = plugin_line.format(owner=new_owner, name=new_name)
199− self.redirect[old_plugin] = new_plugin
211+ self.redirect = new_repo
202 def prefetch(self, commit: str) -> str:
214 def prefetch(self, commit: str) -> str:
@@ -207,9 +219,9 @@ class RepoGitHub(Repo):
207 return sha256
219 return sha256
209 def prefetch_github(self, ref: str) -> str:
221 def prefetch_github(self, ref: str) -> str:
210− data = subprocess.check_output(
211− ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
222+ cmd = ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
212− )
223+ log.debug("Running %s", cmd)
224+ data = subprocess.check_output(cmd)
213 return data.strip().decode("utf-8")
225 return data.strip().decode("utf-8")
215 def as_nix(self, plugin: "Plugin") -> str:
227 def as_nix(self, plugin: "Plugin") -> str:
@@ -226,7 +238,7 @@ class RepoGitHub(Repo):
229−@dataclass
241+@dataclass(frozen=True)
230class PluginDesc:
242class PluginDesc:
231 repo: Repo
243 repo: Repo
232 branch: str
244 branch: str
@@ -239,21 +251,38 @@ class PluginDesc:
240 return self.alias
252 return self.alias
254+ def __lt__(self, other):
255+ return self.repo.name < other.repo.name
258+ def load_from_csv(config: FetchConfig, row: Dict[str, str]) -> 'PluginDesc':
259+ branch = row["branch"]
260+ repo = make_repo(row['repo'], branch.strip())
261+ repo.token = config.github_token
262+ return PluginDesc(repo, branch.strip(), row["alias"])
266+ def load_from_string(config: FetchConfig, line: str) -> 'PluginDesc':
271+ uri, alias = uri.split(" as ")
272+ alias = alias.strip()
274+ uri, branch = uri.split("@")
275+ repo = make_repo(uri.strip(), branch.strip())
276+ repo.token = config.github_token
277+ return PluginDesc(repo, branch.strip(), alias)
243class Plugin:
280class Plugin:
246− name: str,
281+ name: str
247− commit: str,
282+ commit: str
248− has_submodules: bool,
283+ has_submodules: bool
249− sha256: str,
284+ sha256: str
250− date: Optional[datetime] = None,
285+ date: Optional[datetime] = None
253− self.commit = commit
254− self.has_submodules = has_submodules
255− self.sha256 = sha256
258 @property
287 @property
259 def normalized_name(self) -> str:
288 def normalized_name(self) -> str:
@@ -270,6 +299,27 @@ class Plugin:
270 return copy
299 return copy
302+def load_plugins_from_csv(config: FetchConfig, input_file: Path,) -> List[PluginDesc]:
303+ log.debug("Load plugins from csv %s", input_file)
305+ with open(input_file, newline='') as csvfile:
306+ log.debug("Writing into %s", input_file)
307+ reader = csv.DictReader(csvfile,)
309+ plugin = PluginDesc.load_from_csv(config, line)
310+ plugins.append(plugin)
314+def run_nix_expr(expr):
315+ with CleanEnvironment():
316+ cmd = ["nix", "eval", "--extra-experimental-features",
317+ "nix-command", "--impure", "--json", "--expr", expr]
318+ log.debug("Running command %s", cmd)
319+ out = subprocess.check_output(cmd)
320+ data = json.loads(out)
274class Editor:
324class Editor:
275 """The configuration of the update script."""
325 """The configuration of the update script."""
@@ -293,20 +343,20 @@ class Editor:
293 self.deprecated = deprecated or root.joinpath("deprecated.json")
343 self.deprecated = deprecated or root.joinpath("deprecated.json")
294 self.cache_file = cache_file or f"{name}-plugin-cache.json"
344 self.cache_file = cache_file or f"{name}-plugin-cache.json"
296− def get_current_plugins(self):
346+ def get_current_plugins(self) -> List[Plugin]:
297 """To fill the cache"""
347 """To fill the cache"""
298− return get_current_plugins(self)
348+ data = run_nix_expr(self.get_plugins)
300− def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
301 plugins = []
349 plugins = []
302− with open(plugin_file) as f:
350+ for name, attr in data.items():
303− for line in f:
351+ print("get_current_plugins: name %s" % name)
304− if line.startswith("#"):
352+ p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
306− plugin = parse_plugin_line(config, line)
307− plugins.append(plugin)
353+ plugins.append(p)
308 return plugins
354 return plugins
356+ def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
358+ return load_plugins_from_csv(config, plugin_file)
310 def generate_nix(self, plugins, outfile: str):
360 def generate_nix(self, plugins, outfile: str):
311 '''Returns nothing for now, writes directly to outfile'''
361 '''Returns nothing for now, writes directly to outfile'''
312 raise NotImplementedError()
362 raise NotImplementedError()
@@ -316,11 +366,11 @@ class Editor:
316 _prefetch = functools.partial(prefetch, cache=cache)
366 _prefetch = functools.partial(prefetch, cache=cache)
318 def update() -> dict:
368 def update() -> dict:
319− plugin_names = self.load_plugin_spec(config, input_file)
369+ plugins = self.load_plugin_spec(config, input_file)
322 pool = Pool(processes=config.proc)
372 pool = Pool(processes=config.proc)
323− results = pool.map(_prefetch, plugin_names)
373+ results = pool.map(_prefetch, plugins)
325 cache.store()
375 cache.store()
@@ -415,23 +465,10 @@ class CleanEnvironment(object):
415 self.empty_config.close()
465 self.empty_config.close()
418−def get_current_plugins(editor: Editor) -> List[Plugin]:
419− with CleanEnvironment():
420− cmd = ["nix", "eval", "--extra-experimental-features", "nix-command", "--impure", "--json", "--expr", editor.get_plugins]
421− log.debug("Running command %s", cmd)
422− out = subprocess.check_output(cmd)
423− data = json.loads(out)
425− for name, attr in data.items():
426− p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
431def prefetch_plugin(
468def prefetch_plugin(
432 p: PluginDesc,
469 p: PluginDesc,
433 cache: "Optional[Cache]" = None,
470 cache: "Optional[Cache]" = None,
434−) -> Tuple[Plugin, Dict[str, str]]:
471+) -> Tuple[Plugin, Optional[Repo]]:
435 repo, branch, alias = p.repo, p.branch, p.alias
472 repo, branch, alias = p.repo, p.branch, p.alias
436 name = alias or p.repo.name
473 name = alias or p.repo.name
437 commit = None
474 commit = None
@@ -445,7 +482,7 @@ def prefetch_plugin(
445 return cached_plugin, repo.redirect
482 return cached_plugin, repo.redirect
447 has_submodules = repo.has_submodules()
484 has_submodules = repo.has_submodules()
448− print(f"prefetch {name}")
485+ log.debug(f"prefetch {name}")
449 sha256 = repo.prefetch(commit)
486 sha256 = repo.prefetch(commit)
@@ -454,12 +491,7 @@ def prefetch_plugin(
457−def fetch_plugin_from_pluginline(config: FetchConfig, plugin_line: str) -> Plugin:
458− plugin, _ = prefetch_plugin(parse_plugin_line(config, plugin_line))
462−def print_download_error(plugin: str, ex: Exception):
494+def print_download_error(plugin: PluginDesc, ex: Exception):
463 print(f"{plugin}: {ex}", file=sys.stderr)
495 print(f"{plugin}: {ex}", file=sys.stderr)
464 ex_traceback = ex.__traceback__
496 ex_traceback = ex.__traceback__
465 tb_lines = [
497 tb_lines = [
@@ -468,20 +500,22 @@ def print_download_error(plugin: str, ex: Exception):
469 print("\n".join(tb_lines))
501 print("\n".join(tb_lines))
472def check_results(
503def check_results(
473− results: List[Tuple[PluginDesc, Union[Exception, Plugin], Dict[str, str]]]
504+ results: List[Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]]
474−) -> Tuple[List[Tuple[PluginDesc, Plugin]], Dict[str, str]]:
505+) -> Tuple[List[Tuple[PluginDesc, Plugin]], Redirects]:
476− failures: List[Tuple[str, Exception]] = []
507+ failures: List[Tuple[PluginDesc, Exception]] = []
477 plugins = []
508 plugins = []
478− redirects: Dict[str, str] = {}
509+ redirects: Redirects = {}
479 for (pdesc, result, redirect) in results:
510 for (pdesc, result, redirect) in results:
480 if isinstance(result, Exception):
511 if isinstance(result, Exception):
481− failures.append((pdesc.name, result))
512+ failures.append((pdesc, result))
515+ if redirect is not None:
516+ redirects.update({pdesc: redirect})
517+ new_pdesc = PluginDesc(redirect, pdesc.branch, pdesc.alias)
483− plugins.append((pdesc, result))
518+ plugins.append((new_pdesc, result))
484− redirects.update(redirect)
486 print(f"{len(results) - len(failures)} plugins were checked", end="")
520 print(f"{len(results) - len(failures)} plugins were checked", end="")
487 if len(failures) == 0:
521 if len(failures) == 0:
@@ -495,31 +529,17 @@ def check_results(
496 sys.exit(1)
530 sys.exit(1)
498−def make_repo(uri, branch, alias) -> Repo:
532+def make_repo(uri: str, branch) -> Repo:
499 '''Instantiate a Repo with the correct specialization depending on server (gitub spec)'''
533 '''Instantiate a Repo with the correct specialization depending on server (gitub spec)'''
500 # dumb check to see if it's of the form owner/repo (=> github) or https://...
534 # dumb check to see if it's of the form owner/repo (=> github) or https://...
501− res = uri.split('/')
535+ res = urlparse(uri)
502− if len(res) <= 2:
536+ if res.netloc in [ "github.com", ""]:
537+ res = res.path.strip('/').split('/')
503− repo = RepoGitHub(res[0], res[1], branch, alias)
538+ repo = RepoGitHub(res[0], res[1], branch)
505− repo = Repo(uri.strip(), branch, alias)
540+ repo = Repo(uri.strip(), branch)
506 return repo
541 return repo
508−def parse_plugin_line(config: FetchConfig, line: str) -> PluginDesc:
513− uri, alias = uri.split(" as ")
514− alias = alias.strip()
516− uri, branch = uri.split("@")
518− repo = make_repo(uri.strip(), branch.strip(), alias)
519− repo.token = config.github_token
521− return PluginDesc(repo, branch.strip(), alias)
524def get_cache_path(cache_file_name: str) -> Optional[Path]:
544def get_cache_path(cache_file_name: str) -> Optional[Path]:
525 xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
545 xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
@@ -576,36 +596,37 @@ class Cache:
577def prefetch(
597def prefetch(
578 pluginDesc: PluginDesc, cache: Cache
598 pluginDesc: PluginDesc, cache: Cache
579−) -> Tuple[PluginDesc, Union[Exception, Plugin], dict]:
599+) -> Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]:
581 plugin, redirect = prefetch_plugin(pluginDesc, cache)
601 plugin, redirect = prefetch_plugin(pluginDesc, cache)
582 cache[plugin.commit] = plugin
602 cache[plugin.commit] = plugin
583 return (pluginDesc, plugin, redirect)
603 return (pluginDesc, plugin, redirect)
584 except Exception as e:
604 except Exception as e:
585− return (pluginDesc, e, {})
605+ return (pluginDesc, e, None)
588def rewrite_input(
609def rewrite_input(
589 config: FetchConfig,
610 config: FetchConfig,
590 input_file: Path,
611 input_file: Path,
591 deprecated: Path,
612 deprecated: Path,
613+ # old pluginDesc and the new
592− redirects: Dict[str, str] = None,
614+ redirects: Redirects = {},
593− append: Tuple = (),
615+ append: List[PluginDesc] = [],
595− with open(input_file, "r") as f:
617+ plugins = load_plugins_from_csv(config, input_file,)
596− lines = f.readlines()
598− lines.extend(append)
619+ plugins.extend(append)
600 if redirects:
621 if redirects:
601− lines = [redirects.get(line, line) for line in lines]
603 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
623 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
604 with open(deprecated, "r") as f:
624 with open(deprecated, "r") as f:
605 deprecations = json.load(f)
625 deprecations = json.load(f)
606− for old, new in redirects.items():
626+ for pdesc, new_repo in redirects.items():
607− old_plugin = fetch_plugin_from_pluginline(config, old)
627+ new_pdesc = PluginDesc(new_repo, pdesc.branch, pdesc.alias)
608− new_plugin = fetch_plugin_from_pluginline(config, new)
628+ old_plugin, _ = prefetch_plugin(pdesc)
629+ new_plugin, _ = prefetch_plugin(new_pdesc)
609 if old_plugin.normalized_name != new_plugin.normalized_name:
630 if old_plugin.normalized_name != new_plugin.normalized_name:
610 deprecations[old_plugin.normalized_name] = {
631 deprecations[old_plugin.normalized_name] = {
611 "new": new_plugin.normalized_name,
632 "new": new_plugin.normalized_name,
@@ -615,10 +636,14 @@ def rewrite_input(
615 json.dump(deprecations, f, indent=4, sort_keys=True)
636 json.dump(deprecations, f, indent=4, sort_keys=True)
616 f.write("\n")
637 f.write("\n")
618− lines = sorted(lines, key=str.casefold)
620 with open(input_file, "w") as f:
639 with open(input_file, "w") as f:
621− f.writelines(lines)
640+ log.debug("Writing into %s", input_file)
641+ # fields = dataclasses.fields(PluginDesc)
642+ fieldnames = ['repo', 'branch', 'alias']
643+ writer = csv.DictWriter(f, fieldnames, dialect='unix', quoting=csv.QUOTE_NONE)
644+ writer.writeheader()
645+ for plugin in sorted(plugins):
646+ writer.writerow(asdict(plugin))
624def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
649def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
@@ -660,9 +685,11 @@ def update_plugins(editor: Editor, args):
662 for plugin_line in args.add_plugins:
687 for plugin_line in args.add_plugins:
688+ pdesc = PluginDesc.load_from_string(fetch_config, plugin_line)
663− editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, append=(plugin_line + "\n",))
690+ editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, append=append)
665− plugin = fetch_plugin_from_pluginline(fetch_config, plugin_line)
692+ plugin, _ = prefetch_plugin(pdesc, )
666 if autocommit:
693 if autocommit:
668 nixpkgs_repo,
695 nixpkgs_repo,
maintainers/team-list.nix+36
@@ -198,6 +198,18 @@ with lib.maintainers; {
198 enableFeatureFreezePing = true;
198 enableFeatureFreezePing = true;
208+ scope = "Maintain Enlightenment desktop environment and related packages.";
209+ shortName = "Enlightenment";
210+ enableFeatureFreezePing = true;
201 # Dummy group for the "everyone else" section
213 # Dummy group for the "everyone else" section
202 feature-freeze-everyone-else = {
214 feature-freeze-everyone-else = {
203 members = [ ];
215 members = [ ];
@@ -343,6 +355,30 @@ with lib.maintainers; {
343 shortName = "Linux Kernel";
355 shortName = "Linux Kernel";
365+ scope = "Maintain lumina desktop environment and related packages.";
366+ shortName = "Lumina";
367+ enableFeatureFreezePing = true;
377+ scope = "Maintain LXQt desktop environment and related packages.";
379+ enableFeatureFreezePing = true;
346 marketing = {
382 marketing = {
347 members = [
383 members = [
nixos/doc/manual/administration/declarative-containers.section.md+1−1
@@ -40,7 +40,7 @@ section for details on container networking.)
40To disable the container, just remove it from `configuration.nix` and
40To disable the container, just remove it from `configuration.nix` and
41run `nixos-rebuild
41run `nixos-rebuild
42 switch`. Note that this will not delete the root directory of the
42 switch`. Note that this will not delete the root directory of the
43−container in `/var/lib/containers`. Containers can be destroyed using
43+container in `/var/lib/nixos-containers`. Containers can be destroyed using
44the imperative method: `nixos-container destroy foo`.
44the imperative method: `nixos-container destroy foo`.
46Declarative containers can be started and stopped using the
46Declarative containers can be started and stopped using the
nixos/doc/manual/administration/imperative-containers.section.md+2−2
@@ -10,8 +10,8 @@ You create a container with identifier `foo` as follows:
10# nixos-container create foo
10# nixos-container create foo
13−This creates the container's root directory in `/var/lib/containers/foo`
13+This creates the container's root directory in `/var/lib/nixos-containers/foo`
14−and a small configuration file in `/etc/containers/foo.conf`. It also
14+and a small configuration file in `/etc/nixos-containers/foo.conf`. It also
15builds the container's initial system configuration and stores it in
15builds the container's initial system configuration and stores it in
16`/nix/var/nix/profiles/per-container/foo/system`. You can modify the
16`/nix/var/nix/profiles/per-container/foo/system`. You can modify the
17initial configuration of the container on the command line. For
17initial configuration of the container on the command line. For
nixos/doc/manual/default.nix+4
@@ -14,6 +14,10 @@ with pkgs;
15 lib = pkgs.lib;
15 lib = pkgs.lib;
17+ docbook_xsl_ns = pkgs.docbook-xsl-ns.override {
18+ withManOptDedupPatch = true;
17 # We need to strip references to /nix/store/* from options,
21 # We need to strip references to /nix/store/* from options,
18 # including any `extraSources` if some modules came from elsewhere,
22 # including any `extraSources` if some modules came from elsewhere,
19 # or else the build will fail.
23 # or else the build will fail.
nixos/doc/manual/development/development.xml−1
@@ -14,7 +14,6 @@
14 <xi:include href="../from_md/development/building-parts.chapter.xml" />
14 <xi:include href="../from_md/development/building-parts.chapter.xml" />
15 <xi:include href="../from_md/development/what-happens-during-a-system-switch.chapter.xml" />
15 <xi:include href="../from_md/development/what-happens-during-a-system-switch.chapter.xml" />
16 <xi:include href="../from_md/development/writing-documentation.chapter.xml" />
16 <xi:include href="../from_md/development/writing-documentation.chapter.xml" />
17− <xi:include href="../from_md/development/building-nixos.chapter.xml" />
18 <xi:include href="../from_md/development/nixos-tests.chapter.xml" />
17 <xi:include href="../from_md/development/nixos-tests.chapter.xml" />
19 <xi:include href="../from_md/development/testing-installer.chapter.xml" />
18 <xi:include href="../from_md/development/testing-installer.chapter.xml" />
nixos/doc/manual/development/writing-nixos-tests.section.md+25−14
@@ -159,34 +159,42 @@ The following methods are available on machine objects:
161: Execute a shell command, returning a list `(status, stdout)`.
161: Execute a shell command, returning a list `(status, stdout)`.
163+ Commands are run with `set -euo pipefail` set:
165+ - If several commands are separated by `;` and one fails, the
166+ command as a whole will fail.
168+ - For pipelines, the last non-zero exit status will be returned
169+ (if there is one; otherwise zero will be returned).
171+ - Dereferencing unset variables fails the command.
173+ - It will wait for stdout to be closed.
162 If the command detaches, it must close stdout, as `execute` will wait
175 If the command detaches, it must close stdout, as `execute` will wait
163 for this to consume all output reliably. This can be achieved by
176 for this to consume all output reliably. This can be achieved by
164 redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
177 redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
165 a file. Examples of detaching commands are `sleep 365d &`, where the
178 a file. Examples of detaching commands are `sleep 365d &`, where the
166 shell forks a new process that can write to stdout and `xclip -i`, where
179 shell forks a new process that can write to stdout and `xclip -i`, where
167 the `xclip` command itself forks without closing stdout.
180 the `xclip` command itself forks without closing stdout.
168 Takes an optional parameter `check_return` that defaults to `True`.
182 Takes an optional parameter `check_return` that defaults to `True`.
169 Setting this parameter to `False` will not check for the return code
183 Setting this parameter to `False` will not check for the return code
170 and return -1 instead. This can be used for commands that shut down
184 and return -1 instead. This can be used for commands that shut down
171 the VM and would therefore break the pipe that would be used for
185 the VM and would therefore break the pipe that would be used for
172 retrieving the return code.
186 retrieving the return code.
188+ A timeout for the command can be specified (in seconds) using the optional
189+ `timeout` parameter, e.g., `execute(cmd, timeout=10)` or
190+ `execute(cmd, timeout=None)`. The default is 900 seconds.
176: Execute a shell command, raising an exception if the exit status is
194: Execute a shell command, raising an exception if the exit status is
177− not zero, otherwise returning the standard output. Commands are run
195+ not zero, otherwise returning the standard output. Similar to `execute`,
178− with `set -euo pipefail` set:
196+ except that the timeout is `None` by default. See `execute` for details on
179−
197+ command execution.
180− - If several commands are separated by `;` and one fails, the
181− command as a whole will fail.
183− - For pipelines, the last non-zero exit status will be returned
184− (if there is one, zero will be returned otherwise).
186− - Dereferencing unset variables fail the command.
188− - It will wait for stdout to be closed. See `execute` for the
@@ -196,10 +204,13 @@ The following methods are available on machine objects:
196`wait_until_succeeds`
204`wait_until_succeeds`
198: Repeat a shell command with 1-second intervals until it succeeds.
206: Repeat a shell command with 1-second intervals until it succeeds.
207+ Has a default timeout of 900 seconds which can be modified, e.g.
208+ `wait_until_succeeds(cmd, timeout=10)`. See `execute` for details on
200`wait_until_fails`
211`wait_until_fails`
202−: Repeat a shell command with 1-second intervals until it fails.
213+: Like `wait_until_succeeds`, but repeating the command until it fails.
204`wait_for_unit`
215`wait_for_unit`
nixos/doc/manual/from_md/administration/declarative-containers.section.xml+2−2
@@ -48,8 +48,8 @@ containers.database = {
48 <literal>configuration.nix</literal> and run
48 <literal>configuration.nix</literal> and run
49 <literal>nixos-rebuild switch</literal>. Note that this will not
49 <literal>nixos-rebuild switch</literal>. Note that this will not
50 delete the root directory of the container in
50 delete the root directory of the container in
51− <literal>/var/lib/containers</literal>. Containers can be destroyed
51+ <literal>/var/lib/nixos-containers</literal>. Containers can be
52− using the imperative method:
52+ destroyed using the imperative method:
53 <literal>nixos-container destroy foo</literal>.
53 <literal>nixos-container destroy foo</literal>.
nixos/doc/manual/from_md/administration/imperative-containers.section.xml+3−2
@@ -14,8 +14,9 @@
14</programlisting>
14</programlisting>
16 This creates the container’s root directory in
16 This creates the container’s root directory in
17− <literal>/var/lib/containers/foo</literal> and a small configuration
17+ <literal>/var/lib/nixos-containers/foo</literal> and a small
18+ configuration file in
18− file in <literal>/etc/containers/foo.conf</literal>. It also builds
19+ <literal>/etc/nixos-containers/foo.conf</literal>. It also builds
19 the container’s initial system configuration and stores it in
20 the container’s initial system configuration and stores it in
20 <literal>/nix/var/nix/profiles/per-container/foo/system</literal>.
21 <literal>/nix/var/nix/profiles/per-container/foo/system</literal>.
21 You can modify the initial configuration of the container on the
22 You can modify the initial configuration of the container on the
nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+53−35
@@ -274,35 +274,9 @@ start_all()
274 <listitem>
274 <listitem>
276 Execute a shell command, returning a list
276 Execute a shell command, returning a list
277− <literal>(status, stdout)</literal>. If the command
277+ <literal>(status, stdout)</literal>.
278− detaches, it must close stdout, as
279− <literal>execute</literal> will wait for this to consume all
280− output reliably. This can be achieved by redirecting stdout
281− to stderr <literal>>&2</literal>, to
282− <literal>/dev/console</literal>,
283− <literal>/dev/null</literal> or a file. Examples of
284− detaching commands are <literal>sleep 365d &</literal>,
285− where the shell forks a new process that can write to stdout
286− and <literal>xclip -i</literal>, where the
287− <literal>xclip</literal> command itself forks without
288− closing stdout. Takes an optional parameter
289− <literal>check_return</literal> that defaults to
290− <literal>True</literal>. Setting this parameter to
291− <literal>False</literal> will not check for the return code
292− and return -1 instead. This can be used for commands that
293− shut down the VM and would therefore break the pipe that
294− would be used for retrieving the return code.
300− <literal>succeed</literal>
304− Execute a shell command, raising an exception if the exit
305− status is not zero, otherwise returning the standard output.
306 Commands are run with <literal>set -euo pipefail</literal>
280 Commands are run with <literal>set -euo pipefail</literal>
@@ -317,22 +291,63 @@ start_all()
317 <listitem>
291 <listitem>
319 For pipelines, the last non-zero exit status will be
293 For pipelines, the last non-zero exit status will be
320− returned (if there is one, zero will be returned
294+ returned (if there is one; otherwise zero will be
321− otherwise).
295+ returned).
323 </listitem>
297 </listitem>
324 <listitem>
298 <listitem>
326− Dereferencing unset variables fail the command.
300+ Dereferencing unset variables fails the command.
328 </listitem>
302 </listitem>
329 <listitem>
303 <listitem>
331− It will wait for stdout to be closed. See
305+ It will wait for stdout to be closed.
332− <literal>execute</literal> for the implications.
334 </listitem>
307 </listitem>
335 </itemizedlist>
308 </itemizedlist>
310+ If the command detaches, it must close stdout, as
311+ <literal>execute</literal> will wait for this to consume all
312+ output reliably. This can be achieved by redirecting stdout
313+ to stderr <literal>>&2</literal>, to
314+ <literal>/dev/console</literal>,
315+ <literal>/dev/null</literal> or a file. Examples of
316+ detaching commands are <literal>sleep 365d &</literal>,
317+ where the shell forks a new process that can write to stdout
318+ and <literal>xclip -i</literal>, where the
319+ <literal>xclip</literal> command itself forks without
323+ Takes an optional parameter <literal>check_return</literal>
324+ that defaults to <literal>True</literal>. Setting this
325+ parameter to <literal>False</literal> will not check for the
326+ return code and return -1 instead. This can be used for
327+ commands that shut down the VM and would therefore break the
328+ pipe that would be used for retrieving the return code.
331+ A timeout for the command can be specified (in seconds)
332+ using the optional <literal>timeout</literal> parameter,
333+ e.g., <literal>execute(cmd, timeout=10)</literal> or
334+ <literal>execute(cmd, timeout=None)</literal>. The default
341+ <literal>succeed</literal>
345+ Execute a shell command, raising an exception if the exit
346+ status is not zero, otherwise returning the standard output.
347+ Similar to <literal>execute</literal>, except that the
348+ timeout is <literal>None</literal> by default. See
349+ <literal>execute</literal> for details on command execution.
336 </listitem>
351 </listitem>
337 </varlistentry>
352 </varlistentry>
338 <varlistentry>
353 <varlistentry>
@@ -353,7 +368,10 @@ start_all()
353 <listitem>
368 <listitem>
355 Repeat a shell command with 1-second intervals until it
370 Repeat a shell command with 1-second intervals until it
356− succeeds.
371+ succeeds. Has a default timeout of 900 seconds which can be
373+ <literal>wait_until_succeeds(cmd, timeout=10)</literal>. See
374+ <literal>execute</literal> for details on command execution.
358 </listitem>
376 </listitem>
359 </varlistentry>
377 </varlistentry>
@@ -363,8 +381,8 @@ start_all()
364 <listitem>
382 <listitem>
384+ Like <literal>wait_until_succeeds</literal>, but repeating
366− Repeat a shell command with 1-second intervals until it
385+ the command until it fails.
369 </listitem>
387 </listitem>
370 </varlistentry>
388 </varlistentry>
nixos/doc/manual/from_md/development/building-nixos.chapter.xml → nixos/doc/manual/from_md/installation/building-nixos.chapter.xmlrenamed+34
@@ -43,6 +43,40 @@ $ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd
44 <programlisting>
44 <programlisting>
45# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
45# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
48+ <section xml:id="sec-building-image-drivers">
49+ <title>Additional drivers or firmware</title>
51+ If you need additional (non-distributable) drivers or firmware in
52+ the installer, you might want to extend these configurations.
55+ For example, to build the GNOME graphical installer ISO, but with
56+ support for certain WiFi adapters present in some MacBooks, you
57+ can create the following file at
58+ <literal>modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix</literal>:
60+ <programlisting language="bash">
64+ imports = [ ./installation-cd-graphical-gnome.nix ];
66+ boot.initrd.kernelModules = [ "wl" ];
68+ boot.kernelModules = [ "kvm-intel" "wl" ];
69+ boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ];
73+ Then build it like in the example above:
76+$ git clone https://github.com/NixOS/nixpkgs.git
78+$ export NIXPKGS_ALLOW_UNFREE=1
79+$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix default.nix
46</programlisting>
80</programlisting>
47 </section>
81 </section>
48 <section xml:id="sec-building-image-tech-notes">
82 <section xml:id="sec-building-image-tech-notes">
nixos/doc/manual/from_md/installation/installing.chapter.xml+7−7
@@ -411,6 +411,13 @@ OK
411 specify on which disk the GRUB boot loader is to be
411 specify on which disk the GRUB boot loader is to be
412 installed. Without it, NixOS cannot boot.
412 installed. Without it, NixOS cannot boot.
415+ If there are other operating systems running on the
416+ machine before installing NixOS, the
417+ <xref linkend="opt-boot.loader.grub.useOSProber" />
418+ option can be set to <literal>true</literal> to
419+ automatically add them to the grub menu.
414 </listitem>
421 </listitem>
415 </varlistentry>
422 </varlistentry>
416 <varlistentry>
423 <varlistentry>
@@ -436,13 +443,6 @@ OK
436 </listitem>
443 </listitem>
437 </varlistentry>
444 </varlistentry>
438 </variablelist>
445 </variablelist>
440− If there are other operating systems running on the machine
441− before installing NixOS, the
442− <xref linkend="opt-boot.loader.grub.useOSProber" /> option can
443− be set to <literal>true</literal> to automatically add them to
447 If you need to configure networking for your machine the
447 If you need to configure networking for your machine the
448 configuration options are described in
448 configuration options are described in
nixos/doc/manual/from_md/release-notes/rl-1803.section.xml+8
@@ -866,6 +866,14 @@
868 </listitem>
868 </listitem>
871+ The vim/kakoune plugin updater now reads from a CSV file:
873+ <literal>pkgs/applications/editors/vim/plugins/vim-plugin-names</literal>
874+ out to see the new format
869 </itemizedlist>
877 </itemizedlist>
870 </section>
878 </section>
871</section>
879</section>
nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+643−4
@@ -43,6 +43,33 @@
45 </listitem>
45 </listitem>
48+ <literal>stdenv.mkDerivation</literal> now supports a
49+ self-referencing <literal>finalAttrs:</literal> parameter
50+ containing the final <literal>mkDerivation</literal> arguments
51+ including overrides. <literal>drv.overrideAttrs</literal> now
52+ supports two parameters
53+ <literal>finalAttrs: previousAttrs:</literal>. This allows
54+ packaging configuration to be overridden in a consistent
55+ manner by providing an alternative to
56+ <literal>rec {}</literal> syntax.
59+ Additionally, <literal>passthru</literal> can now reference
60+ <literal>finalAttrs.finalPackage</literal> containing the
61+ final package, including attributes such as the output paths
62+ and <literal>overrideAttrs</literal>.
65+ New language integrations can be simplified by overriding a
66+ <quote>prototype</quote> package containing the
67+ language-specific logic. This removes the need for a extra
68+ layer of overriding for the <quote>generic builder</quote>
69+ arguments, thus removing a usability problem and source of
46 <listitem>
73 <listitem>
48 PHP 8.1 is now available
75 PHP 8.1 is now available
@@ -68,6 +95,34 @@
68 granular distinction between reloads and restarts.
95 granular distinction between reloads and restarts.
70 </listitem>
97 </listitem>
100+ Systemd has been upgraded to the version 250.
105+ Pulseaudio has been upgraded to version 15.0 and now
107+ <link xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/#supportforldacandaptxbluetoothcodecsplussbcxqsbcwithhigher-qualityparameters">supports
108+ additional Bluetooth audio codecs</link> like aptX or LDAC,
109+ with codec switching support being available in
110+ <literal>pavucontrol</literal>. This feature is disabled by
111+ default but can be enabled by using
112+ <literal>hardware.pulseaudio.package = pkgs.pulseaudioFull;</literal>.
113+ Existing 3rd party modules that provided similar
114+ functionality, like <literal>pulseaudio-modules-bt</literal>
115+ or <literal>pulseaudio-hsphfpd</literal> are deprecated and
122+ <link xlink:href="https://nixos.org/manual/nixpkgs/stable/#sec-postgresqlTestHook"><literal>postgresqlTestHook</literal></link>
123+ runs a PostgreSQL server for the duration of package checks.
71 <listitem>
126 <listitem>
73 <link xlink:href="https://kops.sigs.k8s.io"><literal>kops</literal></link>
128 <link xlink:href="https://kops.sigs.k8s.io"><literal>kops</literal></link>
@@ -96,6 +151,14 @@
98 </listitem>
153 </listitem>
156+ The GNOME and Plasma installation CDs now use
157+ <literal>pkgs.calamares</literal> and
158+ <literal>pkgs.calamares-nixos-extensions</literal> to allow
159+ users to easily install and set up NixOS with a GUI.
99 </itemizedlist>
162 </itemizedlist>
100 </section>
163 </section>
101 <section xml:id="sec-release-22.05-new-services">
164 <section xml:id="sec-release-22.05-new-services">
@@ -125,6 +188,13 @@
125 <link xlink:href="option.html#opt-services.matrix-conduit.enable">services.matrix-conduit</link>.
188 <link xlink:href="option.html#opt-services.matrix-conduit.enable">services.matrix-conduit</link>.
127 </listitem>
190 </listitem>
193+ <link xlink:href="https://github.com/vvilhonen/nethoscope">nethoscope</link>,
194+ listen to your network traffic. Available as
195+ <link linkend="opt-programs.nethoscope.enable">programs.nethoscope</link>.
128 <listitem>
198 <listitem>
130 <link xlink:href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html">filebeat</link>,
200 <link xlink:href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html">filebeat</link>,
@@ -214,6 +284,15 @@
214 to be able to access the device.
284 to be able to access the device.
216 </listitem>
286 </listitem>
289+ <link xlink:href="https://github.com/mozilla-mobile/mozilla-vpn-client">mozillavpn</link>,
291+ <link xlink:href="https://vpn.mozilla.org/">Mozilla VPN</link>
292+ service. Available as
293+ <link xlink:href="options.html#opt-services.mozillavpn">services.mozillavpn</link>.
217 <listitem>
296 <listitem>
219 <link xlink:href="https://github.com/mgumz/mtr-exporter">mtr-exporter</link>,
298 <link xlink:href="https://github.com/mgumz/mtr-exporter">mtr-exporter</link>,
@@ -347,6 +426,14 @@
347 <link xlink:href="options.html#opt-services.headscale.enable">services.headscale</link>
426 <link xlink:href="options.html#opt-services.headscale.enable">services.headscale</link>
349 </listitem>
428 </listitem>
431+ <link xlink:href="https://github.com/lakinduakash/linux-wifi-hotspot">create_ap</link>,
432+ a module for creating wifi hotspots using the program
433+ linux-wifi-hotspot. Available as
434+ <link xlink:href="options.html#opt-services.create_ap.enable">services.create_ap</link>.
350 <listitem>
437 <listitem>
352 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
439 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
@@ -360,6 +447,14 @@
360 cluster resource manager
447 cluster resource manager
362 </listitem>
449 </listitem>
452+ <link xlink:href="https://nifi.apache.org">nifi</link>, an
453+ easy to use, powerful, and reliable system to process and
454+ distribute data. Available as
455+ <link xlink:href="options.html#opt-services.nifi.enable">services.nifi</link>.
363 </itemizedlist>
458 </itemizedlist>
364 </section>
459 </section>
365 <section xml:id="sec-release-22.05-incompatibilities">
460 <section xml:id="sec-release-22.05-incompatibilities">
@@ -427,6 +522,85 @@
427 new versions will release.
522 new versions will release.
429 </listitem>
524 </listitem>
527+ The configuration and state directories used by
528+ <literal>nixos-containers</literal> have been moved from
529+ <literal>/etc/containers</literal> and
530+ <literal>/var/lib/containers</literal> to
531+ <literal>/etc/nixos-containers</literal> and
532+ <literal>/var/lib/nixos-containers</literal>.
535+ If you are changing <literal>system.stateVersion</literal> to
536+ <literal>"22.05"</literal> manually on an existing
537+ system you are responsible for migrating these directories
541+ This is to improve compatibility with
542+ <literal>libcontainer</literal> based software such as Podman
543+ and Skopeo which assumes they have ownership over
544+ <literal>/etc/containers</literal>.
549+ For new installations
550+ <literal>virtualisation.oci-containers.backend</literal> is
551+ now set to <literal>podman</literal> by default. If you still
552+ want to use Docker on systems where
553+ <literal>system.stateVersion</literal> is set to to
554+ <literal>"22.05"</literal> set
555+ <literal>virtualisation.oci-containers.backend = "docker";</literal>.Old
556+ systems with older <literal>stateVersion</literal>s stay with
557+ <quote>docker</quote>.
562+ <literal>security.klogd</literal> was removed. Logging of
563+ kernel messages is handled by systemd since Linux 3.5.
568+ <literal>pkgs.ssmtp</literal> has been dropped due to the
569+ program being unmaintained. <literal>pkgs.msmtp</literal> can
570+ be used instead as a substitute <literal>sendmail</literal>
571+ implementation. The corresponding options
572+ <literal>services.ssmtp.*</literal> have been removed as well.
573+ <literal>programs.msmtp.*</literal> can be used instead for an
574+ equivalent setup. For example:
576+ <programlisting language="bash">
578+ # Original ssmtp configuration:
583+ hostName = "smtp.example:587";
584+ authUser = "someone";
585+ authPassFile = "/secrets/password.txt";
588+ # Equivalent msmtp configuration:
591+ accounts.default = {
593+ tls_starttls = true;
595+ host = "smtp.example";
597+ user = "someone";
598+ passwordeval = "cat /secrets/password.txt";
430 <listitem>
604 <listitem>
432 <literal>services.kubernetes.addons.dashboard</literal> was
606 <literal>services.kubernetes.addons.dashboard</literal> was
@@ -444,6 +618,53 @@
444 relying on the insecure behaviour before upgrading.
618 relying on the insecure behaviour before upgrading.
446 </listitem>
620 </listitem>
623+ In the PowerDNS Recursor module
624+ (<literal>services.pdns-recursor</literal>), default values of
625+ several IP address-related NixOS options have been updated to
626+ match the default upstream behavior. In particular, Recursor
629+ <itemizedlist spacing="compact">
632+ listen on (and allows connections from) both IPv4 and IPv6
634+ (<literal>services.pdns-recursor.dns.address</literal>,
635+ <literal>services.pdns-recursor.dns.allowFrom</literal>);
640+ allow only local connections to the REST API server
641+ (<literal>services.pdns-recursor.api.allowFrom</literal>).
648+ In the ncdns module, the default value of
649+ <literal>services.ncdns.address</literal> has been changed to
650+ the IPv6 loopback address (<literal>::1</literal>).
655+ <literal>openssh</literal> has been update to 8.9p1, changing
656+ the FIDO security key middleware interface.
661+ <literal>git</literal> no longer hardcodes the path to
662+ openssh’ ssh binary to reduce the amount of rebuilds. If you
663+ are using git with ssh remotes and do not have a ssh binary in
664+ your enviroment consider adding <literal>openssh</literal> to
665+ it or switching to <literal>gitFull</literal>.
447 <listitem>
668 <listitem>
449 <literal>services.k3s.enable</literal> no longer implies
670 <literal>services.k3s.enable</literal> no longer implies
@@ -476,6 +697,13 @@
477</programlisting>
698</programlisting>
478 </listitem>
699 </listitem>
702+ <literal>services.prometheus.alertManagerTimeout</literal> has
703+ been removed as it has been deprecated upstream and has no
479 <listitem>
707 <listitem>
481 The DHCP server (<literal>services.dhcpd4</literal>,
709 The DHCP server (<literal>services.dhcpd4</literal>,
@@ -509,6 +737,24 @@
511 </listitem>
739 </listitem>
742+ <literal>hbase</literal> version 0.98.24 has been removed. The
743+ package now defaults to version 2.4.11. Versions 1.7.1 and
744+ 3.0.0-alpha-2 are also available.
749+ <literal>services.paperless-ng</literal> was renamed to
750+ <literal>services.paperless</literal>. Accordingly, the
751+ <literal>paperless-ng-manage</literal> script (located in
752+ <literal>dataDir</literal>) was renamed to
753+ <literal>paperless-manage</literal>.
754+ <literal>services.paperless</literal> now uses
755+ <literal>paperless-ngx</literal>.
512 <listitem>
758 <listitem>
514 The <literal>matrix-synapse</literal> service
760 The <literal>matrix-synapse</literal> service
@@ -631,6 +877,136 @@
631 to the new location if the <literal>stateVersion</literal> is
877 to the new location if the <literal>stateVersion</literal> is
881+ As of Synapse 1.58.0, the old groups/communities feature has
882+ been disabled by default. It will be completely removed with
888+ The Keycloak package (<literal>pkgs.keycloak</literal>) has
889+ been switched from the Wildfly version, which will soon be
890+ deprecated, to the Quarkus based version. The Keycloak service
891+ (<literal>services.keycloak</literal>) has been updated to
892+ accommodate the change and now differs from the previous
893+ version in a few ways:
898+ <literal>services.keycloak.extraConfig</literal> has been
899+ removed in favor of the new
900+ <link xlink:href="https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md">settings-style</link>
901+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>
902+ option. The available options correspond directly to
903+ parameters in <literal>conf/keycloak.conf</literal>. Some
904+ of the most important parameters are documented as
905+ suboptions, the rest can be found in the
906+ <link xlink:href="https://www.keycloak.org/server/all-config">All
907+ configuration section of the Keycloak Server Installation
908+ and Configuration Guide</link>. While the new
909+ configuration is much simpler and cleaner than the old
910+ JBoss CLI one, this unfortunately mean that there’s no
911+ straightforward way to convert an old configuration to the
912+ new format and some settings may not even be available
918+ <literal>services.keycloak.frontendUrl</literal> was
919+ removed and the frontend URL is now configured through the
920+ <literal>hostname</literal> family of settings in
921+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>
923+ <link xlink:href="https://www.keycloak.org/server/hostname">Hostname
924+ section of the Keycloak Server Installation and
925+ Configuration Guide</link> for more details. Additionally,
926+ <literal>/auth</literal> was removed from the default
927+ context path and needs to be added back in
928+ <link linkend="opt-services.keycloak.settings.http-relative-path"><literal>services.keycloak.settings.http-relative-path</literal></link>
929+ if you want to keep compatibility with your current
935+ <literal>services.keycloak.bindAddress</literal>,
936+ <literal>services.keycloak.forceBackendUrlToFrontendUrl</literal>,
937+ <literal>services.keycloak.httpPort</literal> and
938+ <literal>services.keycloak.httpsPort</literal> have been
939+ removed in favor of their equivalent options in
940+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>.
941+ <literal>httpPort</literal> and
942+ <literal>httpsPort</literal> have additionally had their
943+ types changed from <literal>str</literal> to
944+ <literal>port</literal>.
947+ The new names are as follows:
949+ <itemizedlist spacing="compact">
952+ <literal>bindAddress</literal>:
953+ <link linkend="opt-services.keycloak.settings.http-host"><literal>services.keycloak.settings.http-host</literal></link>
958+ <literal>forceBackendUrlToFrontendUrl</literal>:
959+ <link linkend="opt-services.keycloak.settings.hostname-strict-backchannel"><literal>services.keycloak.settings.hostname-strict-backchannel</literal></link>
964+ <literal>httpPort</literal>:
965+ <link linkend="opt-services.keycloak.settings.http-port"><literal>services.keycloak.settings.http-port</literal></link>
970+ <literal>httpsPort</literal>:
971+ <link linkend="opt-services.keycloak.settings.https-port"><literal>services.keycloak.settings.https-port</literal></link>
978+ For example, when using a reverse proxy the migration could
984+ <programlisting language="bash">
985+ services.keycloak = {
987+ httpPort = "8080";
988+ frontendUrl = "https://keycloak.example.com/auth";
989+ database.passwordFile = "/run/keys/db_password";
991+ "subsystem=undertow"."server=default-server"."http-listener=default".proxy-address-forwarding = true;
998+ <programlisting language="bash">
999+ services.keycloak = {
1003+ hostname = "keycloak.example.com";
1004+ http-relative-path = "/auth";
1005+ proxy = "edge";
1007+ database.passwordFile = "/run/keys/db_password";
634 </listitem>
1010 </listitem>
635 <listitem>
1011 <listitem>
@@ -766,6 +1142,14 @@
766 <literal>admin</literal> and <literal>password</literal>.
1142 <literal>admin</literal> and <literal>password</literal>.
768 </listitem>
1144 </listitem>
1147+ The <literal>taskserver</literal> module no longer implicitly
1148+ opens ports in the firewall configuration. This is now
1149+ controlled through the option
1150+ <literal>services.taskserver.openFirewall</literal>.
769 <listitem>
1153 <listitem>
771 The <literal>autorestic</literal> package has been upgraded
1155 The <literal>autorestic</literal> package has been upgraded
@@ -968,6 +1352,14 @@
968 <literal>systemd.nspawn.<name>.execConfig.PrivateUsers = false</literal>
1352 <literal>systemd.nspawn.<name>.execConfig.PrivateUsers = false</literal>
970 </listitem>
1354 </listitem>
1357+ <literal>systemd-shutdown</literal> is now properly linked on
1358+ shutdown to unmount all filesystems and device mapper devices
1359+ cleanly. This can be disabled using
1360+ <literal>systemd.shutdownRamfs.enable</literal>.
971 <listitem>
1363 <listitem>
973 The Tor SOCKS proxy is now actually disabled if
1365 The Tor SOCKS proxy is now actually disabled if
@@ -978,6 +1370,15 @@
978 <literal>true</literal>.
1370 <literal>true</literal>.
980 </listitem>
1372 </listitem>
1375+ <literal>services.github-runner</literal> has been hardened.
1376+ Notably address families and system calls have been
1377+ restricted, which may adversely affect some kinds of testing,
1378+ e.g. using <literal>AF_BLUETOOTH</literal> to test bluetooth
981 <listitem>
1382 <listitem>
983 The terraform 0.12 compatibility has been removed and the
1384 The terraform 0.12 compatibility has been removed and the
@@ -1022,6 +1423,16 @@
1022 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
1423 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
1024 </listitem>
1425 </listitem>
1428+ <literal>services.zookeeper</literal> has a new option
1429+ <literal>jre</literal> for specifying the JRE to start
1430+ zookeeper with. It defaults to the JRE that
1431+ <literal>pkgs.zookeeper</literal> was wrapped with, instead of
1432+ <literal>pkgs.jre</literal>. This changes the JRE to
1433+ <literal>pkgs.jdk11_headless</literal> by default.
1025 <listitem>
1436 <listitem>
1027 <literal>pkgs.pgadmin</literal> now refers to
1438 <literal>pkgs.pgadmin</literal> now refers to
@@ -1268,6 +1679,33 @@
1268 example.
1679 example.
1270 </listitem>
1681 </listitem>
1684+ Existing <literal>resholve*</literal> functions have been
1685+ renamed and nested under <literal>pkgs.resholve</literal>.
1688+ <itemizedlist spacing="compact">
1691+ <literal>resholvePackage</literal> ->
1692+ <literal>resholve.mkDerivation</literal>
1697+ <literal>resholveScript</literal> ->
1698+ <literal>resholve.writeScript</literal>
1703+ <literal>resholveScriptBin</literal> ->
1704+ <literal>resholve.writeScriptBin</literal>
1271 <listitem>
1709 <listitem>
1273 <literal>pkgs.cosmopolitan</literal> no longer provides the
1711 <literal>pkgs.cosmopolitan</literal> no longer provides the
@@ -1275,6 +1713,17 @@
1275 <literal>pkgs.cosmoc</literal>.
1713 <literal>pkgs.cosmoc</literal>.
1277 </listitem>
1715 </listitem>
1718+ <literal>pkgs.graalvmXX-ce</literal> packages no longer
1719+ provide support for Python/Ruby/WASM, instead focusing only in
1720+ Java and Native Image Support. If you need to add support
1721+ back, please see the
1722+ <literal>pkgs.graalvmCEPackages.mkGraal</literal> function to
1723+ create your own customized version of GraalVM with support for
1278 </itemizedlist>
1727 </itemizedlist>
1279 </section>
1728 </section>
1280 <section xml:id="sec-release-22.05-notable-changes">
1729 <section xml:id="sec-release-22.05-notable-changes">
@@ -1388,6 +1837,14 @@
1388 </listitem>
1837 </listitem>
1389 </itemizedlist>
1838 </itemizedlist>
1390 </listitem>
1839 </listitem>
1842+ The auto-upgrade service now accepts persistent (default:
1843+ true) parameter. By default auto-upgrade will now run
1844+ immediately if it would have been triggered at least once
1845+ during the time when the timer was inactive.
1391 <listitem>
1848 <listitem>
1393 If you are using Wayland you can choose to use the Ozone
1850 If you are using Wayland you can choose to use the Ozone
@@ -1454,6 +1911,15 @@
1454 takes a list of strings instead of a string.
1911 takes a list of strings instead of a string.
1456 </listitem>
1913 </listitem>
1916+ The <literal>asterisk</literal> and
1917+ <literal>asterisk-stable</literal> packages were switched from
1918+ <literal>asterisk_18</literal> to the newly-packaged
1919+ <literal>asterisk_19</literal>. Asterisk 13 and 17 have been
1920+ removed as they have reached their end of life.
1457 <listitem>
1923 <listitem>
1459 The <literal>services.unifi.openPorts</literal> option default
1925 The <literal>services.unifi.openPorts</literal> option default
@@ -1512,9 +1978,11 @@
1513 <link linkend="opt-programs.ssh.knownHosts">programs.ssh.knownHosts</link>
1979 <link linkend="opt-programs.ssh.knownHosts">programs.ssh.knownHosts</link>
1514 has gained an <literal>extraHostNames</literal> option to
1980 has gained an <literal>extraHostNames</literal> option to
1515− replace <literal>hostNames</literal>.
1981+ augment <literal>hostNames</literal>. It is now possible to
1516− <literal>hostNames</literal> is deprecated, but still
1982+ use the attribute name of a <literal>knownHosts</literal>
1517− available for now.
1983+ entry as the primary host name and specify secondary host
1984+ names using <literal>extraHostNames</literal> without having
1985+ to duplicate the primary host name.
1519 </listitem>
1987 </listitem>
1520 <listitem>
1988 <listitem>
@@ -1525,6 +1993,36 @@
1525 configuration.
1993 configuration.
1527 </listitem>
1995 </listitem>
1999+ <link linkend="opt-services.xserver.desktopManager.runXdgAutostartIfNone">services.xserver.desktopManager.runXdgAutostartIfNone</link>
2000+ was added in order to automatically run XDG autostart files
2001+ for sessions without a desktop manager. This replaces helpers
2002+ like the <literal>dex</literal> package.
2008+ <link linkend="opt-i18n.inputMethod.enabled">i18n.inputMethod.enabled</link>
2009+ to <literal>fcitx5</literal>, it no longer creates
2010+ corresponding systemd user services. It now relies on XDG
2011+ autostart files to start and work properly in your desktop
2012+ sessions. If you are using only a window manager without a
2013+ desktop manager, you need to enable
2014+ <literal>services.xserver.desktopManager.runXdgAutostartIfNone</literal>
2015+ or using the <literal>dex</literal> package to make
2016+ <literal>fcitx5</literal> work.
2021+ A new module was added for the Envoy reverse proxy, providing
2022+ the options <literal>services.envoy.enable</literal> and
2023+ <literal>services.envoy.settings</literal>.
1528 <listitem>
2026 <listitem>
1530 The option <literal>services.duplicati.dataDir</literal> has
2028 The option <literal>services.duplicati.dataDir</literal> has
@@ -1549,10 +2047,51 @@
1549 </listitem>
2047 </listitem>
1550 <listitem>
2048 <listitem>
1552− ORY Kratos was updated to version 0.8.3-alpha.1.pre.0, which
2050+ ORY Kratos was updated to version 0.9.0-alpha.3, which
1553 introduces some breaking changes:
2051 introduces some breaking changes:
1555 <itemizedlist spacing="compact">
2053 <itemizedlist spacing="compact">
2056+ All endpoints at the Admin API are now exposed at
2057+ <literal>/admin/</literal>. For example, endpoint
2058+ <literal>https://kratos:4434/identities</literal> is now
2060+ <literal>https://kratos:4434/admin/identities</literal>
2066+ <literal>selfservice.whitelisted_return_urls</literal> has
2067+ been renamed to <literal>allowed_return_urls</literal>
2072+ The <literal>password_identifier</literal> form field of
2073+ the password login strategy has been renamed to
2074+ <literal>identifier</literal> to make compatibility with
2075+ passwordless flows possible.
2080+ Instead of having a global
2081+ <literal>default_schema_url</literal> which developers
2082+ used to update their schema, you now need to define the
2083+ <literal>default_schema_id</literal> which must reference
2084+ schema ID in your config.
2089+ Calling <literal>/self-service/recovery</literal> without
2090+ flow ID or with an invalid flow ID while authenticated
2091+ will now respond with an error instead of redirecting to
1556 <listitem>
2095 <listitem>
1558 If you are relying on the SQLite images, update your
2097 If you are relying on the SQLite images, update your
@@ -1589,6 +2128,18 @@
1589 Notes for v0.8.2-alpha-1</link>
2128 Notes for v0.8.2-alpha-1</link>
1591 </listitem>
2130 </listitem>
2133+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.1">Release
2134+ Notes for v0.9.0-alpha-1</link>
2139+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.3">Release
2140+ Notes for v0.9.0-alpha-3</link>
1592 </itemizedlist>
2143 </itemizedlist>
1593 </listitem>
2144 </listitem>
1594 </itemizedlist>
2145 </itemizedlist>
@@ -1602,6 +2153,13 @@
1602 <literal>true</literal>.
2153 <literal>true</literal>.
1604 </listitem>
2155 </listitem>
2158+ A module for declarative configuration of openconnect VPN
2159+ profiles was added under
2160+ <literal>networking.openconnect</literal>.
1605 <listitem>
2163 <listitem>
1607 The <literal>element-desktop</literal> package now has an
2165 The <literal>element-desktop</literal> package now has an
@@ -1700,6 +2258,21 @@
1700 should now be used instead.
2258 should now be used instead.
1702 </listitem>
2260 </listitem>
2263+ <literal>security.pam.ussh</literal> has been added, which
2264+ allows authorizing PAM sessions based on SSH
2265+ <emphasis>certificates</emphasis> held within an SSH agent,
2267+ <link xlink:href="https://github.com/uber/pam-ussh">pam-ussh</link>.
2272+ The <literal>vscode-extensions.ionide.ionide-fsharp</literal>
2273+ package has been updated to 6.0.0 and now requires .NET 6.0.
1703 <listitem>
2276 <listitem>
1705 The <literal>zrepl</literal> package has been updated from
2278 The <literal>zrepl</literal> package has been updated from
@@ -1725,6 +2298,24 @@
1725 </listitem>
2298 </listitem>
1726 </itemizedlist>
2299 </itemizedlist>
1727 </listitem>
2300 </listitem>
2303+ The <literal>polybar</literal> package has been updated from
2304+ 3.5.7 to 3.6.2. See
2305+ <link xlink:href="https://github.com/polybar/polybar/releases/tag/3.6.0">the
2306+ changelog</link> for more details.
2308+ <itemizedlist spacing="compact">
2311+ Breaking changes include changes to escaping rules in
2312+ configuration values, changes in behavior when
2313+ encountering invalid tag names, and changes to
2314+ inter-process-messaging (IPC).
1728 <listitem>
2319 <listitem>
1730 Renamed option
2321 Renamed option
@@ -1780,6 +2371,27 @@
1780 desktop environments as needed.
2371 desktop environments as needed.
1782 </listitem>
2373 </listitem>
2376+ xfsprogs was update to version 5.15, which enables inobtcount
2377+ and bigtime by default on filesystem creation. Support for
2378+ these features was added in kernel 5.10 and deemed stable in
2379+ kernel 5.15. If you want to be able to mount XFS filesystems
2380+ created with this release of xfsprogs on kernel releases older
2381+ than 5.10, you need to format them with
2382+ <literal>mkfs.xfs -m bigtime=0 -m inobtcount=0</literal>.
2387+ <literal>services.xserver.desktopManager.xfce</literal> now
2388+ includes Xfce’s screen locker,
2389+ <literal>xfce4-screensaver</literal> that is enabled by
2390+ default. You can disable it by setting
2391+ <literal>false</literal> to
2392+ <link linkend="opt-services.xserver.desktopManager.xfce.enableScreensaver">services.xserver.desktopManager.xfce.enableScreensaver</link>.
1783 <listitem>
2395 <listitem>
1785 The <literal>hadoop</literal> package has added support for
2397 The <literal>hadoop</literal> package has added support for
@@ -1795,6 +2407,24 @@
1795 (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/158992">#158992</link>).
2407 (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/158992">#158992</link>).
1797 </listitem>
2409 </listitem>
2412+ The <literal>nss</literal> package was split into
2413+ <literal>nss_esr</literal> and <literal>nss_latest</literal>,
2414+ with <literal>nss</literal> being an alias for
2415+ <literal>nss_esr</literal>. This was done to ease maintenance
2416+ of <literal>nss</literal> and dependent high-profile packages
2417+ like <literal>firefox</literal>.
2422+ The Nextcloud module now supports to create a Mysql database
2424+ <literal>services.nextcloud.database.createLocally</literal>
1798 <listitem>
2428 <listitem>
1800 The <literal>spark3</literal> package has been updated from
2430 The <literal>spark3</literal> package has been updated from
@@ -1826,6 +2456,15 @@
1826 generating host-global NNCP configuration.
2456 generating host-global NNCP configuration.
1828 </listitem>
2458 </listitem>
2461+ The option <literal>services.snapserver.openFirewall</literal>
2462+ will no longer default to <literal>true</literal> starting
2463+ with NixOS 22.11. Enable it explicitly if you need to control
2464+ Snapserver remotely or connect streamig clients from other
1829 </itemizedlist>
2468 </itemizedlist>
1830 </section>
2469 </section>
1831</section>
2470</section>
nixos/doc/manual/development/building-nixos.chapter.md → nixos/doc/manual/installation/building-nixos.chapter.mdrenamed+31
@@ -30,6 +30,37 @@ To check the content of an ISO image, mount it like so:
30# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
30# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
33+## Additional drivers or firmware {#sec-building-image-drivers}
35+If you need additional (non-distributable) drivers or firmware in the
36+installer, you might want to extend these configurations.
38+For example, to build the GNOME graphical installer ISO, but with support for
39+certain WiFi adapters present in some MacBooks, you can create the following
40+file at `modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix`:
46+ imports = [ ./installation-cd-graphical-gnome.nix ];
48+ boot.initrd.kernelModules = [ "wl" ];
50+ boot.kernelModules = [ "kvm-intel" "wl" ];
51+ boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ];
55+Then build it like in the example above:
58+$ git clone https://github.com/NixOS/nixpkgs.git
60+$ export NIXPKGS_ALLOW_UNFREE=1
61+$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix default.nix
33## Technical Notes {#sec-building-image-tech-notes}
64## Technical Notes {#sec-building-image-tech-notes}
35The config value enforcement is implemented via `mkImageMediaOverride = mkOverride 60;`
66The config value enforcement is implemented via `mkImageMediaOverride = mkOverride 60;`
nixos/doc/manual/installation/installation.xml+1
@@ -14,4 +14,5 @@
14 <xi:include href="../from_md/installation/installing.chapter.xml" />
14 <xi:include href="../from_md/installation/installing.chapter.xml" />
15 <xi:include href="../from_md/installation/changing-config.chapter.xml" />
15 <xi:include href="../from_md/installation/changing-config.chapter.xml" />
16 <xi:include href="../from_md/installation/upgrading.chapter.xml" />
16 <xi:include href="../from_md/installation/upgrading.chapter.xml" />
17+ <xi:include href="../from_md/installation/building-nixos.chapter.xml" />
nixos/doc/manual/installation/installing.chapter.md+5−5
@@ -296,6 +296,11 @@ Use the following commands:
296 specify on which disk the GRUB boot loader is to be installed.
296 specify on which disk the GRUB boot loader is to be installed.
297 Without it, NixOS cannot boot.
297 Without it, NixOS cannot boot.
299+ : If there are other operating systems running on the machine before
300+ installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
301+ option can be set to `true` to automatically add them to the grub
299 UEFI systems
304 UEFI systems
301 : You *must* set the option [](#opt-boot.loader.systemd-boot.enable)
306 : You *must* set the option [](#opt-boot.loader.systemd-boot.enable)
@@ -307,11 +312,6 @@ Use the following commands:
307 [`boot.loader.systemd-boot`](#opt-boot.loader.systemd-boot.enable)
312 [`boot.loader.systemd-boot`](#opt-boot.loader.systemd-boot.enable)
310− If there are other operating systems running on the machine before
311− installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
312− option can be set to `true` to automatically add them to the grub
315 If you need to configure networking for your machine the
315 If you need to configure networking for your machine the
316 configuration options are described in [](#sec-networking). In
316 configuration options are described in [](#sec-networking). In
317 particular, while wifi is supported on the installation image, it is
317 particular, while wifi is supported on the installation image, it is
nixos/doc/manual/man-nixos-rebuild.xml+8
@@ -548,6 +548,14 @@
548 (<replaceable>user@host</replaceable>). You can also set ssh options by
548 (<replaceable>user@host</replaceable>). You can also set ssh options by
549 defining the <envar>NIX_SSHOPTS</envar> environment variable.
549 defining the <envar>NIX_SSHOPTS</envar> environment variable.
553+ Note that <command>nixos-rebuild</command> honors the
554+ <literal>nixpkgs.crossSystem</literal> setting of the given configuration
555+ but disregards the true architecture of the target host. Hence the
556+ <literal>nixpkgs.crossSystem</literal> setting has to match the target
557+ platform or else activation will fail.
551 </listitem>
559 </listitem>
552 </varlistentry>
560 </varlistentry>
nixos/doc/manual/md-to-db.sh+1−1
@@ -1,5 +1,5 @@
1#! /usr/bin/env nix-shell
1#! /usr/bin/env nix-shell
2−#! nix-shell -I nixpkgs=channel:nixpkgs-unstable -i bash -p pandoc
2+#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/tarball/21.11 -i bash -p pandoc
4# This script is temporarily needed while we transition the manual to
4# This script is temporarily needed while we transition the manual to
5# CommonMark. It converts the .md files in the regular manual folder
5# CommonMark. It converts the .md files in the regular manual folder
nixos/doc/manual/release-notes/rl-1803.section.md+2
@@ -282,3 +282,5 @@ When upgrading from a previous release, please be aware of the following incompa
282- The NixOS test driver supports user services declared by `systemd.user.services`. The methods `waitForUnit`, `getUnitInfo`, `startJob` and `stopJob` provide an optional `$user` argument for that purpose.
282- The NixOS test driver supports user services declared by `systemd.user.services`. The methods `waitForUnit`, `getUnitInfo`, `startJob` and `stopJob` provide an optional `$user` argument for that purpose.
284- Enabling bash completion on NixOS, `programs.bash.enableCompletion`, will now also enable completion for the Nix command line tools by installing the [nix-bash-completions](https://github.com/hedning/nix-bash-completions) package.
284- Enabling bash completion on NixOS, `programs.bash.enableCompletion`, will now also enable completion for the Nix command line tools by installing the [nix-bash-completions](https://github.com/hedning/nix-bash-completions) package.
286+- The vim/kakoune plugin updater now reads from a CSV file: check `pkgs/applications/editors/vim/plugins/vim-plugin-names` out to see the new format
nixos/doc/manual/release-notes/rl-2205.section.md+251−2
@@ -17,6 +17,21 @@ In addition to numerous new and upgraded packages, this release has the followin
18- GNOME has been upgraded to 42. Please take a look at their [Release Notes](https://release.gnome.org/42/) for details. Notably, it replaces gedit with GNOME Text Editor, GNOME Terminal with GNOME Console (formerly King’s Cross), and GNOME Screenshot with a tool built into the Shell.
18- GNOME has been upgraded to 42. Please take a look at their [Release Notes](https://release.gnome.org/42/) for details. Notably, it replaces gedit with GNOME Text Editor, GNOME Terminal with GNOME Console (formerly King’s Cross), and GNOME Screenshot with a tool built into the Shell.
20+- `stdenv.mkDerivation` now supports a self-referencing `finalAttrs:` parameter
21+ containing the final `mkDerivation` arguments including overrides.
22+ `drv.overrideAttrs` now supports two parameters `finalAttrs: previousAttrs:`.
23+ This allows packaging configuration to be overridden in a consistent manner by
24+ providing an alternative to `rec {}` syntax.
26+ Additionally, `passthru` can now reference `finalAttrs.finalPackage` containing
27+ the final package, including attributes such as the output paths and
30+ New language integrations can be simplified by overriding a "prototype"
31+ package containing the language-specific logic. This removes the need for a
32+ extra layer of overriding for the "generic builder" arguments, thus removing a
33+ usability problem and source of error.
20- PHP 8.1 is now available
35- PHP 8.1 is now available
22- Mattermost has been updated to extended support release 6.3, as the previously packaged extended support release 5.37 is [reaching its end of life](https://docs.mattermost.com/upgrade/extended-support-release.html).
37- Mattermost has been updated to extended support release 6.3, as the previously packaged extended support release 5.37 is [reaching its end of life](https://docs.mattermost.com/upgrade/extended-support-release.html).
@@ -25,12 +40,21 @@ In addition to numerous new and upgraded packages, this release has the followin
26- systemd services can now set [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services) instead of `reloadIfChanged` for a more granular distinction between reloads and restarts.
41- systemd services can now set [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services) instead of `reloadIfChanged` for a more granular distinction between reloads and restarts.
43+- Systemd has been upgraded to the version 250.
45+- Pulseaudio has been upgraded to version 15.0 and now optionally [supports additional Bluetooth audio codecs](https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/#supportforldacandaptxbluetoothcodecsplussbcxqsbcwithhigher-qualityparameters) like aptX or LDAC, with codec switching support being available in `pavucontrol`. This feature is disabled by default but can be enabled by using `hardware.pulseaudio.package = pkgs.pulseaudioFull;`.
46+ Existing 3rd party modules that provided similar functionality, like `pulseaudio-modules-bt` or `pulseaudio-hsphfpd` are deprecated and have been removed.
48+- The new [`postgresqlTestHook`](https://nixos.org/manual/nixpkgs/stable/#sec-postgresqlTestHook) runs a PostgreSQL server for the duration of package checks.
28- [`kops`](https://kops.sigs.k8s.io) defaults to 1.22.4, which will enable [Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) and require tokens on new clusters with Kubernetes 1.22. This will increase security by default, but may break some types of workloads. See the [release notes](https://kops.sigs.k8s.io/releases/1.22-notes/) for details.
50- [`kops`](https://kops.sigs.k8s.io) defaults to 1.22.4, which will enable [Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) and require tokens on new clusters with Kubernetes 1.22. This will increase security by default, but may break some types of workloads. See the [release notes](https://kops.sigs.k8s.io/releases/1.22-notes/) for details.
30- Module authors can use `mkRenamedOptionModuleWith` to automate the deprecation cycle without annoying out-of-tree module authors and their users.
52- Module authors can use `mkRenamedOptionModuleWith` to automate the deprecation cycle without annoying out-of-tree module authors and their users.
32- The default GHC version has been updated from 8.10.7 to 9.0.2. `pkgs.haskellPackages` and `pkgs.ghc` will now use this version by default.
54- The default GHC version has been updated from 8.10.7 to 9.0.2. `pkgs.haskellPackages` and `pkgs.ghc` will now use this version by default.
56+- The GNOME and Plasma installation CDs now use `pkgs.calamares` and `pkgs.calamares-nixos-extensions` to allow users to easily install and set up NixOS with a GUI.
34## New Services {#sec-release-22.05-new-services}
58## New Services {#sec-release-22.05-new-services}
36- [aesmd](https://github.com/intel/linux-sgx#install-the-intelr-sgx-psw), the Intel SGX Architectural Enclave Service Manager. Available as [services.aesmd](#opt-services.aesmd.enable).
60- [aesmd](https://github.com/intel/linux-sgx#install-the-intelr-sgx-psw), the Intel SGX Architectural Enclave Service Manager. Available as [services.aesmd](#opt-services.aesmd.enable).
@@ -39,6 +63,8 @@ In addition to numerous new and upgraded packages, this release has the followin
40- [matrix-conduit](https://conduit.rs/), a simple, fast and reliable chat server powered by matrix. Available as [services.matrix-conduit](option.html#opt-services.matrix-conduit.enable).
64- [matrix-conduit](https://conduit.rs/), a simple, fast and reliable chat server powered by matrix. Available as [services.matrix-conduit](option.html#opt-services.matrix-conduit.enable).
66+- [nethoscope](https://github.com/vvilhonen/nethoscope), listen to your network traffic. Available as [programs.nethoscope](#opt-programs.nethoscope.enable).
42- [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html), a lightweight shipper for forwarding and centralizing log data. Available as [services.filebeat](#opt-services.filebeat.enable).
68- [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html), a lightweight shipper for forwarding and centralizing log data. Available as [services.filebeat](#opt-services.filebeat.enable).
44- [apfs](https://github.com/linux-apfs/linux-apfs-rw), a kernel module for mounting the Apple File System (APFS).
70- [apfs](https://github.com/linux-apfs/linux-apfs-rw), a kernel module for mounting the Apple File System (APFS).
@@ -63,6 +89,8 @@ In addition to numerous new and upgraded packages, this release has the followin
64- [K40-Whisperer](https://www.scorchworks.com/K40whisperer/k40whisperer.html), a program to control cheap Chinese laser cutters. Available as [programs.k40-whisperer.enable](options.html#opt-programs.k4-whisperer.enable). Users must add themselves to the `k40` group to be able to access the device.
90- [K40-Whisperer](https://www.scorchworks.com/K40whisperer/k40whisperer.html), a program to control cheap Chinese laser cutters. Available as [programs.k40-whisperer.enable](options.html#opt-programs.k4-whisperer.enable). Users must add themselves to the `k40` group to be able to access the device.
92+- [mozillavpn](https://github.com/mozilla-mobile/mozilla-vpn-client), the client for the [Mozilla VPN](https://vpn.mozilla.org/) service. Available as [services.mozillavpn](options.html#opt-services.mozillavpn).
66- [mtr-exporter](https://github.com/mgumz/mtr-exporter), a Prometheus exporter for mtr metrics. Available as [services.mtr-exporter](options.html#opt-services.mtr-exporter.enable).
94- [mtr-exporter](https://github.com/mgumz/mtr-exporter), a Prometheus exporter for mtr metrics. Available as [services.mtr-exporter](options.html#opt-services.mtr-exporter.enable).
68- [prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter), a tool that exposes information from the Proxmox VE API for use by Prometheus. Available as [services.prometheus.exporters.pve](options.html#opt-services.prometheus.exporters.pve).
96- [prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter), a tool that exposes information from the Proxmox VE API for use by Prometheus. Available as [services.prometheus.exporters.pve](options.html#opt-services.prometheus.exporters.pve).
@@ -99,10 +127,14 @@ In addition to numerous new and upgraded packages, this release has the followin
100- [headscale](https://github.com/juanfont/headscale), an Open Source implementation of the [Tailscale](https://tailscale.io) Control Server. Available as [services.headscale](options.html#opt-services.headscale.enable)
128- [headscale](https://github.com/juanfont/headscale), an Open Source implementation of the [Tailscale](https://tailscale.io) Control Server. Available as [services.headscale](options.html#opt-services.headscale.enable)
130+- [create_ap](https://github.com/lakinduakash/linux-wifi-hotspot), a module for creating wifi hotspots using the program linux-wifi-hotspot. Available as [services.create_ap](options.html#opt-services.create_ap.enable).
102- [blocky](https://0xerr0r.github.io/blocky/), fast and lightweight DNS proxy as ad-blocker for local network with many features.
132- [blocky](https://0xerr0r.github.io/blocky/), fast and lightweight DNS proxy as ad-blocker for local network with many features.
104- [pacemaker](https://clusterlabs.org/pacemaker/) cluster resource manager
134- [pacemaker](https://clusterlabs.org/pacemaker/) cluster resource manager
136+- [nifi](https://nifi.apache.org), an easy to use, powerful, and reliable system to process and distribute data. Available as [services.nifi](options.html#opt-services.nifi.enable).
106<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
138<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
108## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
140## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
@@ -139,10 +171,71 @@ In addition to numerous new and upgraded packages, this release has the followin
139 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
171 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
140 `pkgs.emacsPackages.nongnuPackages` where the new versions will release.
172 `pkgs.emacsPackages.nongnuPackages` where the new versions will release.
174+- The configuration and state directories used by `nixos-containers` have been
175+ moved from `/etc/containers` and `/var/lib/containers` to
176+ `/etc/nixos-containers` and `/var/lib/nixos-containers`.
178+ If you are changing `system.stateVersion` to `"22.05"` manually on an existing
179+ system you are responsible for migrating these directories yourself.
181+ This is to improve compatibility with `libcontainer` based software such as Podman and Skopeo
182+ which assumes they have ownership over `/etc/containers`.
184+- For new installations `virtualisation.oci-containers.backend` is now set to `podman` by default.
185+ If you still want to use Docker on systems where `system.stateVersion` is set to to `"22.05"` set `virtualisation.oci-containers.backend = "docker";`.Old systems with older `stateVersion`s stay with "docker".
187+- `security.klogd` was removed. Logging of kernel messages is handled
188+ by systemd since Linux 3.5.
190+- `pkgs.ssmtp` has been dropped due to the program being unmaintained.
191+ `pkgs.msmtp` can be used instead as a substitute `sendmail` implementation.
192+ The corresponding options `services.ssmtp.*` have been removed as well.
193+ `programs.msmtp.*` can be used instead for an equivalent setup. For example:
197+ # Original ssmtp configuration:
202+ hostName = "smtp.example:587";
203+ authUser = "someone";
204+ authPassFile = "/secrets/password.txt";
207+ # Equivalent msmtp configuration:
210+ accounts.default = {
212+ tls_starttls = true;
214+ host = "smtp.example";
217+ passwordeval = "cat /secrets/password.txt";
142- `services.kubernetes.addons.dashboard` was removed due to it being an outdated version.
223- `services.kubernetes.addons.dashboard` was removed due to it being an outdated version.
144- `services.kubernetes.scheduler.{port,address}` now set `--secure-port` and `--bind-address` instead of `--port` and `--address`, since the former have been deprecated and are no longer functional in kubernetes>=1.23. Ensure that you are not relying on the insecure behaviour before upgrading.
225- `services.kubernetes.scheduler.{port,address}` now set `--secure-port` and `--bind-address` instead of `--port` and `--address`, since the former have been deprecated and are no longer functional in kubernetes>=1.23. Ensure that you are not relying on the insecure behaviour before upgrading.
227+- In the PowerDNS Recursor module (`services.pdns-recursor`), default values of several IP address-related NixOS options have been updated to match the default upstream behavior.
228+ In particular, Recursor by default will:
229+ - listen on (and allows connections from) both IPv4 and IPv6 addresses
230+ (`services.pdns-recursor.dns.address`, `services.pdns-recursor.dns.allowFrom`);
231+ - allow only local connections to the REST API server (`services.pdns-recursor.api.allowFrom`).
233+- In the ncdns module, the default value of `services.ncdns.address` has been changed to the IPv6 loopback address (`::1`).
235+- `openssh` has been update to 8.9p1, changing the FIDO security key middleware interface.
237+- `git` no longer hardcodes the path to openssh' ssh binary to reduce the amount of rebuilds. If you are using git with ssh remotes and do not have a ssh binary in your enviroment consider adding `openssh` to it or switching to `gitFull`.
146- `services.k3s.enable` no longer implies `systemd.enableUnifiedCgroupHierarchy = false`, and will default to the 'systemd' cgroup driver when using `services.k3s.docker = true`.
239- `services.k3s.enable` no longer implies `systemd.enableUnifiedCgroupHierarchy = false`, and will default to the 'systemd' cgroup driver when using `services.k3s.docker = true`.
147 This change may require a reboot to take effect, and k3s may not be able to run if the boot cgroup hierarchy does not match its configuration.
240 This change may require a reboot to take effect, and k3s may not be able to run if the boot cgroup hierarchy does not match its configuration.
148 The previous behavior may be retained by explicitly setting `systemd.enableUnifiedCgroupHierarchy = false` in your configuration.
241 The previous behavior may be retained by explicitly setting `systemd.enableUnifiedCgroupHierarchy = false` in your configuration.
@@ -160,6 +253,8 @@ In addition to numerous new and upgraded packages, this release has the followin
256+- `services.prometheus.alertManagerTimeout` has been removed as it has been deprecated upstream and has no effect.
163- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
258- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
164 The service is now using the systemd's `DynamicUser` mechanism to run as an unprivileged dynamically-allocated user with limited capabilities.
259 The service is now using the systemd's `DynamicUser` mechanism to run as an unprivileged dynamically-allocated user with limited capabilities.
165 The dhcpd state files are now always stored in `/var/lib/dhcpd{4,6}` and the `services.dhcpd4.stateDir` and `service.dhcpd6.stateDir` options have been removed.
260 The dhcpd state files are now always stored in `/var/lib/dhcpd{4,6}` and the `services.dhcpd4.stateDir` and `service.dhcpd6.stateDir` options have been removed.
@@ -169,6 +264,10 @@ In addition to numerous new and upgraded packages, this release has the followin
170- `services.ipfs.extraFlags` is now escaped with `utils.escapeSystemdExecArgs`. If you rely on systemd interpolating `extraFlags` in the service `ExecStart`, this will no longer work.
265- `services.ipfs.extraFlags` is now escaped with `utils.escapeSystemdExecArgs`. If you rely on systemd interpolating `extraFlags` in the service `ExecStart`, this will no longer work.
267+- `hbase` version 0.98.24 has been removed. The package now defaults to version 2.4.11. Versions 1.7.1 and 3.0.0-alpha-2 are also available.
269+- `services.paperless-ng` was renamed to `services.paperless`. Accordingly, the `paperless-ng-manage` script (located in `dataDir`) was renamed to `paperless-manage`. `services.paperless` now uses `paperless-ngx`.
172- The `matrix-synapse` service (`services.matrix-synapse`) has been converted to use the `settings` option defined in RFC42.
271- The `matrix-synapse` service (`services.matrix-synapse`) has been converted to use the `settings` option defined in RFC42.
173 This means that options that are part of your `homeserver.yaml` configuration, and that were specified at the top-level of the
272 This means that options that are part of your `homeserver.yaml` configuration, and that were specified at the top-level of the
174 module (`services.matrix-synapse`) now need to be moved into `services.matrix-synapse.settings`. And while not all options you
273 module (`services.matrix-synapse`) now need to be moved into `services.matrix-synapse.settings`. And while not all options you
@@ -263,6 +362,83 @@ In addition to numerous new and upgraded packages, this release has the followin
263 `media_store_path` was changed from `${dataDir}/media` to `${dataDir}/media_store` if `system.stateVersion` is at least `22.05`. Files will need to be manually moved to the new
362 `media_store_path` was changed from `${dataDir}/media` to `${dataDir}/media_store` if `system.stateVersion` is at least `22.05`. Files will need to be manually moved to the new
264 location if the `stateVersion` is updated.
363 location if the `stateVersion` is updated.
365+ As of Synapse 1.58.0, the old groups/communities feature has been disabled by default. It will be completely removed with Synapse 1.61.0.
367+- The Keycloak package (`pkgs.keycloak`) has been switched from the
368+ Wildfly version, which will soon be deprecated, to the Quarkus based
369+ version. The Keycloak service (`services.keycloak`) has been updated
370+ to accommodate the change and now differs from the previous version
373+ - `services.keycloak.extraConfig` has been removed in favor of the
374+ new [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md)
375+ [`services.keycloak.settings`](#opt-services.keycloak.settings)
376+ option. The available options correspond directly to parameters in
377+ `conf/keycloak.conf`. Some of the most important parameters are
378+ documented as suboptions, the rest can be found in the [All
379+ configuration section of the Keycloak Server Installation and
381+ Guide](https://www.keycloak.org/server/all-config). While the new
382+ configuration is much simpler and cleaner than the old JBoss CLI
383+ one, this unfortunately mean that there's no straightforward way
384+ to convert an old configuration to the new format and some
385+ settings may not even be available anymore.
387+ - `services.keycloak.frontendUrl` was removed and the frontend URL
388+ is now configured through the `hostname` family of settings in
389+ [`services.keycloak.settings`](#opt-services.keycloak.settings)
390+ instead. See the [Hostname section of the Keycloak Server
391+ Installation and Configuration
392+ Guide](https://www.keycloak.org/server/hostname) for more
393+ details. Additionally, `/auth` was removed from the default
394+ context path and needs to be added back in
395+ [`services.keycloak.settings.http-relative-path`](#opt-services.keycloak.settings.http-relative-path)
396+ if you want to keep compatibility with your current clients.
398+ - `services.keycloak.bindAddress`,
399+ `services.keycloak.forceBackendUrlToFrontendUrl`,
400+ `services.keycloak.httpPort` and `services.keycloak.httpsPort`
401+ have been removed in favor of their equivalent options in
402+ [`services.keycloak.settings`](#opt-services.keycloak.settings). `httpPort`
403+ and `httpsPort` have additionally had their types changed from
406+ The new names are as follows:
407+ - `bindAddress`: [`services.keycloak.settings.http-host`](#opt-services.keycloak.settings.http-host)
408+ - `forceBackendUrlToFrontendUrl`: [`services.keycloak.settings.hostname-strict-backchannel`](#opt-services.keycloak.settings.hostname-strict-backchannel)
409+ - `httpPort`: [`services.keycloak.settings.http-port`](#opt-services.keycloak.settings.http-port)
410+ - `httpsPort`: [`services.keycloak.settings.https-port`](#opt-services.keycloak.settings.https-port)
412+ For example, when using a reverse proxy the migration could look
417+ services.keycloak = {
420+ frontendUrl = "https://keycloak.example.com/auth";
421+ database.passwordFile = "/run/keys/db_password";
423+ "subsystem=undertow"."server=default-server"."http-listener=default".proxy-address-forwarding = true;
430+ services.keycloak = {
434+ hostname = "keycloak.example.com";
435+ http-relative-path = "/auth";
438+ database.passwordFile = "/run/keys/db_password";
266- The MoinMoin wiki engine (`services.moinmoin`) has been removed, because Python 2 is being retired from nixpkgs.
442- The MoinMoin wiki engine (`services.moinmoin`) has been removed, because Python 2 is being retired from nixpkgs.
268- Services in the `hadoop` module previously set `openFirewall` to true by default.
444- Services in the `hadoop` module previously set `openFirewall` to true by default.
@@ -304,6 +480,10 @@ In addition to numerous new and upgraded packages, this release has the followin
305- `services.miniflux.adminCredentialFiles` is now required, instead of defaulting to `admin` and `password`.
481- `services.miniflux.adminCredentialFiles` is now required, instead of defaulting to `admin` and `password`.
483+- The `taskserver` module no longer implicitly opens ports in the firewall
484+ configuration. This is now controlled through the option
485+ `services.taskserver.openFirewall`.
307- The `autorestic` package has been upgraded from 1.3.0 to 1.5.0 which introduces breaking changes in config file, check [their migration guide](https://autorestic.vercel.app/migration/1.4_1.5) for more details.
487- The `autorestic` package has been upgraded from 1.3.0 to 1.5.0 which introduces breaking changes in config file, check [their migration guide](https://autorestic.vercel.app/migration/1.4_1.5) for more details.
309- For `pkgs.python3.pkgs.ipython`, its direct dependency `pkgs.python3.pkgs.matplotlib-inline`
489- For `pkgs.python3.pkgs.ipython`, its direct dependency `pkgs.python3.pkgs.matplotlib-inline`
@@ -355,8 +535,14 @@ In addition to numerous new and upgraded packages, this release has the followin
356- `systemd-nspawn@.service` settings have been reverted to the default systemd behaviour. User namespaces are now activated by default. If you want to keep running nspawn containers without user namespaces you need to set `systemd.nspawn.<name>.execConfig.PrivateUsers = false`
536- `systemd-nspawn@.service` settings have been reverted to the default systemd behaviour. User namespaces are now activated by default. If you want to keep running nspawn containers without user namespaces you need to set `systemd.nspawn.<name>.execConfig.PrivateUsers = false`
538+- `systemd-shutdown` is now properly linked on shutdown to unmount all filesystems and device mapper devices cleanly. This can be disabled using `systemd.shutdownRamfs.enable`.
358- The Tor SOCKS proxy is now actually disabled if `services.tor.client.enable` is set to `false` (the default). If you are using this functionality but didn't change the setting or set it to `false`, you now need to set it to `true`.
540- The Tor SOCKS proxy is now actually disabled if `services.tor.client.enable` is set to `false` (the default). If you are using this functionality but didn't change the setting or set it to `false`, you now need to set it to `true`.
542+- `services.github-runner` has been hardened. Notably address families and
543+ system calls have been restricted, which may adversely affect some kinds of
544+ testing, e.g. using `AF_BLUETOOTH` to test bluetooth devices.
360- The terraform 0.12 compatibility has been removed and the `terraform.withPlugins` and `terraform-providers.mkProvider` implementations simplified. Providers now need to be stored under
546- The terraform 0.12 compatibility has been removed and the `terraform.withPlugins` and `terraform-providers.mkProvider` implementations simplified. Providers now need to be stored under
361`$out/libexec/terraform-providers/<registry>/<owner>/<name>/<version>/<os>_<arch>/terraform-provider-<name>_v<version>` (which mkProvider does).
547`$out/libexec/terraform-providers/<registry>/<owner>/<name>/<version>/<os>_<arch>/terraform-provider-<name>_v<version>` (which mkProvider does).
@@ -377,6 +563,10 @@ In addition to numerous new and upgraded packages, this release has the followin
377 you should change the package you refer to. If you don't need them update your
563 you should change the package you refer to. If you don't need them update your
378 commands from `otelcontribcol` to `otelcorecol` and enjoy a 7x smaller binary.
564 commands from `otelcontribcol` to `otelcorecol` and enjoy a 7x smaller binary.
566+- `services.zookeeper` has a new option `jre` for specifying the JRE to start
567+ zookeeper with. It defaults to the JRE that `pkgs.zookeeper` was wrapped with,
568+ instead of `pkgs.jre`. This changes the JRE to `pkgs.jdk11_headless` by default.
380- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
570- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
382- `pkgs.noto-fonts-cjk` is now deprecated in favor of `pkgs.noto-fonts-cjk-sans`
572- `pkgs.noto-fonts-cjk` is now deprecated in favor of `pkgs.noto-fonts-cjk-sans`
@@ -447,8 +637,15 @@ In addition to numerous new and upgraded packages, this release has the followin
448 See the `vscode` package for a more detailed example.
638 See the `vscode` package for a more detailed example.
640+- Existing `resholve*` functions have been renamed and nested under `pkgs.resholve`. Update uses to:
641+ - `resholvePackage` -> `resholve.mkDerivation`
642+ - `resholveScript` -> `resholve.writeScript`
643+ - `resholveScriptBin` -> `resholve.writeScriptBin`
450- `pkgs.cosmopolitan` no longer provides the `cosmoc` command. It has been moved to `pkgs.cosmoc`.
645- `pkgs.cosmopolitan` no longer provides the `cosmoc` command. It has been moved to `pkgs.cosmoc`.
647+- `pkgs.graalvmXX-ce` packages no longer provide support for Python/Ruby/WASM, instead focusing only in Java and Native Image Support. If you need to add support back, please see the `pkgs.graalvmCEPackages.mkGraal` function to create your own customized version of GraalVM with support for what you need.
452<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
649<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
454## Other Notable Changes {#sec-release-22.05-notable-changes}
651## Other Notable Changes {#sec-release-22.05-notable-changes}
@@ -490,6 +687,10 @@ In addition to numerous new and upgraded packages, this release has the followin
490 - Support for older versions of hadoop have been added to the module
687 - Support for older versions of hadoop have been added to the module
491 - Overriding and extending site XML files has been made easier
688 - Overriding and extending site XML files has been made easier
690+- The auto-upgrade service now accepts persistent (default: true) parameter.
691+ By default auto-upgrade will now run immediately if it would have been triggered at least
692+ once during the time when the timer was inactive.
493- If you are using Wayland you can choose to use the Ozone Wayland support
694- If you are using Wayland you can choose to use the Ozone Wayland support
494 in Chrome and several Electron apps by setting the environment variable
695 in Chrome and several Electron apps by setting the environment variable
495 `NIXOS_OZONE_WL=1` (for example via
696 `NIXOS_OZONE_WL=1` (for example via
@@ -513,6 +714,8 @@ In addition to numerous new and upgraded packages, this release has the followin
514- `programs.zsh.autosuggestions.strategy` now takes a list of strings instead of a string.
715- `programs.zsh.autosuggestions.strategy` now takes a list of strings instead of a string.
717+- The `asterisk` and `asterisk-stable` packages were switched from `asterisk_18` to the newly-packaged `asterisk_19`. Asterisk 13 and 17 have been removed as they have reached their end of life.
516- The `services.unifi.openPorts` option default value of `true` is now deprecated and will be changed to `false` in 22.11.
719- The `services.unifi.openPorts` option default value of `true` is now deprecated and will be changed to `false` in 22.11.
517 Configurations using this default will print a warning when rebuilt.
720 Configurations using this default will print a warning when rebuilt.
@@ -537,28 +740,53 @@ In addition to numerous new and upgraded packages, this release has the followin
537 e.g. Wayland.
740 e.g. Wayland.
539- [programs.ssh.knownHosts](#opt-programs.ssh.knownHosts) has gained an `extraHostNames`
742- [programs.ssh.knownHosts](#opt-programs.ssh.knownHosts) has gained an `extraHostNames`
540− option to replace `hostNames`. `hostNames` is deprecated, but still available for now.
743+ option to augment `hostNames`. It is now possible to use the attribute name of a `knownHosts`
744+ entry as the primary host name and specify secondary host names using `extraHostNames` without
745+ having to duplicate the primary host name.
542- The `services.stubby` module was converted to a [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
747- The `services.stubby` module was converted to a [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
750+ [services.xserver.desktopManager.runXdgAutostartIfNone](#opt-services.xserver.desktopManager.runXdgAutostartIfNone)
751+ was added in order to automatically run XDG autostart files for sessions without a desktop manager.
752+ This replaces helpers like the `dex` package.
754+- When setting [i18n.inputMethod.enabled](#opt-i18n.inputMethod.enabled) to `fcitx5`,
755+ it no longer creates corresponding systemd user services.
756+ It now relies on XDG autostart files to start and work properly in your desktop sessions.
757+ If you are using only a window manager without a desktop manager, you need to enable
758+ `services.xserver.desktopManager.runXdgAutostartIfNone` or using the `dex` package to make `fcitx5` work.
760+- A new module was added for the Envoy reverse proxy, providing the options `services.envoy.enable` and `services.envoy.settings`.
544- The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
762- The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
546- The options `boot.extraModprobeConfig` and `boot.blacklistedKernelModules` now also take effect in the initrd by copying the file `/etc/modprobe.d/nixos.conf` into the initrd.
764- The options `boot.extraModprobeConfig` and `boot.blacklistedKernelModules` now also take effect in the initrd by copying the file `/etc/modprobe.d/nixos.conf` into the initrd.
548- `nixos-generate-config` now puts the dhcp configuration in `hardware-configuration.nix` instead of `configuration.nix`.
766- `nixos-generate-config` now puts the dhcp configuration in `hardware-configuration.nix` instead of `configuration.nix`.
550−- ORY Kratos was updated to version 0.8.3-alpha.1.pre.0, which introduces some breaking changes:
768+- ORY Kratos was updated to version 0.9.0-alpha.3, which introduces some breaking changes:
769+ - All endpoints at the Admin API are now exposed at `/admin/`. For example, endpoint `https://kratos:4434/identities` is now exposed at `https://kratos:4434/admin/identities`
770+ - Configuration key `selfservice.whitelisted_return_urls` has been renamed to `allowed_return_urls`
771+ - The `password_identifier` form field of the password login strategy has been renamed to `identifier` to make compatibility with passwordless flows possible.
772+ - Instead of having a global `default_schema_url` which developers used to update their schema, you now need to define the `default_schema_id` which must reference schema ID in your config.
773+ - Calling `/self-service/recovery` without flow ID or with an invalid flow ID while authenticated will now respond with an error instead of redirecting to the default page.
551 - If you are relying on the SQLite images, update your Docker Pull commands as follows:
774 - If you are relying on the SQLite images, update your Docker Pull commands as follows:
552 - `docker pull oryd/kratos:{version}`
775 - `docker pull oryd/kratos:{version}`
553 - Additionally, all passwords now have to be at least 8 characters long.
776 - Additionally, all passwords now have to be at least 8 characters long.
554 - For more details, see:
777 - For more details, see:
555 - [Release Notes for v0.8.1-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.1-alpha.1)
778 - [Release Notes for v0.8.1-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.1-alpha.1)
556 - [Release Notes for v0.8.2-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.2-alpha.1)
779 - [Release Notes for v0.8.2-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.2-alpha.1)
780+ - [Release Notes for v0.9.0-alpha-1](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.1)
781+ - [Release Notes for v0.9.0-alpha-3](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.3)
558- `fetchFromSourcehut` now allows fetching repositories recursively
784- `fetchFromSourcehut` now allows fetching repositories recursively
559 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
785 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
560 is set to `true`.
786 is set to `true`.
788+- A module for declarative configuration of openconnect VPN profiles was added under `networking.openconnect`.
562- The `element-desktop` package now has an `useKeytar` option (defaults to `true`),
790- The `element-desktop` package now has an `useKeytar` option (defaults to `true`),
563 which allows disabling `keytar` and in turn `libsecret` usage
791 which allows disabling `keytar` and in turn `libsecret` usage
564 (which binds to native credential managers / keychain libraries).
792 (which binds to native credential managers / keychain libraries).
@@ -589,11 +817,18 @@ In addition to numerous new and upgraded packages, this release has the followin
589 and [services.logrotate.extraConfig](#opt-services.logrotate.extraConfig) will work, but issue deprecation
817 and [services.logrotate.extraConfig](#opt-services.logrotate.extraConfig) will work, but issue deprecation
590 warnings and [services.logrotate.settings](#opt-services.logrotate.settings) should now be used instead.
818 warnings and [services.logrotate.settings](#opt-services.logrotate.settings) should now be used instead.
820+- `security.pam.ussh` has been added, which allows authorizing PAM sessions based on SSH _certificates_ held within an SSH agent, using [pam-ussh](https://github.com/uber/pam-ussh).
822+- The `vscode-extensions.ionide.ionide-fsharp` package has been updated to 6.0.0 and now requires .NET 6.0.
592- The `zrepl` package has been updated from 0.4.0 to 0.5:
824- The `zrepl` package has been updated from 0.4.0 to 0.5:
594 - The RPC protocol version was bumped; all zrepl daemons in a setup must be updated and restarted before replication can resume.
826 - The RPC protocol version was bumped; all zrepl daemons in a setup must be updated and restarted before replication can resume.
595 - A bug involving encrypt-on-receive has been fixed. Read the [zrepl documentation](https://zrepl.github.io/configuration/sendrecvoptions.html#job-recv-options-placeholder) and check the output of `zfs get -r encryption,zrepl:placeholder PATH_TO_ROOTFS` on the receiver.
827 - A bug involving encrypt-on-receive has been fixed. Read the [zrepl documentation](https://zrepl.github.io/configuration/sendrecvoptions.html#job-recv-options-placeholder) and check the output of `zfs get -r encryption,zrepl:placeholder PATH_TO_ROOTFS` on the receiver.
829+- The `polybar` package has been updated from 3.5.7 to 3.6.2. See [the changelog](https://github.com/polybar/polybar/releases/tag/3.6.0) for more details.
830+ - Breaking changes include changes to escaping rules in configuration values, changes in behavior when encountering invalid tag names, and changes to inter-process-messaging (IPC).
597- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
832- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
598 Reason is that the old name has been deprecated upstream.
833 Reason is that the old name has been deprecated upstream.
599 Using the old option name will still work, but produce a warning.
834 Using the old option name will still work, but produce a warning.
@@ -615,10 +850,20 @@ In addition to numerous new and upgraded packages, this release has the followin
616- The polkit service, available at `security.polkit.enable`, is now disabled by default. It will automatically be enabled through services and desktop environments as needed.
851- The polkit service, available at `security.polkit.enable`, is now disabled by default. It will automatically be enabled through services and desktop environments as needed.
853+- xfsprogs was update to version 5.15, which enables inobtcount and bigtime by default on filesystem creation. Support for these features was added in kernel 5.10 and deemed stable in kernel 5.15.
854+ If you want to be able to mount XFS filesystems created with this release of xfsprogs on kernel releases older than 5.10, you need to format them with `mkfs.xfs -m bigtime=0 -m inobtcount=0`.
856+- `services.xserver.desktopManager.xfce` now includes Xfce's screen locker, `xfce4-screensaver` that is enabled by default. You can disable it by setting `false` to [services.xserver.desktopManager.xfce.enableScreensaver](#opt-services.xserver.desktopManager.xfce.enableScreensaver).
618- The `hadoop` package has added support for `aarch64-linux` and `aarch64-darwin` as of 3.3.1 ([#158613](https://github.com/NixOS/nixpkgs/pull/158613)).
858- The `hadoop` package has added support for `aarch64-linux` and `aarch64-darwin` as of 3.3.1 ([#158613](https://github.com/NixOS/nixpkgs/pull/158613)).
620- The `R` package now builds again on `aarch64-darwin` ([#158992](https://github.com/NixOS/nixpkgs/pull/158992)).
860- The `R` package now builds again on `aarch64-darwin` ([#158992](https://github.com/NixOS/nixpkgs/pull/158992)).
862+- The `nss` package was split into `nss_esr` and `nss_latest`, with `nss` being an alias for `nss_esr`. This was done to ease maintenance of `nss` and dependent high-profile packages like `firefox`.
864+- The Nextcloud module now supports to create a Mysql database automatically
865+ with `services.nextcloud.database.createLocally` enabled.
622- The `spark3` package has been updated from 3.1.2 to 3.2.1 ([#160075](https://github.com/NixOS/nixpkgs/pull/160075)):
867- The `spark3` package has been updated from 3.1.2 to 3.2.1 ([#160075](https://github.com/NixOS/nixpkgs/pull/160075)):
624 - Testing has been enabled for `aarch64-linux` in addition to `x86_64-linux`.
869 - Testing has been enabled for `aarch64-linux` in addition to `x86_64-linux`.
@@ -626,4 +871,8 @@ In addition to numerous new and upgraded packages, this release has the followin
627- The `programs.nncp` options were added for generating host-global NNCP configuration.
872- The `programs.nncp` options were added for generating host-global NNCP configuration.
874+- The option `services.snapserver.openFirewall` will no longer default to
875+ `true` starting with NixOS 22.11. Enable it explicitly if you need to control
876+ Snapserver remotely or connect streamig clients from other hosts.
629<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
878<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
nixos/lib/make-disk-image.nix+1
@@ -170,6 +170,7 @@ let format' = format; in let
170 config.system.build.nixos-install
170 config.system.build.nixos-install
171 config.system.build.nixos-enter
171 config.system.build.nixos-enter
173 ] ++ stdenv.initialPath);
174 ] ++ stdenv.initialPath);
175 # I'm preserving the line below because I'm going to search for it across nixpkgs to consolidate
176 # I'm preserving the line below because I'm going to search for it across nixpkgs to consolidate
nixos/lib/make-zfs-image.nix → nixos/lib/make-multi-disk-zfs-image.nixrenamed
The content is the same.
nixos/lib/make-options-doc/mergeJSON.py+3−1
@@ -48,7 +48,9 @@ overrides = pivot(json.load(open(sys.argv[2 + optOffset], 'r')))
49# fix up declaration paths in lazy options, since we don't eval them from a full nixpkgs dir
49# fix up declaration paths in lazy options, since we don't eval them from a full nixpkgs dir
50for (k, v) in options.items():
50for (k, v) in options.items():
51+ # The _module options are not declared in nixos/modules
52+ if v.value['loc'][0] != "_module":
51− v.value['declarations'] = list(map(lambda s: f'nixos/modules/{s}', v.value['declarations']))
53+ v.value['declarations'] = list(map(lambda s: f'nixos/modules/{s}', v.value['declarations']))
53# merge both descriptions
55# merge both descriptions
54for (k, v) in overrides.items():
56for (k, v) in overrides.items():
nixos/lib/make-single-disk-zfs-image.nixnew file+322
@@ -0,0 +1,322 @@
1+# Note: This is a private API, internal to NixOS. Its interface is subject
2+# to change without notice.
4+# The result of this builder is a single disk image, partitioned like this:
6+# * partition #1: a very small, 1MiB partition to leave room for Grub.
8+# * partition #2: boot, a partition formatted with FAT to be used for /boot.
9+# FAT is chosen to support EFI.
11+# * partition #3: nixos, a partition dedicated to a zpool.
13+# This single-disk approach does not satisfy ZFS's requirements for autoexpand,
14+# however automation can expand it anyway. For example, with
15+# `services.zfs.expandOnBoot`.
18+, # The NixOS configuration to be installed onto the disk image.
21+, # size of the FAT partition, in megabytes.
24+, # The size of the root partition, in megabytes.
27+, # The name of the ZFS pool
28+ rootPoolName ? "tank"
31+ rootPoolProperties ? {
34+, # pool-wide filesystem properties
35+ rootPoolFilesystemProperties ? {
36+ acltype = "posixacl";
39+ mountpoint = "legacy";
43+, # datasets, with per-attribute options:
44+ # mount: (optional) mount point in the VM
45+ # properties: (optional) ZFS properties on the dataset, like filesystemProperties
47+ # 1. datasets will be created from shorter to longer names as a simple topo-sort
48+ # 2. you should define a root's dataset's mount for `/`
51+, # The files and directories to be placed in the target file system.
52+ # This is a list of attribute sets {source, target} where `source'
53+ # is the file system object (regular file or directory) to be
54+ # grafted in the file system at path `target'.
57+, # The initial NixOS configuration file to be copied to
58+ # /etc/nixos/configuration.nix. This configuration will be embedded
59+ # inside a configuration which includes the described ZFS fileSystems.
62+, # Shell code executed after the VM has finished.
65+, name ? "nixos-disk-image"
67+, # Disk image format, one of qcow2, qcow2-compressed, vdi, vpc, raw.
70+, # Include a copy of Nixpkgs in the disk image
71+ includeChannel ? true
74+ formatOpt = if format == "qcow2-compressed" then "qcow2" else format;
76+ compress = lib.optionalString (format == "qcow2-compressed") "-c";
78+ filenameSuffix = "." + {
83+ }.${formatOpt} or formatOpt;
84+ rootFilename = "nixos.root${filenameSuffix}";
86+ # FIXME: merge with channel.nix / make-channel.nix.
89+ nixpkgs = lib.cleanSource pkgs.path;
91+ pkgs.runCommand "nixos-${config.system.nixos.version}" { } ''
93+ cp -prd ${nixpkgs.outPath} $out/nixos
94+ chmod -R u+w $out/nixos
95+ if [ ! -e $out/nixos/nixpkgs ]; then
96+ ln -s . $out/nixos/nixpkgs
98+ rm -rf $out/nixos/.git
99+ echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
102+ closureInfo = pkgs.closureInfo {
103+ rootPaths = [ config.system.build.toplevel ]
104+ ++ (lib.optional includeChannel channelSources);
107+ modulesTree = pkgs.aggregateModules
108+ (with config.boot.kernelPackages; [ kernel zfs ]);
110+ tools = lib.makeBinPath (
112+ config.system.build.nixos-enter
113+ config.system.build.nixos-install
124+ hasDefinedMount = disk: ((disk.mount or null) != null);
126+ stringifyProperties = prefix: properties: lib.concatStringsSep " \\\n" (
129+ property: value: "${prefix} ${lib.escapeShellArg property}=${lib.escapeShellArg value}"
134+ featuresToProperties = features:
138+ name = "feature@${feature}";
145+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
146+ sorted = lib.sort (left: right: (lib.stringLength left.name) < (lib.stringLength right.name)) datasetlist;
147+ cmd = { name, value }:
149+ properties = stringifyProperties "-o" (value.properties or { });
151+ "zfs create -p ${properties} ${name}";
153+ lib.concatMapStringsSep "\n" cmd sorted;
157+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
158+ mounts = lib.filter ({ value, ... }: hasDefinedMount value) datasetlist;
159+ sorted = lib.sort (left: right: (lib.stringLength left.value.mount) < (lib.stringLength right.value.mount)) mounts;
160+ cmd = { name, value }:
162+ mkdir -p /mnt${lib.escapeShellArg value.mount}
163+ mount -t zfs ${name} /mnt${lib.escapeShellArg value.mount}
166+ lib.concatMapStringsSep "\n" cmd sorted;
170+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
171+ mounts = lib.filter ({ value, ... }: hasDefinedMount value) datasetlist;
172+ sorted = lib.sort (left: right: (lib.stringLength left.value.mount) > (lib.stringLength right.value.mount)) mounts;
173+ cmd = { name, value }:
175+ umount /mnt${lib.escapeShellArg value.mount}
178+ lib.concatMapStringsSep "\n" cmd sorted;
181+ fileSystemsCfgFile =
183+ mountable = lib.filterAttrs (_: value: hasDefinedMount value) datasets;
185+ pkgs.runCommand "filesystem-config.nix"
187+ buildInputs = with pkgs; [ jq nixpkgs-fmt ];
188+ filesystems = builtins.toJSON {
189+ fileSystems = lib.mapAttrs'
196+ device = "${dataset}";
202+ passAsFile = [ "filesystems" ];
205+ echo "builtins.fromJSON '''"
206+ jq . < "$filesystemsPath"
214+ if configFile == null
215+ then fileSystemsCfgFile
217+ pkgs.runCommand "configuration.nix"
219+ buildInputs = with pkgs; [ nixpkgs-fmt ];
223+ echo '{ imports = ['
224+ printf "(%s)\n" "$(cat ${fileSystemsCfgFile})";
225+ printf "(%s)\n" "$(cat ${configFile})";
233+ pkgs.vmTools.override {
235+ [ "zfs" "9p" "9pnet_virtio" "virtio_pci" "virtio_blk" ] ++
236+ (pkgs.lib.optional pkgs.stdenv.hostPlatform.isx86 "rtc_cmos");
237+ kernel = modulesTree;
240+ pkgs.runCommand name
243+ QEMU_OPTS = "-drive file=$rootDiskImage,if=virtio,cache=unsafe,werror=report";
245+ PATH=$PATH:${pkgs.qemu_kvm}/bin
248+ rootDiskImage=root.raw
249+ qemu-img create -f raw $rootDiskImage ${toString (bootSize + rootSize)}M
253+ ${if formatOpt == "raw" then ''
254+ mv $rootDiskImage $out/${rootFilename}
256+ ${pkgs.qemu}/bin/qemu-img convert -f raw -O ${formatOpt} ${compress} $rootDiskImage $out/${rootFilename}
258+ rootDiskImage=$out/${rootFilename}
263+ export PATH=${tools}:$PATH
266+ cp -sv /dev/vda /dev/sda
267+ cp -sv /dev/vda /dev/xvda
269+ parted --script /dev/vda -- \
271+ mkpart no-fs 1MiB 2MiB \
272+ set 1 bios_grub on \
273+ align-check optimal 1 \
274+ mkpart primary fat32 2MiB ${toString bootSize}MiB \
275+ align-check optimal 2 \
276+ mkpart primary fat32 ${toString bootSize}MiB -1MiB \
277+ align-check optimal 3 \
280+ sfdisk --dump /dev/vda
284+ ${stringifyProperties " -o" rootPoolProperties} \
285+ ${stringifyProperties " -O" rootPoolFilesystemProperties} \
286+ ${rootPoolName} /dev/vda3
287+ parted --script /dev/vda -- print
293+ mkfs.vfat -n ESP /dev/vda2
294+ mount /dev/vda2 /mnt/boot
298+ # Install a configuration.nix
299+ mkdir -p /mnt/etc/nixos
300+ # `cat` so it is mutable on the fs
301+ cat ${mergedConfig} > /mnt/etc/nixos/configuration.nix
303+ export NIX_STATE_DIR=$TMPDIR/state
304+ nix-store --load-db < ${closureInfo}/registration
309+ --system ${config.system.build.toplevel} \
311+ ${lib.optionalString includeChannel ''--channel ${channelSources}''}
318+ zpool export ${rootPoolName}
nixos/lib/qemu-common.nix+2−2
@@ -23,8 +23,8 @@ rec {
24 qemuBinary = qemuPkg: {
24 qemuBinary = qemuPkg: {
25 x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
25 x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
26− armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -enable-kvm -machine virt -cpu host";
26+ armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -machine virt,accel=kvm:tcg -cpu max";
27− aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -enable-kvm -machine virt,gic-version=host -cpu host";
27+ aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=max,accel=kvm:tcg -cpu max";
28 powerpc64le-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
28 powerpc64le-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
29 powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
29 powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
30 x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
30 x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
nixos/lib/systemd-lib.nix+34−50
@@ -122,10 +122,15 @@ in rec {
122 (if isList value then value else [value]))
122 (if isList value then value else [value]))
125− generateUnits = generateUnits' true;
127− generateUnits' = allowCollisions: type: units: upstreamUnits: upstreamWants:
125+ generateUnits = { allowCollisions ? true, type, units, upstreamUnits, upstreamWants, packages ? cfg.packages, package ? cfg.package }:
128− pkgs.runCommand "${type}-units"
133+ in pkgs.runCommand "${type}-units"
129 { preferLocalBuild = true;
134 { preferLocalBuild = true;
130 allowSubstitutes = false;
135 allowSubstitutes = false;
@@ -133,7 +138,7 @@ in rec {
134 # Copy the upstream systemd units we're interested in.
139 # Copy the upstream systemd units we're interested in.
135 for i in ${toString upstreamUnits}; do
140 for i in ${toString upstreamUnits}; do
136− fn=${cfg.package}/example/systemd/${type}/$i
141+ fn=${package}/example/systemd/${typeDir}/$i
137 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
142 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
138 if [ -L $fn ]; then
143 if [ -L $fn ]; then
139 target="$(readlink "$fn")"
144 target="$(readlink "$fn")"
@@ -150,7 +155,7 @@ in rec {
150 # Copy .wants links, but only those that point to units that
155 # Copy .wants links, but only those that point to units that
151 # we're interested in.
156 # we're interested in.
152 for i in ${toString upstreamWants}; do
157 for i in ${toString upstreamWants}; do
153− fn=${cfg.package}/example/systemd/${type}/$i
158+ fn=${package}/example/systemd/${typeDir}/$i
154 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
159 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
155 x=$out/$(basename $fn)
160 x=$out/$(basename $fn)
@@ -162,14 +167,14 @@ in rec {
164 # Symlink all units provided listed in systemd.packages.
169 # Symlink all units provided listed in systemd.packages.
165− packages="${toString cfg.packages}"
170+ packages="${toString packages}"
167 # Filter duplicate directories
172 # Filter duplicate directories
168 declare -A unique_packages
173 declare -A unique_packages
169 for k in $packages ; do unique_packages[$k]=1 ; done
174 for k in $packages ; do unique_packages[$k]=1 ; done
171 for i in ''${!unique_packages[@]}; do
176 for i in ''${!unique_packages[@]}; do
172− for fn in $i/etc/systemd/${type}/* $i/lib/systemd/${type}/*; do
177+ for fn in $i/etc/systemd/${typeDir}/* $i/lib/systemd/${typeDir}/*; do
173 if ! [[ "$fn" =~ .wants$ ]]; then
178 if ! [[ "$fn" =~ .wants$ ]]; then
174 if [[ -d "$fn" ]]; then
179 if [[ -d "$fn" ]]; then
175 targetDir="$out/$(basename "$fn")"
180 targetDir="$out/$(basename "$fn")"
@@ -270,9 +275,9 @@ in rec {
270 { Conflicts = toString config.conflicts; }
275 { Conflicts = toString config.conflicts; }
271 // optionalAttrs (config.requisite != [])
276 // optionalAttrs (config.requisite != [])
272 { Requisite = toString config.requisite; }
277 { Requisite = toString config.requisite; }
273− // optionalAttrs (config.restartTriggers != [])
278+ // optionalAttrs (config ? restartTriggers && config.restartTriggers != [])
274 { X-Restart-Triggers = toString config.restartTriggers; }
279 { X-Restart-Triggers = toString config.restartTriggers; }
275− // optionalAttrs (config.reloadTriggers != [])
280+ // optionalAttrs (config ? reloadTriggers && config.reloadTriggers != [])
276 { X-Reload-Triggers = toString config.reloadTriggers; }
281 { X-Reload-Triggers = toString config.reloadTriggers; }
277 // optionalAttrs (config.description != "") {
282 // optionalAttrs (config.description != "") {
278 Description = config.description; }
283 Description = config.description; }
@@ -288,45 +293,24 @@ in rec {
291− serviceConfig = { name, config, ... }: {
296+ serviceConfig = { config, ... }: {
293− [ { # Default path for systemd services. Should be quite minimal.
301− environment.PATH = "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
297+ config.environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
303− (mkIf (config.preStart != "")
304− { serviceConfig.ExecStartPre =
305− [ (makeJobScript "${name}-pre-start" config.preStart) ];
307− (mkIf (config.script != "")
308− { serviceConfig.ExecStart =
309− makeJobScript "${name}-start" config.script + " " + config.scriptArgs;
311− (mkIf (config.postStart != "")
312− { serviceConfig.ExecStartPost =
313− [ (makeJobScript "${name}-post-start" config.postStart) ];
315− (mkIf (config.reload != "")
316− { serviceConfig.ExecReload =
317− makeJobScript "${name}-reload" config.reload;
319− (mkIf (config.preStop != "")
320− { serviceConfig.ExecStop =
321− makeJobScript "${name}-pre-stop" config.preStop;
323− (mkIf (config.postStop != "")
324− { serviceConfig.ExecStopPost =
325− makeJobScript "${name}-post-stop" config.postStop;
300+ stage2ServiceConfig = {
301+ imports = [ serviceConfig ];
302+ # Default path for systemd services. Should be quite minimal.
303+ config.path = mkAfter [
312+ stage1ServiceConfig = serviceConfig;
330 mountConfig = { config, ... }: {
314 mountConfig = { config, ... }: {
331 config = {
315 config = {
332 mountConfig =
316 mountConfig =
@@ -374,12 +358,12 @@ in rec {
374 # systemd max line length is now 1MiB
358 # systemd max line length is now 1MiB
375 # https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
359 # https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
376 in if stringLength s >= 1048576 then throw "The value of the environment variable ‘${n}’ in systemd service ‘${name}.service’ is too long." else s) (attrNames env)}
360 in if stringLength s >= 1048576 then throw "The value of the environment variable ‘${n}’ in systemd service ‘${name}.service’ is too long." else s) (attrNames env)}
377− ${if def.reloadIfChanged then ''
361+ ${if def ? reloadIfChanged && def.reloadIfChanged then ''
378 X-ReloadIfChanged=true
362 X-ReloadIfChanged=true
379− '' else if !def.restartIfChanged then ''
363+ '' else if (def ? restartIfChanged && !def.restartIfChanged) then ''
380 X-RestartIfChanged=false
364 X-RestartIfChanged=false
381 '' else ""}
365 '' else ""}
382− ${optionalString (!def.stopIfChanged) "X-StopIfChanged=false"}
366+ ${optionalString (def ? stopIfChanged && !def.stopIfChanged) "X-StopIfChanged=false"}
383 ${attrsToSection def.serviceConfig}
367 ${attrsToSection def.serviceConfig}
nixos/lib/systemd-types.nixnew file+69
@@ -0,0 +1,69 @@
1+{ lib, systemdUtils, pkgs }:
4+with systemdUtils.unitOptions;
9+ attrsOf (submodule ({ name, config, ... }: {
10+ options = concreteUnitOptions;
11+ config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); };
14+ services = with types; attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
15+ initrdServices = with types; attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
17+ targets = with types; attrsOf (submodule [ stage2CommonUnitOptions unitConfig ]);
18+ initrdTargets = with types; attrsOf (submodule [ stage1CommonUnitOptions unitConfig ]);
20+ sockets = with types; attrsOf (submodule [ stage2SocketOptions unitConfig ]);
21+ initrdSockets = with types; attrsOf (submodule [ stage1SocketOptions unitConfig ]);
23+ timers = with types; attrsOf (submodule [ stage2TimerOptions unitConfig ]);
24+ initrdTimers = with types; attrsOf (submodule [ stage1TimerOptions unitConfig ]);
26+ paths = with types; attrsOf (submodule [ stage2PathOptions unitConfig ]);
27+ initrdPaths = with types; attrsOf (submodule [ stage1PathOptions unitConfig ]);
29+ slices = with types; attrsOf (submodule [ stage2SliceOptions unitConfig ]);
30+ initrdSlices = with types; attrsOf (submodule [ stage1SliceOptions unitConfig ]);
32+ mounts = with types; listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
33+ initrdMounts = with types; listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
35+ automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
36+ initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
38+ initrdContents = types.attrsOf (types.submodule ({ config, options, name, ... }: {
40+ enable = mkEnableOption "copying of this file and symlinking it" // { default = true; };
52+ type = types.nullOr types.lines;
53+ description = "Text of the file.";
58+ description = "Path of the source file.";
63+ source = mkIf (config.text != null) (
64+ let name' = "initrd-" + baseNameOf name;
65+ in mkDerivedConfig options.text (pkgs.writeText name')
nixos/lib/systemd-unit-options.nix+560−401
@@ -94,459 +94,618 @@ in rec {
97− commonUnitOptions = sharedOptions // {
97+ commonUnitOptions = {
98+ options = sharedOptions // {
100+ description = mkOption {
102+ type = types.singleLineStr;
103+ description = "Description of this unit used in systemd messages and progress indicators.";
106+ documentation = mkOption {
108+ type = types.listOf types.str;
109+ description = "A list of URIs referencing documentation for this unit or its configuration.";
112+ requires = mkOption {
114+ type = types.listOf unitNameType;
116+ Start the specified units when this unit is started, and stop
117+ this unit when the specified units are stopped or fail.
123+ type = types.listOf unitNameType;
125+ Start the specified units when this unit is started.
131+ type = types.listOf unitNameType;
133+ If the specified units are started at the same time as
134+ this unit, delay this unit until they have started.
140+ type = types.listOf unitNameType;
142+ If the specified units are started at the same time as
143+ this unit, delay them until this unit has started.
147+ bindsTo = mkOption {
149+ type = types.listOf unitNameType;
151+ Like ‘requires’, but in addition, if the specified units
152+ unexpectedly disappear, this unit will be stopped as well.
158+ type = types.listOf unitNameType;
160+ If the specified units are stopped or restarted, then this
161+ unit is stopped or restarted as well.
165+ conflicts = mkOption {
167+ type = types.listOf unitNameType;
169+ If the specified units are started, then this unit is stopped
174+ requisite = mkOption {
176+ type = types.listOf unitNameType;
178+ Similar to requires. However if the units listed are not started,
179+ they will not be started and the transaction will fail.
183+ unitConfig = mkOption {
185+ example = { RequiresMountsFor = "/data"; };
186+ type = types.attrsOf unitOption;
188+ Each attribute in this set specifies an option in the
189+ <literal>[Unit]</literal> section of the unit. See
190+ <citerefentry><refentrytitle>systemd.unit</refentrytitle>
191+ <manvolnum>5</manvolnum></citerefentry> for details.
195+ onFailure = mkOption {
197+ type = types.listOf unitNameType;
199+ A list of one or more units that are activated when
200+ this unit enters the "failed" state.
204+ startLimitBurst = mkOption {
207+ Configure unit start rate limiting. Units which are started
208+ more than startLimitBurst times within an interval time
209+ interval are not permitted to start any more.
213+ startLimitIntervalSec = mkOption {
216+ Configure unit start rate limiting. Units which are started
217+ more than startLimitBurst times within an interval time
218+ interval are not permitted to start any more.
99− description = mkOption {
101− type = types.singleLineStr;
102− description = "Description of this unit used in systemd messages and progress indicators.";
105− documentation = mkOption {
107− type = types.listOf types.str;
108− description = "A list of URIs referencing documentation for this unit or its configuration.";
111− requires = mkOption {
113− type = types.listOf unitNameType;
115− Start the specified units when this unit is started, and stop
116− this unit when the specified units are stopped or fail.
122− type = types.listOf unitNameType;
124− Start the specified units when this unit is started.
130− type = types.listOf unitNameType;
132− If the specified units are started at the same time as
133− this unit, delay this unit until they have started.
139− type = types.listOf unitNameType;
141− If the specified units are started at the same time as
142− this unit, delay them until this unit has started.
146− bindsTo = mkOption {
148− type = types.listOf unitNameType;
150− Like ‘requires’, but in addition, if the specified units
151− unexpectedly disappear, this unit will be stopped as well.
157− type = types.listOf unitNameType;
159− If the specified units are stopped or restarted, then this
160− unit is stopped or restarted as well.
164− conflicts = mkOption {
166− type = types.listOf unitNameType;
168− If the specified units are started, then this unit is stopped
173− requisite = mkOption {
175− type = types.listOf unitNameType;
177− Similar to requires. However if the units listed are not started,
178− they will not be started and the transaction will fail.
182− unitConfig = mkOption {
184− example = { RequiresMountsFor = "/data"; };
185− type = types.attrsOf unitOption;
187− Each attribute in this set specifies an option in the
188− <literal>[Unit]</literal> section of the unit. See
189− <citerefentry><refentrytitle>systemd.unit</refentrytitle>
190− <manvolnum>5</manvolnum></citerefentry> for details.
194− restartTriggers = mkOption {
196− type = types.listOf types.unspecified;
198− An arbitrary list of items such as derivations. If any item
199− in the list changes between reconfigurations, the service will
204− reloadTriggers = mkOption {
206− type = types.listOf unitOption;
208− An arbitrary list of items such as derivations. If any item
209− in the list changes between reconfigurations, the service will
210− be reloaded. If anything but a reload trigger changes in the
211− unit file, the unit will be restarted instead.
215− onFailure = mkOption {
217− type = types.listOf unitNameType;
219− A list of one or more units that are activated when
220− this unit enters the "failed" state.
224− startLimitBurst = mkOption {
227− Configure unit start rate limiting. Units which are started
228− more than startLimitBurst times within an interval time
229− interval are not permitted to start any more.
233− startLimitIntervalSec = mkOption {
236− Configure unit start rate limiting. Units which are started
237− more than startLimitBurst times within an interval time
238− interval are not permitted to start any more.
244−
225+ stage2CommonUnitOptions = {
245− serviceOptions = commonUnitOptions // {
227+ commonUnitOptions
247− environment = mkOption {
229+
231+ restartTriggers = mkOption {
248− default = {};
232+ default = [];
249− type = with types; attrsOf (nullOr (oneOf [ str path package ]));
233+ type = types.listOf types.unspecified;
250− example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
234+ description = ''
251− description = "Environment variables passed to the service's processes.";
235+ An arbitrary list of items such as derivations. If any item
236+ in the list changes between reconfigurations, the service will
254− path = mkOption {
241+ reloadTriggers = mkOption {
255− default = [];
242+ default = [];
256− type = with types; listOf (oneOf [ package str ]);
243+ type = types.listOf unitOption;
257− description = ''
244+ description = ''
258− Packages added to the service's <envar>PATH</envar>
245+ An arbitrary list of items such as derivations. If any item
259− environment variable. Both the <filename>bin</filename>
246+ in the list changes between reconfigurations, the service will
260− and <filename>sbin</filename> subdirectories of each
247+ be reloaded. If anything but a reload trigger changes in the
261− package are added.
248+ unit file, the unit will be restarted instead.
253+ stage1CommonUnitOptions = commonUnitOptions;
255+ serviceOptions = { name, config, ... }: {
258+ environment = mkOption {
260+ type = with types; attrsOf (nullOr (oneOf [ str path package ]));
261+ example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
262+ description = "Environment variables passed to the service's processes.";
267+ type = with types; listOf (oneOf [ package str ]);
269+ Packages added to the service's <envar>PATH</envar>
270+ environment variable. Both the <filename>bin</filename>
271+ and <filename>sbin</filename> subdirectories of each
276+ serviceConfig = mkOption {
281+ type = types.addCheck (types.attrsOf unitOption) checkService;
283+ Each attribute in this set specifies an option in the
284+ <literal>[Service]</literal> section of the unit. See
285+ <citerefentry><refentrytitle>systemd.service</refentrytitle>
286+ <manvolnum>5</manvolnum></citerefentry> for details.
293+ description = "Shell commands executed as the service's main process.";
296+ scriptArgs = mkOption {
299+ description = "Arguments passed to the main process script.";
302+ preStart = mkOption {
306+ Shell commands executed before the service's main process
311+ postStart = mkOption {
315+ Shell commands executed after the service's main process
324+ Shell commands executed when the service's main process
329+ preStop = mkOption {
333+ Shell commands executed to stop the service.
337+ postStop = mkOption {
341+ Shell commands executed after the service's main process
346+ jobScripts = mkOption {
347+ type = with types; coercedTo path singleton (listOf path);
349+ description = "A list of all job script derivations of this unit.";
356+ (mkIf (config.preStart != "") rec {
357+ jobScripts = makeJobScript "${name}-pre-start" config.preStart;
358+ serviceConfig.ExecStartPre = [ jobScripts ];
360+ (mkIf (config.script != "") rec {
361+ jobScripts = makeJobScript "${name}-start" config.script;
362+ serviceConfig.ExecStart = jobScripts + " " + config.scriptArgs;
364+ (mkIf (config.postStart != "") rec {
365+ jobScripts = (makeJobScript "${name}-post-start" config.postStart);
366+ serviceConfig.ExecStartPost = [ jobScripts ];
368+ (mkIf (config.reload != "") rec {
369+ jobScripts = makeJobScript "${name}-reload" config.reload;
370+ serviceConfig.ExecReload = jobScripts;
372+ (mkIf (config.preStop != "") rec {
373+ jobScripts = makeJobScript "${name}-pre-stop" config.preStop;
374+ serviceConfig.ExecStop = jobScripts;
376+ (mkIf (config.postStop != "") rec {
377+ jobScripts = makeJobScript "${name}-post-stop" config.postStop;
378+ serviceConfig.ExecStopPost = jobScripts;
265− serviceConfig = mkOption {
270− type = types.addCheck (types.attrsOf unitOption) checkService;
272− Each attribute in this set specifies an option in the
273− <literal>[Service]</literal> section of the unit. See
274− <citerefentry><refentrytitle>systemd.service</refentrytitle>
275− <manvolnum>5</manvolnum></citerefentry> for details.
384+ stage2ServiceOptions = {
386+ stage2CommonUnitOptions
279− script = mkOption {
391+ restartIfChanged = mkOption {
280− type = types.lines;
392+ type = types.bool;
395+ Whether the service should be restarted during a NixOS
396+ configuration switch if its definition has changed.
400+ reloadIfChanged = mkOption {
281− default = "";
402+ default = false;
282− description = "Shell commands executed as the service's main process.";
403+ description = ''
404+ Whether the service should be reloaded during a NixOS
405+ configuration switch if its definition has changed. If
406+ enabled, the value of <option>restartIfChanged</option> is
409+ This option should not be used anymore in favor of
410+ <option>reloadTriggers</option> which allows more granular
411+ control of when a service is reloaded and when a service
416+ stopIfChanged = mkOption {
420+ If set, a changed unit is restarted by calling
421+ <command>systemctl stop</command> in the old configuration,
422+ then <command>systemctl start</command> in the new one.
423+ Otherwise, it is restarted in a single step using
424+ <command>systemctl restart</command> in the new configuration.
425+ The latter is less correct because it runs the
426+ <literal>ExecStop</literal> commands from the new
431+ startAt = mkOption {
432+ type = with types; either str (listOf str);
434+ example = "Sun 14:00:00";
436+ Automatically start this unit at the given date/time, which
437+ must be in the format described in
438+ <citerefentry><refentrytitle>systemd.time</refentrytitle>
439+ <manvolnum>7</manvolnum></citerefentry>. This is equivalent
440+ to adding a corresponding timer unit with
441+ <option>OnCalendar</option> set to the value given here.
443+ apply = v: if isList v then v else [ v ];
285− scriptArgs = mkOption {
448+ stage1ServiceOptions = {
286− type = types.str;
449+ imports = [
287− default = "";
450+ stage1CommonUnitOptions
288− description = "Arguments passed to the main process script.";
451+ serviceOptions
291− preStart = mkOption {
295− Shell commands executed before the service's main process
300− postStart = mkOption {
459+ listenStreams = mkOption {
301− type = types.lines;
461+ type = types.listOf types.str;
462+ example = [ "0.0.0.0:993" "/run/my-socket" ];
464+ For each item in this list, a <literal>ListenStream</literal>
465+ option in the <literal>[Socket]</literal> section will be created.
469+ listenDatagrams = mkOption {
302− default = "";
470+ default = [];
471+ type = types.listOf types.str;
472+ example = [ "0.0.0.0:993" "/run/my-socket" ];
303− description = ''
473+ description = ''
304− Shell commands executed after the service's main process
474+ For each item in this list, a <literal>ListenDatagram</literal>
305− is started.
475+ option in the <literal>[Socket]</literal> section will be created.
479+ socketConfig = mkOption {
481+ example = { ListenStream = "/run/my-socket"; };
482+ type = types.attrsOf unitOption;
484+ Each attribute in this set specifies an option in the
485+ <literal>[Socket]</literal> section of the unit. See
486+ <citerefentry><refentrytitle>systemd.socket</refentrytitle>
487+ <manvolnum>5</manvolnum></citerefentry> for details.
313− Shell commands executed when the service's main process
318− preStop = mkOption {
494+ stage2SocketOptions = {
319− type = types.lines;
495+ imports = [
320− default = "";
496+ stage2CommonUnitOptions
321− description = ''
497+ socketOptions
322− Shell commands executed to stop the service.
326− postStop = mkOption {
501+ stage1SocketOptions = {
327− type = types.lines;
502+ imports = [
328− default = "";
503+ stage1CommonUnitOptions
329− description = ''
504+ socketOptions
330− Shell commands executed after the service's main process
335− restartIfChanged = mkOption {
339− Whether the service should be restarted during a NixOS
340− configuration switch if its definition has changed.
344− reloadIfChanged = mkOption {
509+ timerOptions = {
345− type = types.bool;
510+ options = {
348− Whether the service should be reloaded during a NixOS
349− configuration switch if its definition has changed. If
350− enabled, the value of <option>restartIfChanged</option> is
353− This option should not be used anymore in favor of
354− <option>reloadTriggers</option> which allows more granular
355− control of when a service is reloaded and when a service
360− stopIfChanged = mkOption {
512+ timerConfig = mkOption {
514+ example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
361− type = types.bool;
515+ type = types.attrsOf unitOption;
363− description = ''
516+ description = ''
364− If set, a changed unit is restarted by calling
517+ Each attribute in this set specifies an option in the
365− <command>systemctl stop</command> in the old configuration,
518+ <literal>[Timer]</literal> section of the unit. See
366− then <command>systemctl start</command> in the new one.
519+ <citerefentry><refentrytitle>systemd.timer</refentrytitle>
367− Otherwise, it is restarted in a single step using
520+ <manvolnum>5</manvolnum></citerefentry> and
368− <command>systemctl restart</command> in the new configuration.
521+ <citerefentry><refentrytitle>systemd.time</refentrytitle>
369− The latter is less correct because it runs the
522+ <manvolnum>7</manvolnum></citerefentry> for details.
370− <literal>ExecStop</literal> commands from the new
375− startAt = mkOption {
376− type = with types; either str (listOf str);
378− example = "Sun 14:00:00";
380− Automatically start this unit at the given date/time, which
381− must be in the format described in
382− <citerefentry><refentrytitle>systemd.time</refentrytitle>
383− <manvolnum>7</manvolnum></citerefentry>. This is equivalent
384− to adding a corresponding timer unit with
385− <option>OnCalendar</option> set to the value given here.
387− apply = v: if isList v then v else [ v ];
529+ stage2TimerOptions = {
531+ stage2CommonUnitOptions
536+ stage1TimerOptions = {
538+ stage1CommonUnitOptions
393− socketOptions = commonUnitOptions // {
395− listenStreams = mkOption {
544+ pathOptions = {
396− default = [];
545+ options = {
397− type = types.listOf types.str;
398− example = [ "0.0.0.0:993" "/run/my-socket" ];
400− For each item in this list, a <literal>ListenStream</literal>
401− option in the <literal>[Socket]</literal> section will be created.
405− listenDatagrams = mkOption {
547+ pathConfig = mkOption {
406− default = [];
548+ default = {};
407− type = types.listOf types.str;
549+ example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
408− example = [ "0.0.0.0:993" "/run/my-socket" ];
550+ type = types.attrsOf unitOption;
409− description = ''
551+ description = ''
410− For each item in this list, a <literal>ListenDatagram</literal>
552+ Each attribute in this set specifies an option in the
411− option in the <literal>[Socket]</literal> section will be created.
553+ <literal>[Path]</literal> section of the unit. See
554+ <citerefentry><refentrytitle>systemd.path</refentrytitle>
555+ <manvolnum>5</manvolnum></citerefentry> for details.
415− socketConfig = mkOption {
417− example = { ListenStream = "/run/my-socket"; };
418− type = types.attrsOf unitOption;
420− Each attribute in this set specifies an option in the
421− <literal>[Socket]</literal> section of the unit. See
422− <citerefentry><refentrytitle>systemd.socket</refentrytitle>
423− <manvolnum>5</manvolnum></citerefentry> for details.
562+ stage2PathOptions = {
564+ stage2CommonUnitOptions
430− timerOptions = commonUnitOptions // {
569+ stage1PathOptions = {
432− timerConfig = mkOption {
571+ stage1CommonUnitOptions
433− default = {};
572+ pathOptions
434− example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
435− type = types.attrsOf unitOption;
437− Each attribute in this set specifies an option in the
438− <literal>[Timer]</literal> section of the unit. See
439− <citerefentry><refentrytitle>systemd.timer</refentrytitle>
440− <manvolnum>5</manvolnum></citerefentry> and
441− <citerefentry><refentrytitle>systemd.time</refentrytitle>
442− <manvolnum>7</manvolnum></citerefentry> for details.
449− pathOptions = commonUnitOptions // {
577+ mountOptions = {
581+ example = "/dev/sda1";
583+ description = "Absolute path of device node, file or other resource. (Mandatory)";
590+ Absolute path of a directory of the mount point.
591+ Will be created if it doesn't exist. (Mandatory)
599+ description = "File system type.";
602+ options = mkOption {
604+ example = "noatime";
605+ type = types.commas;
606+ description = "Options used to mount the file system.";
609+ mountConfig = mkOption {
611+ example = { DirectoryMode = "0775"; };
612+ type = types.attrsOf unitOption;
614+ Each attribute in this set specifies an option in the
615+ <literal>[Mount]</literal> section of the unit. See
616+ <citerefentry><refentrytitle>systemd.mount</refentrytitle>
617+ <manvolnum>5</manvolnum></citerefentry> for details.
451− pathConfig = mkOption {
453− example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
454− type = types.attrsOf unitOption;
456− Each attribute in this set specifies an option in the
457− <literal>[Path]</literal> section of the unit. See
458− <citerefentry><refentrytitle>systemd.path</refentrytitle>
459− <manvolnum>5</manvolnum></citerefentry> for details.
624+ stage2MountOptions = {
626+ stage2CommonUnitOptions
631+ stage1MountOptions = {
633+ stage1CommonUnitOptions
466− mountOptions = commonUnitOptions // {
634+ mountOptions
469− example = "/dev/sda1";
471− description = "Absolute path of device node, file or other resource. (Mandatory)";
638+ automountOptions = {
474− where = mkOption {
641+ where = mkOption {
475− example = "/mnt";
642+ example = "/mnt";
476− type = types.str;
643+ type = types.str;
477− description = ''
644+ description = ''
478− Absolute path of a directory of the mount point.
645+ Absolute path of a directory of the mount point.
479− Will be created if it doesn't exist. (Mandatory)
646+ Will be created if it doesn't exist. (Mandatory)
650+ automountConfig = mkOption {
652+ example = { DirectoryMode = "0775"; };
653+ type = types.attrsOf unitOption;
655+ Each attribute in this set specifies an option in the
656+ <literal>[Automount]</literal> section of the unit. See
657+ <citerefentry><refentrytitle>systemd.automount</refentrytitle>
658+ <manvolnum>5</manvolnum></citerefentry> for details.
487− description = "File system type.";
490− options = mkOption {
665+ stage2AutomountOptions = {
491− default = "";
666+ imports = [
492− example = "noatime";
667+ stage2CommonUnitOptions
493− type = types.commas;
668+ automountOptions
494− description = "Options used to mount the file system.";
669+ ];
497− mountConfig = mkOption {
672+ stage1AutomountOptions = {
498− default = {};
673+ imports = [
499− example = { DirectoryMode = "0775"; };
674+ stage1CommonUnitOptions
500− type = types.attrsOf unitOption;
675+ automountOptions
502− Each attribute in this set specifies an option in the
503− <literal>[Mount]</literal> section of the unit. See
504− <citerefentry><refentrytitle>systemd.mount</refentrytitle>
505− <manvolnum>5</manvolnum></citerefentry> for details.
510− automountOptions = commonUnitOptions // {
679+ sliceOptions = {
512− where = mkOption {
682+ sliceConfig = mkOption {
513− example = "/mnt";
684+ example = { MemoryMax = "2G"; };
514− type = types.str;
685+ type = types.attrsOf unitOption;
515− description = ''
686+ description = ''
516− Absolute path of a directory of the mount point.
687+ Each attribute in this set specifies an option in the
517− Will be created if it doesn't exist. (Mandatory)
688+ <literal>[Slice]</literal> section of the unit. See
689+ <citerefentry><refentrytitle>systemd.slice</refentrytitle>
690+ <manvolnum>5</manvolnum></citerefentry> for details.
521− automountConfig = mkOption {
523− example = { DirectoryMode = "0775"; };
524− type = types.attrsOf unitOption;
526− Each attribute in this set specifies an option in the
527− <literal>[Automount]</literal> section of the unit. See
528− <citerefentry><refentrytitle>systemd.automount</refentrytitle>
529− <manvolnum>5</manvolnum></citerefentry> for details.
534− targetOptions = commonUnitOptions;
697+ stage2SliceOptions = {
536− sliceOptions = commonUnitOptions // {
699+ stage2CommonUnitOptions
538− sliceConfig = mkOption {
540− example = { MemoryMax = "2G"; };
541− type = types.attrsOf unitOption;
543− Each attribute in this set specifies an option in the
544− <literal>[Slice]</literal> section of the unit. See
545− <citerefentry><refentrytitle>systemd.slice</refentrytitle>
546− <manvolnum>5</manvolnum></citerefentry> for details.
704+ stage1SliceOptions = {
706+ stage1CommonUnitOptions
nixos/lib/test-driver/test_driver/driver.py+1−1
@@ -86,7 +86,7 @@ class Driver:
87 def subtest(self, name: str) -> Iterator[None]:
87 def subtest(self, name: str) -> Iterator[None]:
88 """Group logs under a given test name"""
88 """Group logs under a given test name"""
89− with rootlog.nested(name):
89+ with rootlog.nested("subtest: " + name):
92 return True
92 return True
nixos/lib/test-driver/test_driver/logger.py+6−2
@@ -1,4 +1,4 @@
1−from colorama import Style
1+from colorama import Style, Fore
2from contextlib import contextmanager
2from contextlib import contextmanager
3from typing import Any, Dict, Iterator
3from typing import Any, Dict, Iterator
4from queue import Queue, Empty
4from queue import Queue, Empty
@@ -81,7 +81,11 @@ class Logger:
82 @contextmanager
82 @contextmanager
83 def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
83 def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
84− self._eprint(self.maybe_prefix(message, attributes))
85+ self.maybe_prefix(
86+ Style.BRIGHT + Fore.GREEN + message + Style.RESET_ALL, attributes
86 self.xml.startElement("nest", attrs={})
90 self.xml.startElement("nest", attrs={})
87 self.xml.startElement("head", attributes)
91 self.xml.startElement("head", attributes)
nixos/lib/test-driver/test_driver/machine.py+9−2
@@ -526,10 +526,17 @@ class Machine:
526 self.run_callbacks()
526 self.run_callbacks()
527 self.connect()
527 self.connect()
529+ # Always run command with shell opts
530+ command = f"set -euo pipefail; {command}"
529 if timeout is not None:
533 if timeout is not None:
534+ timeout_str = f"timeout {timeout}"
530− command = "timeout {} sh -c {}".format(timeout, shlex.quote(command))
537+ f"{timeout_str} sh -c {shlex.quote(command)} | (base64 --wrap 0; echo)\n"
532− out_command = f"( set -euo pipefail; {command} ) | (base64 --wrap 0; echo)\n"
533 assert self.shell
540 assert self.shell
534 self.shell.send(out_command.encode())
541 self.shell.send(out_command.encode())
@@ -194,8 +194,25 @@ rec {
194 (( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit
194 (( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit
197+ /* Remove packages of packagesToRemove from packages, based on their names.
198+ Relies on package names and has quadratic complexity so use with caution!
201+ removePackagesByName :: [package] -> [package] -> [package]
204+ removePackagesByName [ nautilus file-roller ] [ file-roller totem ]
207+ removePackagesByName = packages: packagesToRemove:
209+ namesToRemove = map lib.getName packagesToRemove;
211+ lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages;
197 systemdUtils = {
213 systemdUtils = {
198 lib = import ./systemd-lib.nix { inherit lib config pkgs; };
214 lib = import ./systemd-lib.nix { inherit lib config pkgs; };
199 unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
215 unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
216+ types = import ./systemd-types.nix { inherit lib systemdUtils pkgs; };
nixos/maintainers/scripts/ec2/amazon-image.nix+1−1
@@ -73,7 +73,7 @@ in {
76− zfsBuilder = import ../../../lib/make-zfs-image.nix {
76+ zfsBuilder = import ../../../lib/make-multi-disk-zfs-image.nix {
77 inherit lib config configFile;
77 inherit lib config configFile;
78 inherit (cfg) contents format name;
78 inherit (cfg) contents format name;
79 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
79 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
nixos/maintainers/scripts/lxd/lxd-image.nix+1−1
@@ -27,7 +27,7 @@ with lib;
27 networking.useDHCP = false;
27 networking.useDHCP = false;
28 networking.interfaces.eth0.useDHCP = true;
28 networking.interfaces.eth0.useDHCP = true;
30− # As this is intended as a stadalone image, undo some of the minimal profile stuff
30+ # As this is intended as a standalone image, undo some of the minimal profile stuff
31 documentation.enable = true;
31 documentation.enable = true;
32 documentation.nixos.enable = true;
32 documentation.nixos.enable = true;
33 environment.noXlibs = false;
33 environment.noXlibs = false;
nixos/maintainers/scripts/openstack/openstack-image-zfs.nixnew file+101
@@ -0,0 +1,101 @@
1+# nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
3+{ config, lib, pkgs, ... }:
5+ inherit (lib) mkOption types;
7+ cfg = config.openstackImage;
8+ imageBootMode = if config.openstack.efi then "uefi" else "legacy-bios";
12+ ../../../modules/virtualisation/openstack-config.nix
13+ ] ++ (lib.optional copyChannel ../../../modules/installer/cd-dvd/channel.nix);
16+ options.openstackImage = {
19+ description = "The name of the generated derivation";
20+ default = "nixos-openstack-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
26+ description = "The size in MB of the image";
30+ type = types.enum [ "raw" "qcow2" ];
32+ description = "The image format to output";
37+ documentation.enable = copyChannel;
43+ "tank/system/root".mount = "/";
44+ "tank/system/var".mount = "/var";
45+ "tank/local/nix".mount = "/nix";
46+ "tank/user/home".mount = "/home";
51+ system.build.openstackImage = import ../../../lib/make-single-disk-zfs-image.nix {
53+ inherit (cfg) contents format name;
54+ pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
56+ configFile = pkgs.writeText "configuration.nix"
58+ { modulesPath, ... }: {
59+ imports = [ "''${modulesPath}/virtualisation/openstack-config.nix" ];
60+ openstack.zfs.enable = true;
64+ includeChannel = copyChannel;
68+ rootSize = cfg.sizeMB;
69+ rootPoolProperties = {
74+ datasets = config.openstack.zfs.datasets;
77+ extension=''${rootDiskImage##*.}
78+ friendlyName=$out/${cfg.name}
79+ rootDisk="$friendlyName.root.$extension"
80+ mv "$rootDiskImage" "$rootDisk"
82+ mkdir -p $out/nix-support
83+ echo "file ${cfg.format} $rootDisk" >> $out/nix-support/hydra-build-products
85+ ${pkgs.jq}/bin/jq -n \
86+ --arg system_label ${lib.escapeShellArg config.system.nixos.label} \
87+ --arg system ${lib.escapeShellArg pkgs.stdenv.hostPlatform.system} \
88+ --arg root_logical_bytes "$(${pkgs.qemu}/bin/qemu-img info --output json "$rootDisk" | ${pkgs.jq}/bin/jq '."virtual-size"')" \
89+ --arg boot_mode "${imageBootMode}" \
90+ --arg root "$rootDisk" \
92+ | .label = $system_label
93+ | .boot_mode = $boot_mode
95+ | .disks.root.logical_bytes = $root_logical_bytes
96+ | .disks.root.file = $root
97+ ' > $out/nix-support/image-info.json
nixos/maintainers/scripts/openstack/openstack-image.nix+9−8
@@ -1,17 +1,18 @@
1# nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
1# nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
3{ config, lib, pkgs, ... }:
3{ config, lib, pkgs, ... }:
5−with lib;
5+ copyChannel = true;
8− imports =
8+ imports = [
9+ ../../../modules/virtualisation/openstack-config.nix
9− [ ../../../modules/installer/cd-dvd/channel.nix
10+ ] ++ (lib.optional copyChannel ../../../modules/installer/cd-dvd/channel.nix);
10− ../../../modules/virtualisation/openstack-config.nix
11+
11− ];
12+ documentation.enable = copyChannel;
13 system.build.openstackImage = import ../../../lib/make-disk-image.nix {
14 system.build.openstackImage = import ../../../lib/make-disk-image.nix {
14− inherit lib config;
15+ inherit lib config copyChannel;
15 additionalSpace = "1024M";
16 additionalSpace = "1024M";
16 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
17 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
17 format = "qcow2";
18 format = "qcow2";
nixos/modules/config/console.nix+23−9
@@ -12,7 +12,7 @@ let
13 optimizedKeymap = pkgs.runCommand "keymap" {
13 optimizedKeymap = pkgs.runCommand "keymap" {
14 nativeBuildInputs = [ pkgs.buildPackages.kbd ];
14 nativeBuildInputs = [ pkgs.buildPackages.kbd ];
15− LOADKEYS_KEYMAP_PATH = "${consoleEnv}/share/keymaps/**";
15+ LOADKEYS_KEYMAP_PATH = "${consoleEnv pkgs.kbd}/share/keymaps/**";
16 preferLocalBuild = true;
16 preferLocalBuild = true;
18 loadkeys -b ${optionalString isUnicode "-u"} "${cfg.keyMap}" > $out
18 loadkeys -b ${optionalString isUnicode "-u"} "${cfg.keyMap}" > $out
@@ -24,9 +24,9 @@ let
24 FONT=${cfg.font}
24 FONT=${cfg.font}
27− consoleEnv = pkgs.buildEnv {
27+ consoleEnv = kbd: pkgs.buildEnv {
28 name = "console-env";
28 name = "console-env";
29− paths = [ pkgs.kbd ] ++ cfg.packages;
29+ paths = [ kbd ] ++ cfg.packages;
30 pathsToLink = [
30 pathsToLink = [
31 "/share/consolefonts"
31 "/share/consolefonts"
32 "/share/consoletrans"
32 "/share/consoletrans"
@@ -136,9 +136,9 @@ in
136 # virtual consoles.
136 # virtual consoles.
137 environment.etc."vconsole.conf".source = vconsoleConf;
137 environment.etc."vconsole.conf".source = vconsoleConf;
138 # Provide kbd with additional packages.
138 # Provide kbd with additional packages.
139− environment.etc.kbd.source = "${consoleEnv}/share";
139+ environment.etc.kbd.source = "${consoleEnv pkgs.kbd}/share";
141− boot.initrd.preLVMCommands = mkBefore ''
141+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (mkBefore ''
142 kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console
142 kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console
143 printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console
143 printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console
144 loadkmap < ${optimizedKeymap}
144 loadkmap < ${optimizedKeymap}
@@ -146,12 +146,26 @@ in
146 ${optionalString cfg.earlySetup ''
146 ${optionalString cfg.earlySetup ''
147 setfont -C /dev/console $extraUtils/share/consolefonts/font.psf
147 setfont -C /dev/console $extraUtils/share/consolefonts/font.psf
151+ boot.initrd.systemd.contents = {
152+ "/etc/vconsole.conf".source = vconsoleConf;
153+ # Add everything if we want full console setup...
154+ "/etc/kbd" = lib.mkIf cfg.earlySetup { source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share"; };
155+ # ...but only the keymaps if we don't
156+ "/etc/kbd/keymaps" = lib.mkIf (!cfg.earlySetup) { source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share/keymaps"; };
158+ boot.initrd.systemd.storePaths = [
159+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-vconsole-setup"
160+ "${config.boot.initrd.systemd.package.kbd}/bin/setfont"
161+ "${config.boot.initrd.systemd.package.kbd}/bin/loadkeys"
162+ "${config.boot.initrd.systemd.package.kbd.gzip}/bin/gzip" # keyboard layouts are compressed
151 systemd.services.reload-systemd-vconsole-setup =
165 systemd.services.reload-systemd-vconsole-setup =
152 { description = "Reset console on configuration changes";
166 { description = "Reset console on configuration changes";
153 wantedBy = [ "multi-user.target" ];
167 wantedBy = [ "multi-user.target" ];
154− restartTriggers = [ vconsoleConf consoleEnv ];
168+ restartTriggers = [ vconsoleConf (consoleEnv pkgs.kbd) ];
155 reloadIfChanged = true;
169 reloadIfChanged = true;
156 serviceConfig =
170 serviceConfig =
157 { RemainAfterExit = true;
171 { RemainAfterExit = true;
@@ -169,13 +183,13 @@ in
172− (mkIf cfg.earlySetup {
186+ (mkIf (cfg.earlySetup && !config.boot.initrd.systemd.enable) {
173 boot.initrd.extraUtilsCommands = ''
187 boot.initrd.extraUtilsCommands = ''
174 mkdir -p $out/share/consolefonts
188 mkdir -p $out/share/consolefonts
175 ${if substring 0 1 cfg.font == "/" then ''
189 ${if substring 0 1 cfg.font == "/" then ''
176 font="${cfg.font}"
190 font="${cfg.font}"
177 '' else ''
191 '' else ''
178− font="$(echo ${consoleEnv}/share/consolefonts/${cfg.font}.*)"
192+ font="$(echo ${consoleEnv pkgs.kbd}/share/consolefonts/${cfg.font}.*)"
180 if [[ $font == *.gz ]]; then
194 if [[ $font == *.gz ]]; then
181 gzip -cd $font > $out/share/consolefonts/font.psf
195 gzip -cd $font > $out/share/consolefonts/font.psf
nixos/modules/config/nsswitch.nix+7−4
@@ -95,11 +95,14 @@ with lib;
95 config = {
95 config = {
96 assertions = [
96 assertions = [
98− # Prevent users from disabling nscd, with nssModules being set.
99− # If disabling nscd is really necessary, it's still possible to opt out
100− # by forcing config.system.nssModules to [].
101 assertion = config.system.nssModules.path != "" -> config.services.nscd.enable;
98 assertion = config.system.nssModules.path != "" -> config.services.nscd.enable;
102− message = "Loading NSS modules from system.nssModules (${config.system.nssModules.path}), requires services.nscd.enable being set to true.";
100+ Loading NSS modules from system.nssModules (${config.system.nssModules.path}),
101+ requires services.nscd.enable being set to true.
103+ If disabling nscd is really necessary, it is possible to disable loading NSS modules
104+ by setting `system.nssModules = lib.mkForce [];` in your configuration.nix.
nixos/modules/config/terminfo.nix+25−1
@@ -1,9 +1,33 @@
1# This module manages the terminfo database
1# This module manages the terminfo database
2# and its integration in the system.
2# and its integration in the system.
3−{ config, ... }:
3+{ config, lib, pkgs, ... }:
9+ options.environment.enableAllTerminfo = with lib; mkOption {
13+ Whether to install all terminfo outputs
5 config = {
17 config = {
19+ # can be generated with: filter (drv: (builtins.tryEval (drv ? terminfo)).value) (attrValues pkgs)
20+ environment.systemPackages = mkIf config.environment.enableAllTerminfo (map (x: x.terminfo) (with pkgs; [
25+ rxvt-unicode-unwrapped
26+ rxvt-unicode-unwrapped-emoji
7 environment.pathsToLink = [
31 environment.pathsToLink = [
8 "/share/terminfo"
32 "/share/terminfo"
nixos/modules/hardware/all-firmware.nix+7−3
@@ -27,7 +27,8 @@ in {
29 hardware.enableRedistributableFirmware = mkOption {
29 hardware.enableRedistributableFirmware = mkOption {
30− default = false;
30+ default = config.hardware.enableAllFirmware;
31+ defaultText = lib.literalExpression "config.hardware.enableAllFirmware";
31 type = types.bool;
32 type = types.bool;
32 description = ''
33 description = ''
33 Turn on this option if you want to enable all the firmware with a license allowing redistribution.
34 Turn on this option if you want to enable all the firmware with a license allowing redistribution.
@@ -71,7 +72,7 @@ in {
72 (mkIf cfg.enableAllFirmware {
73 (mkIf cfg.enableAllFirmware {
73 assertions = [{
74 assertions = [{
74− assertion = !cfg.enableAllFirmware || (config.nixpkgs.config.allowUnfree or false);
75+ assertion = !cfg.enableAllFirmware || config.nixpkgs.config.allowUnfree;
75 message = ''
76 message = ''
76 the list of hardware.enableAllFirmware contains non-redistributable licensed firmware files.
77 the list of hardware.enableAllFirmware contains non-redistributable licensed firmware files.
77 This requires nixpkgs.config.allowUnfree to be true.
78 This requires nixpkgs.config.allowUnfree to be true.
@@ -84,7 +85,10 @@ in {
84 b43Firmware_6_30_163_46
85 b43Firmware_6_30_163_46
85 b43FirmwareCutter
86 b43FirmwareCutter
86 xow_dongle-firmware
87 xow_dongle-firmware
87− ] ++ optional pkgs.stdenv.hostPlatform.isx86 facetimehd-firmware;
88+ ] ++ optionals pkgs.stdenv.hostPlatform.isx86 [
89+ facetimehd-calibration
89 (mkIf cfg.wirelessRegulatoryDatabase {
93 (mkIf cfg.wirelessRegulatoryDatabase {
90 hardware.firmware = [ pkgs.wireless-regdb ];
94 hardware.firmware = [ pkgs.wireless-regdb ];
nixos/modules/hardware/raid/hpsa.nix+4−1
@@ -8,7 +8,10 @@ let
8 version = "2.40-13.0";
8 version = "2.40-13.0";
10 src = pkgs.fetchurl {
10 src = pkgs.fetchurl {
11− url = "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/${pname}-${version}_amd64.deb";
12+ "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/${pname}-${version}_amd64.deb"
13+ "http://apt.netangels.net/pool/main/h/hpssacli/${pname}-${version}_amd64.deb"
12 sha256 = "11w7fwk93lmfw0yya4jpjwdmgjimqxx6412sqa166g1pz4jil4sw";
15 sha256 = "11w7fwk93lmfw0yya4jpjwdmgjimqxx6412sqa166g1pz4jil4sw";
nixos/modules/hardware/video/amdgpu-pro.nix+2−1
@@ -51,9 +51,10 @@ in
51 (isYes "KALLSYMS_ALL")
51 (isYes "KALLSYMS_ALL")
54− boot.initrd.extraUdevRulesCommands = ''
54+ boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable) ''
55 cp -v ${package}/etc/udev/rules.d/*.rules $out/
55 cp -v ${package}/etc/udev/rules.d/*.rules $out/
57+ boot.initrd.services.udev.packages = [ package ];
58 environment.systemPackages =
59 environment.systemPackages =
59 [ package.vulkan ] ++
60 [ package.vulkan ] ++
nixos/modules/hardware/video/nvidia.nix+9−7
@@ -24,6 +24,7 @@ let
24 primeEnabled = syncCfg.enable || offloadCfg.enable;
24 primeEnabled = syncCfg.enable || offloadCfg.enable;
25 nvidiaPersistencedEnabled = cfg.nvidiaPersistenced;
25 nvidiaPersistencedEnabled = cfg.nvidiaPersistenced;
26 nvidiaSettings = cfg.nvidiaSettings;
26 nvidiaSettings = cfg.nvidiaSettings;
27+ busIDType = types.strMatching "([[:print:]]+\:[0-9]{1,3}\:[0-9]{1,2}\:[0-9])?";
@@ -68,7 +69,7 @@ in
70 hardware.nvidia.prime.nvidiaBusId = mkOption {
71 hardware.nvidia.prime.nvidiaBusId = mkOption {
71− type = types.str;
72+ type = busIDType;
72 default = "";
73 default = "";
73 example = "PCI:1:0:0";
74 example = "PCI:1:0:0";
74 description = ''
75 description = ''
@@ -78,7 +79,7 @@ in
80 hardware.nvidia.prime.intelBusId = mkOption {
81 hardware.nvidia.prime.intelBusId = mkOption {
81− type = types.str;
82+ type = busIDType;
82 default = "";
83 default = "";
83 example = "PCI:0:2:0";
84 example = "PCI:0:2:0";
84 description = ''
85 description = ''
@@ -88,7 +89,7 @@ in
90 hardware.nvidia.prime.amdgpuBusId = mkOption {
91 hardware.nvidia.prime.amdgpuBusId = mkOption {
91− type = types.str;
92+ type = busIDType;
92 default = "";
93 default = "";
93 example = "PCI:4:0:0";
94 example = "PCI:4:0:0";
94 description = ''
95 description = ''
@@ -360,11 +361,12 @@ in
360 services.udev.extraRules =
361 services.udev.extraRules =
362 # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
363 # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
363− KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'"
364+ KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c 195 255'"
364− KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'"
365+ KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c 195 254'"
366+ KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", PROGRAM="${pkgs.gnugrep}/bin/grep 'Device Minor:' /proc/driver/nvidia/gpus/%b/information", \
365− KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia%n c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) %n'"
367+ RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia%c{3} c 195 %c{3}"
366 KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
368 KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
367− KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
369+ KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'"
368 '' + optionalString cfg.powerManagement.finegrained ''
370 '' + optionalString cfg.powerManagement.finegrained ''
369 # Remove NVIDIA USB xHCI Host Controller devices, if present
371 # Remove NVIDIA USB xHCI Host Controller devices, if present
370 ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1"
372 ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1"
nixos/modules/hardware/video/webcam/facetimehd.nix+14−6
@@ -14,12 +14,19 @@ in
15 options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
15 options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
17− config = mkIf cfg.enable {
17+ options.hardware.facetimehd.withCalibration = mkOption {
22+ Whether to include sensor calibration files for facetimehd.
23+ This makes colors look much better but is experimental, see
24+ <link xlink:href="https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files"/>
19− assertions = singleton {
29+ config = mkIf cfg.enable {
20− assertion = versionAtLeast kernelPackages.kernel.version "3.19";
21− message = "facetimehd is not supported for kernels older than 3.19";
24 boot.kernelModules = [ "facetimehd" ];
31 boot.kernelModules = [ "facetimehd" ];
@@ -27,7 +34,8 @@ in
28 boot.extraModulePackages = [ kernelPackages.facetimehd ];
35 boot.extraModulePackages = [ kernelPackages.facetimehd ];
30− hardware.firmware = [ pkgs.facetimehd-firmware ];
37+ hardware.firmware = [ pkgs.facetimehd-firmware ]
38+ ++ optional cfg.withCalibration pkgs.facetimehd-calibration;
32 # unload module during suspend/hibernate as it crashes the whole system
40 # unload module during suspend/hibernate as it crashes the whole system
33 powerManagement.powerDownCommands = ''
41 powerManagement.powerDownCommands = ''
nixos/modules/i18n/input-method/fcitx5.nix+20−11
@@ -5,7 +5,9 @@ with lib;
6 im = config.i18n.inputMethod;
6 im = config.i18n.inputMethod;
7 cfg = im.fcitx5;
7 cfg = im.fcitx5;
8+ addons = cfg.addons ++ optional cfg.enableRimeData pkgs.rime-data;
8− fcitx5Package = pkgs.fcitx5-with-addons.override { inherit (cfg) addons; };
9+ fcitx5Package = pkgs.fcitx5-with-addons.override { inherit addons; };
10+ whetherRimeDataDir = any (p: p.pname == "fcitx5-rime") cfg.addons;
10 options = {
12 options = {
11 i18n.inputMethod.fcitx5 = {
13 i18n.inputMethod.fcitx5 = {
@@ -17,22 +19,29 @@ in {
17 Enabled Fcitx5 addons.
19 Enabled Fcitx5 addons.
23+ enableRimeData = mkEnableOption "default rime-data with fcitx5-rime";
23 config = mkIf (im.enabled == "fcitx5") {
27 config = mkIf (im.enabled == "fcitx5") {
24 i18n.inputMethod.package = fcitx5Package;
28 i18n.inputMethod.package = fcitx5Package;
30+ environment = mkMerge [{
26− environment.variables = {
31+ variables = {
27− GTK_IM_MODULE = "fcitx";
32+ GTK_IM_MODULE = "fcitx";
28− QT_IM_MODULE = "fcitx";
33+ QT_IM_MODULE = "fcitx";
29− XMODIFIERS = "@im=fcitx";
34+ XMODIFIERS = "@im=fcitx";
37+ (mkIf whetherRimeDataDir {
32− systemd.user.services.fcitx5-daemon = {
42+ variables = {
33− enable = true;
43+ NIX_RIME_DATA_DIR = "/run/current-system/sw/share/rime-data";
34− script = "${fcitx5Package}/bin/fcitx5";
44+ };
35− wantedBy = [ "graphical-session.target" ];
45+ })];
nixos/modules/installer/cd-dvd/channel.nix+2−1
@@ -39,7 +39,8 @@ in
39 echo "unpacking the NixOS/Nixpkgs sources..."
39 echo "unpacking the NixOS/Nixpkgs sources..."
40 mkdir -p /nix/var/nix/profiles/per-user/root
40 mkdir -p /nix/var/nix/profiles/per-user/root
41 ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/per-user/root/channels \
41 ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/per-user/root/channels \
42− -i ${channelSources} --quiet --option build-use-substitutes false
42+ -i ${channelSources} --quiet --option build-use-substitutes false \
43+ ${optionalString config.boot.initrd.systemd.enable "--option sandbox false"} # There's an issue with pivot_root
43 mkdir -m 0700 -p /root/.nix-defexpr
44 mkdir -m 0700 -p /root/.nix-defexpr
44 ln -s /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
45 ln -s /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
45 mkdir -m 0755 -p /var/lib/nixos
46 mkdir -m 0755 -p /var/lib/nixos
nixos/modules/installer/cd-dvd/installation-cd-graphical-base.nix+14−8
@@ -35,22 +35,28 @@ with lib;
35 # Enable sound in graphical iso's.
35 # Enable sound in graphical iso's.
36 hardware.pulseaudio.enable = true;
36 hardware.pulseaudio.enable = true;
38− environment.systemPackages = [
38+ # Spice guest additions
39+ services.spice-vdagentd.enable = true;
42+ boot.plymouth.enable = true;
44+ environment.defaultPackages = with pkgs; [
39 # Include gparted for partitioning disks.
45 # Include gparted for partitioning disks.
40− pkgs.gparted
46+ gparted
42 # Include some editors.
48 # Include some editors.
44− pkgs.bvi # binary editor
50+ nano
47 # Include some version control tools.
52 # Include some version control tools.
50 # Firefox for reading the manual.
56 # Firefox for reading the manual.
51− pkgs.firefox
57+ firefox
53− pkgs.glxinfo
59+ glxinfo
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nixnew file+59
@@ -0,0 +1,59 @@
1+# This module defines a NixOS installation CD that contains GNOME.
6+ imports = [ ./installation-cd-graphical-calamares.nix ];
8+ isoImage.edition = "gnome";
10+ services.xserver.desktopManager.gnome = {
11+ # Add Firefox and other tools useful for installation to the launcher
12+ favoriteAppsOverride = ''
14+ favorite-apps=[ 'firefox.desktop', 'nixos-manual.desktop', 'org.gnome.Console.desktop', 'org.gnome.Nautilus.desktop', 'gparted.desktop', 'io.calamares.calamares.desktop' ]
17+ # Override GNOME defaults to disable GNOME tour and disable suspend
18+ extraGSettingsOverrides = ''
20+ welcome-dialog-last-shown-version='9999999999'
22+ [org.gnome.settings-daemon.plugins.power]
23+ sleep-inactive-ac-type='nothing'
24+ sleep-inactive-battery-type='nothing'
27+ extraGSettingsOverridePackages = [ pkgs.gnome.gnome-settings-daemon ];
32+ # Theme calamares with GNOME theme
35+ platformTheme = "gnome";
38+ # Fix scaling for calamares on wayland
39+ environment.variables = {
40+ QT_QPA_PLATFORM = "$([[ $XDG_SESSION_TYPE = \"wayland\" ]] && echo \"wayland\")";
43+ services.xserver.displayManager = {
46+ # autoSuspend makes the machine automatically suspend after inactivity.
47+ # It's possible someone could/try to ssh'd into the machine and obviously
48+ # have issues because it's inactive.
50+ # * https://github.com/NixOS/nixpkgs/pull/63790
51+ # * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nixnew file+49
@@ -0,0 +1,49 @@
1+# This module defines a NixOS installation CD that contains X11 and
7+ imports = [ ./installation-cd-graphical-calamares.nix ];
9+ isoImage.edition = "plasma5";
12+ desktopManager.plasma5 = {
16+ # Automatically login as nixos.
26+ environment.systemPackages = with pkgs; [
27+ # Graphical text editor
31+ system.activationScripts.installerDesktop = let
33+ # Comes from documentation.nix when xserver and nixos.enable are true.
34+ manualDesktopFile = "/run/current-system/sw/share/applications/nixos-manual.desktop";
36+ homeDir = "/home/nixos/";
37+ desktopDir = homeDir + "Desktop/";
40+ mkdir -p ${desktopDir}
41+ chown nixos ${homeDir} ${desktopDir}
43+ ln -sfT ${manualDesktopFile} ${desktopDir + "nixos-manual.desktop"}
44+ ln -sfT ${pkgs.gparted}/share/applications/gparted.desktop ${desktopDir + "gparted.desktop"}
45+ ln -sfT ${pkgs.konsole}/share/applications/org.kde.konsole.desktop ${desktopDir + "org.kde.konsole.desktop"}
46+ ln -sfT ${pkgs.calamares-nixos}/share/applications/io.calamares.calamares.desktop ${desktopDir + "io.calamares.calamares.desktop"}
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nixnew file+20
@@ -0,0 +1,20 @@
1+# This module adds the calamares installer to the basic graphical NixOS
6+ calamares-nixos-autostart = pkgs.makeAutostartItem { name = "io.calamares.calamares"; package = pkgs.calamares-nixos; };
9+ imports = [ ./installation-cd-graphical-base.nix ];
11+ environment.systemPackages = with pkgs; [
12+ # Calamares for graphical installation
15+ calamares-nixos-autostart
16+ calamares-nixos-extensions
17+ # Needed for calamares QML module packagechooserq
nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix+1−3
@@ -1,8 +1,6 @@
1# This module defines a NixOS installation CD that contains GNOME.
1# This module defines a NixOS installation CD that contains GNOME.
3−{ lib, ... }:
3+{ ... }:
8 imports = [ ./installation-cd-graphical-base.nix ];
6 imports = [ ./installation-cd-graphical-base.nix ];
nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix+1−3
@@ -1,9 +1,7 @@
1# This module defines a NixOS installation CD that contains X11 and
1# This module defines a NixOS installation CD that contains X11 and
4−{ config, lib, pkgs, ... }:
4+{ pkgs, ... }:
9 imports = [ ./installation-cd-graphical-base.nix ];
7 imports = [ ./installation-cd-graphical-base.nix ];
nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix+3−3
@@ -87,19 +87,19 @@ in
87 boot.initrd.availableKernelModules =
87 boot.initrd.availableKernelModules =
88 [ "mvsdio" "reiserfs" "ext3" "ums-cypress" "rtc_mv" "ext4" ];
88 [ "mvsdio" "reiserfs" "ext3" "ums-cypress" "rtc_mv" "ext4" ];
90− boot.postBootCommands =
90+ boot.postBootCommands = lib.mkIf (!boot.initrd.systemd.enable)
92 mkdir -p /mnt
92 mkdir -p /mnt
94 cp ${dummyConfiguration} /etc/nixos/configuration.nix
94 cp ${dummyConfiguration} /etc/nixos/configuration.nix
97− boot.initrd.extraUtilsCommands =
97+ boot.initrd.extraUtilsCommands = lib.mkIf (!boot.initrd.systemd.enable)
99 copy_bin_and_libs ${pkgs.util-linux}/sbin/hwclock
99 copy_bin_and_libs ${pkgs.util-linux}/sbin/hwclock
102− boot.initrd.postDeviceCommands =
102+ boot.initrd.postDeviceCommands = lib.mkIf (!boot.initrd.systemd.enable)
104 hwclock -s
104 hwclock -s
nixos/modules/installer/kexec/kexec-boot.nixnew file+51
@@ -0,0 +1,51 @@
1+# This module exposes a config.system.build.kexecBoot attribute,
2+# which returns a directory with kernel, initrd and a shell script
3+# running the necessary kexec commands.
5+# It's meant to be scp'ed to a machine with working ssh and kexec binary
8+# This is useful for (cloud) providers where you can't boot a custom image, but
9+# get some Debian or Ubuntu installation.
18+ (modulesPath + "/installer/netboot/netboot-minimal.nix")
22+ system.build.kexecBoot =
24+ kexecScript = pkgs.writeScript "kexec-boot" ''
26+ if ! kexec -v >/dev/null 2>&1; then
27+ echo "kexec not found: please install kexec-tools" 2>&1
30+ SCRIPT_DIR=$( cd -- "$( dirname -- "''${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
31+ kexec --load ''${SCRIPT_DIR}/bzImage \
32+ --initrd=''${SCRIPT_DIR}/initrd.gz \
33+ --command-line "init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}"
36+ pkgs.linkFarm "kexec-tree" [
39+ path = "${config.system.build.netbootRamdisk}/initrd";
43+ path = "${config.system.build.kernel}/${config.system.boot.loader.kernelFile}";
nixos/modules/installer/sd-card/sd-image-aarch64.nix+9
@@ -39,6 +39,12 @@
39 # Supported in newer board revisions
39 # Supported in newer board revisions
40 arm_boost=1
40 arm_boost=1
43+ # Enable host mode on the 2711 built-in XHCI USB controller.
44+ # This line should be removed if the legacy DWC2 controller is required
45+ # (e.g. for USB device mode) or if USB support is not required.
43 # Boot in 64-bit mode.
49 # Boot in 64-bit mode.
44 arm_64bit=1
50 arm_64bit=1
@@ -65,6 +71,9 @@
65 cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
71 cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
66 cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
72 cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
67 cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/
73 cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/
74+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-400.dtb firmware/
75+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4.dtb firmware/
76+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4s.dtb firmware/
69 populateRootCommands = ''
78 populateRootCommands = ''
70 mkdir -p ./files/boot
79 mkdir -p ./files/boot
nixos/modules/installer/tools/nix-fallback-paths.nix+5−5
@@ -1,7 +1,7 @@
2− x86_64-linux = "/nix/store/0n2wfvi1i3fg97cjc54wslvk0804y0sn-nix-2.7.0";
2+ x86_64-linux = "/nix/store/yx36yzxpw1hn4fz8iyf1rfyd56jg3yf4-nix-2.8.0";
3− i686-linux = "/nix/store/4p27c1k9z99pli6x8cxfph20yfyzn9nh-nix-2.7.0";
3+ i686-linux = "/nix/store/c0hg806zvwg800qbszzj8ff4a224kjgf-nix-2.8.0";
4− aarch64-linux = "/nix/store/r9yr8ijsb0gi9r7y92y3yzyld59yp0kj-nix-2.7.0";
4+ aarch64-linux = "/nix/store/wic2832ll53q392r2wks4xr2nrk7p8p5-nix-2.8.0";
5− x86_64-darwin = "/nix/store/hyfj5imsd0c4amlcjpf8l6w4q2draaj3-nix-2.7.0";
5+ x86_64-darwin = "/nix/store/5yqdvnkmkrhl36xh0qy31pymdphjimdd-nix-2.8.0";
6− aarch64-darwin = "/nix/store/9l96qllhbb6xrsjaai76dn74ap7rq92n-nix-2.7.0";
6+ aarch64-darwin = "/nix/store/izc9592szrnpv8n86hr88bhpyc9g6b4s-nix-2.8.0";
nixos/modules/installer/tools/tools.nix+5
@@ -206,6 +206,11 @@ in
206 # Or disable the firewall altogether.
206 # Or disable the firewall altogether.
207 # networking.firewall.enable = false;
207 # networking.firewall.enable = false;
209+ # Copy the NixOS configuration file and link it from the resulting system
210+ # (/run/current-system/configuration.nix). This is useful in case you
211+ # accidentally delete configuration.nix.
212+ # system.copySystemConfiguration = true;
209 # This value determines the NixOS release from which the default
214 # This value determines the NixOS release from which the default
210 # settings for stateful data, like file locations and database versions
215 # settings for stateful data, like file locations and database versions
211 # on your system were taken. It‘s perfectly fine and recommended to leave
216 # on your system were taken. It‘s perfectly fine and recommended to leave
nixos/modules/misc/documentation.nix+2−1
@@ -64,7 +64,8 @@ let
65 builtins.filterSource
65 builtins.filterSource
67+ cleanSourceFilter n t
67− (t == "directory" -> baseNameOf n != "tests")
68+ && (t == "directory" -> baseNameOf n != "tests")
68 && (t == "file" -> hasSuffix ".nix" n)
69 && (t == "file" -> hasSuffix ".nix" n)
nixos/modules/misc/locate.nix+1−1
@@ -27,7 +27,7 @@ in
28 locate = mkOption {
28 locate = mkOption {
29 type = package;
29 type = package;
30− default = pkgs.findutils;
30+ default = pkgs.findutils.locate;
31 defaultText = literalExpression "pkgs.findutils";
31 defaultText = literalExpression "pkgs.findutils";
32 example = literalExpression "pkgs.mlocate";
32 example = literalExpression "pkgs.mlocate";
33 description = ''
33 description = ''
nixos/modules/misc/version.nix+26−14
@@ -15,6 +15,26 @@ let
15 mapAttrsToList (n: v: ''${n}=${escapeIfNeccessary (toString v)}'') attrs
15 mapAttrsToList (n: v: ''${n}=${escapeIfNeccessary (toString v)}'') attrs
18+ osReleaseContents = {
21+ VERSION = "${cfg.release} (${cfg.codeName})";
22+ VERSION_CODENAME = toLower cfg.codeName;
23+ VERSION_ID = cfg.release;
24+ BUILD_ID = cfg.version;
25+ PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
26+ LOGO = "nix-snowflake";
27+ HOME_URL = "https://nixos.org/";
28+ DOCUMENTATION_URL = "https://nixos.org/learn.html";
29+ SUPPORT_URL = "https://nixos.org/community.html";
30+ BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
33+ initrdReleaseContents = osReleaseContents // {
34+ PRETTY_NAME = "${osReleaseContents.PRETTY_NAME} (Initrd)";
36+ initrdRelease = pkgs.writeText "initrd-release" (attrsToText initrdReleaseContents);
20 imports = [
40 imports = [
@@ -119,20 +139,12 @@ in
119 DISTRIB_DESCRIPTION = "NixOS ${cfg.release} (${cfg.codeName})";
139 DISTRIB_DESCRIPTION = "NixOS ${cfg.release} (${cfg.codeName})";
122− "os-release".text = attrsToText {
142+ "os-release".text = attrsToText osReleaseContents;
123− NAME = "NixOS";
143+ };
125− VERSION = "${cfg.release} (${cfg.codeName})";
145+ boot.initrd.systemd.contents = {
126− VERSION_CODENAME = toLower cfg.codeName;
146+ "/etc/os-release".source = initrdRelease;
127− VERSION_ID = cfg.release;
147+ "/etc/initrd-release".source = initrdRelease;
128− BUILD_ID = cfg.version;
129− PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
130− LOGO = "nix-snowflake";
131− HOME_URL = "https://nixos.org/";
132− DOCUMENTATION_URL = "https://nixos.org/learn.html";
133− SUPPORT_URL = "https://nixos.org/community.html";
134− BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
nixos/modules/module-list.nix+17−3
@@ -172,6 +172,7 @@
172 ./programs/java.nix
172 ./programs/java.nix
173 ./programs/k40-whisperer.nix
173 ./programs/k40-whisperer.nix
174 ./programs/kclock.nix
174 ./programs/kclock.nix
175 ./programs/kdeconnect.nix
176 ./programs/kdeconnect.nix
176 ./programs/kbdlight.nix
177 ./programs/kbdlight.nix
177 ./programs/less.nix
178 ./programs/less.nix
@@ -185,6 +186,7 @@
185 ./programs/nbd.nix
186 ./programs/nbd.nix
186 ./programs/nix-ld.nix
187 ./programs/nix-ld.nix
187 ./programs/neovim.nix
188 ./programs/neovim.nix
189+ ./programs/nethoscope.nix
188 ./programs/nm-applet.nix
190 ./programs/nm-applet.nix
189 ./programs/nncp.nix
191 ./programs/nncp.nix
190 ./programs/npm.nix
192 ./programs/npm.nix
@@ -204,7 +206,6 @@
204 ./programs/spacefm.nix
206 ./programs/spacefm.nix
205 ./programs/singularity.nix
207 ./programs/singularity.nix
206 ./programs/ssh.nix
208 ./programs/ssh.nix
207− ./programs/ssmtp.nix
208 ./programs/sysdig.nix
209 ./programs/sysdig.nix
209 ./programs/systemtap.nix
210 ./programs/systemtap.nix
210 ./programs/starship.nix
211 ./programs/starship.nix
@@ -409,6 +410,7 @@
409 ./services/display-managers/greetd.nix
410 ./services/display-managers/greetd.nix
410 ./services/editors/emacs.nix
411 ./services/editors/emacs.nix
411 ./services/editors/infinoted.nix
412 ./services/editors/infinoted.nix
413+ ./services/editors/haste.nix
412 ./services/finance/odoo.nix
414 ./services/finance/odoo.nix
413 ./services/games/asf.nix
415 ./services/games/asf.nix
414 ./services/games/crossfire-server.nix
416 ./services/games/crossfire-server.nix
@@ -458,6 +460,7 @@
458 ./services/hardware/udisks2.nix
460 ./services/hardware/udisks2.nix
459 ./services/hardware/upower.nix
461 ./services/hardware/upower.nix
460 ./services/hardware/usbmuxd.nix
462 ./services/hardware/usbmuxd.nix
463+ ./services/hardware/usbrelayd.nix
461 ./services/hardware/thermald.nix
464 ./services/hardware/thermald.nix
462 ./services/hardware/undervolt.nix
465 ./services/hardware/undervolt.nix
463 ./services/hardware/vdr.nix
466 ./services/hardware/vdr.nix
@@ -596,7 +599,7 @@
596 ./services/misc/osrm.nix
599 ./services/misc/osrm.nix
597 ./services/misc/owncast.nix
600 ./services/misc/owncast.nix
598 ./services/misc/packagekit.nix
601 ./services/misc/packagekit.nix
599− ./services/misc/paperless-ng.nix
602+ ./services/misc/paperless.nix
600 ./services/misc/parsoid.nix
603 ./services/misc/parsoid.nix
601 ./services/misc/plex.nix
604 ./services/misc/plex.nix
602 ./services/misc/plikd.nix
605 ./services/misc/plikd.nix
@@ -660,6 +663,7 @@
660 ./services/monitoring/longview.nix
663 ./services/monitoring/longview.nix
661 ./services/monitoring/mackerel-agent.nix
664 ./services/monitoring/mackerel-agent.nix
662 ./services/monitoring/metricbeat.nix
665 ./services/monitoring/metricbeat.nix
666+ ./services/monitoring/mimir.nix
663 ./services/monitoring/monit.nix
667 ./services/monitoring/monit.nix
664 ./services/monitoring/munin.nix
668 ./services/monitoring/munin.nix
665 ./services/monitoring/nagios.nix
669 ./services/monitoring/nagios.nix
@@ -733,12 +737,14 @@
733 ./services/networking/blocky.nix
737 ./services/networking/blocky.nix
734 ./services/networking/charybdis.nix
738 ./services/networking/charybdis.nix
735 ./services/networking/cjdns.nix
739 ./services/networking/cjdns.nix
740+ ./services/networking/cloudflare-dyndns.nix
736 ./services/networking/cntlm.nix
741 ./services/networking/cntlm.nix
737 ./services/networking/connman.nix
742 ./services/networking/connman.nix
738 ./services/networking/consul.nix
743 ./services/networking/consul.nix
739 ./services/networking/coredns.nix
744 ./services/networking/coredns.nix
740 ./services/networking/corerad.nix
745 ./services/networking/corerad.nix
741 ./services/networking/coturn.nix
746 ./services/networking/coturn.nix
747+ ./services/networking/create_ap.nix
742 ./services/networking/croc.nix
748 ./services/networking/croc.nix
743 ./services/networking/dante.nix
749 ./services/networking/dante.nix
744 ./services/networking/ddclient.nix
750 ./services/networking/ddclient.nix
@@ -753,6 +759,7 @@
753 ./services/networking/ncdns.nix
759 ./services/networking/ncdns.nix
754 ./services/networking/nomad.nix
760 ./services/networking/nomad.nix
755 ./services/networking/ejabberd.nix
761 ./services/networking/ejabberd.nix
762+ ./services/networking/envoy.nix
756 ./services/networking/epmd.nix
763 ./services/networking/epmd.nix
757 ./services/networking/ergo.nix
764 ./services/networking/ergo.nix
758 ./services/networking/ergochat.nix
765 ./services/networking/ergochat.nix
@@ -815,6 +822,7 @@
815 ./services/networking/mosquitto.nix
822 ./services/networking/mosquitto.nix
816 ./services/networking/monero.nix
823 ./services/networking/monero.nix
817 ./services/networking/morty.nix
824 ./services/networking/morty.nix
825+ ./services/networking/mozillavpn.nix
818 ./services/networking/miredo.nix
826 ./services/networking/miredo.nix
819 ./services/networking/mstpd.nix
827 ./services/networking/mstpd.nix
820 ./services/networking/mtprotoproxy.nix
828 ./services/networking/mtprotoproxy.nix
@@ -850,7 +858,7 @@
850 ./services/networking/ofono.nix
858 ./services/networking/ofono.nix
851 ./services/networking/oidentd.nix
859 ./services/networking/oidentd.nix
852 ./services/networking/onedrive.nix
860 ./services/networking/onedrive.nix
853− ./services/networking/openfire.nix
861+ ./services/networking/openconnect.nix
854 ./services/networking/openvpn.nix
862 ./services/networking/openvpn.nix
855 ./services/networking/ostinato.nix
863 ./services/networking/ostinato.nix
856 ./services/networking/owamp.nix
864 ./services/networking/owamp.nix
@@ -1052,6 +1060,7 @@
1052 ./services/web-apps/netbox.nix
1060 ./services/web-apps/netbox.nix
1053 ./services/web-apps/nextcloud.nix
1061 ./services/web-apps/nextcloud.nix
1054 ./services/web-apps/nexus.nix
1062 ./services/web-apps/nexus.nix
1063+ ./services/web-apps/nifi.nix
1055 ./services/web-apps/node-red.nix
1064 ./services/web-apps/node-red.nix
1056 ./services/web-apps/pict-rs.nix
1065 ./services/web-apps/pict-rs.nix
1057 ./services/web-apps/peertube.nix
1066 ./services/web-apps/peertube.nix
@@ -1176,9 +1185,12 @@
1176 ./system/boot/stage-2.nix
1185 ./system/boot/stage-2.nix
1177 ./system/boot/systemd.nix
1186 ./system/boot/systemd.nix
1178 ./system/boot/systemd/coredump.nix
1187 ./system/boot/systemd/coredump.nix
1188+ ./system/boot/systemd/initrd-secrets.nix
1189+ ./system/boot/systemd/initrd.nix
1179 ./system/boot/systemd/journald.nix
1190 ./system/boot/systemd/journald.nix
1180 ./system/boot/systemd/logind.nix
1191 ./system/boot/systemd/logind.nix
1181 ./system/boot/systemd/nspawn.nix
1192 ./system/boot/systemd/nspawn.nix
1193+ ./system/boot/systemd/shutdown.nix
1182 ./system/boot/systemd/tmpfiles.nix
1194 ./system/boot/systemd/tmpfiles.nix
1183 ./system/boot/systemd/user.nix
1195 ./system/boot/systemd/user.nix
1184 ./system/boot/timesyncd.nix
1196 ./system/boot/timesyncd.nix
@@ -1234,6 +1246,7 @@
1234 ./virtualisation/amazon-options.nix
1246 ./virtualisation/amazon-options.nix
1235 ./virtualisation/hyperv-guest.nix
1247 ./virtualisation/hyperv-guest.nix
1236 ./virtualisation/kvmgt.nix
1248 ./virtualisation/kvmgt.nix
1249+ ./virtualisation/openstack-options.nix
1237 ./virtualisation/openvswitch.nix
1250 ./virtualisation/openvswitch.nix
1238 ./virtualisation/parallels-guest.nix
1251 ./virtualisation/parallels-guest.nix
1239 ./virtualisation/podman/default.nix
1252 ./virtualisation/podman/default.nix
@@ -1243,6 +1256,7 @@
1243 ./virtualisation/virtualbox-guest.nix
1256 ./virtualisation/virtualbox-guest.nix
1244 ./virtualisation/virtualbox-host.nix
1257 ./virtualisation/virtualbox-host.nix
1245 ./virtualisation/vmware-guest.nix
1258 ./virtualisation/vmware-guest.nix
1259+ ./virtualisation/vmware-host.nix
1246 ./virtualisation/waydroid.nix
1260 ./virtualisation/waydroid.nix
1247 ./virtualisation/xen-dom0.nix
1261 ./virtualisation/xen-dom0.nix
1248 ./virtualisation/xe-guest-utilities.nix
1262 ./virtualisation/xe-guest-utilities.nix
nixos/modules/profiles/all-hardware.nix+3
@@ -40,6 +40,9 @@ in
40 # SD cards.
40 # SD cards.
41 "sdhci_pci"
41 "sdhci_pci"
43 # Firewire support. Not tested.
46 # Firewire support. Not tested.
44 "ohci1394" "sbp2"
47 "ohci1394" "sbp2"
nixos/modules/profiles/installation-device.nix+4
@@ -99,6 +99,10 @@ with lib;
99 stdenvNoCC # for runCommand
99 stdenvNoCC # for runCommand
101 jq # for closureInfo
101 jq # for closureInfo
102+ # For boot.initrd.systemd
105+ systemdStage1Network
104 # Show all debug messages from the kernel but don't log refused packets
108 # Show all debug messages from the kernel but don't log refused packets
nixos/modules/profiles/qemu-guest.nix+2−2
@@ -1,13 +1,13 @@
1# Common configuration for virtual machines running under QEMU (using
1# Common configuration for virtual machines running under QEMU (using
4−{ ... }:
4+{ config, lib, ... }:
7 boot.initrd.availableKernelModules = [ "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "9p" "9pnet_virtio" ];
7 boot.initrd.availableKernelModules = [ "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "9p" "9pnet_virtio" ];
8 boot.initrd.kernelModules = [ "virtio_balloon" "virtio_console" "virtio_rng" ];
8 boot.initrd.kernelModules = [ "virtio_balloon" "virtio_console" "virtio_rng" ];
10− boot.initrd.postDeviceCommands =
10+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
12 # Set the system time from the hardware clock to work around a
12 # Set the system time from the hardware clock to work around a
13 # bug in qemu-kvm > 1.5.2 (where the VM clock is initialised
13 # bug in qemu-kvm > 1.5.2 (where the VM clock is initialised
nixos/modules/programs/adb.nix+1−2
@@ -23,8 +23,7 @@ with lib;
23 ###### implementation
23 ###### implementation
24 config = mkIf config.programs.adb.enable {
24 config = mkIf config.programs.adb.enable {
25 services.udev.packages = [ pkgs.android-udev-rules ];
25 services.udev.packages = [ pkgs.android-udev-rules ];
26− # Give platform-tools lower priority so mke2fs+friends are taken from other packages first
27− environment.systemPackages = [ (lowPrio pkgs.androidenv.androidPkgs_9_0.platform-tools) ];
26+ environment.systemPackages = [ pkgs.android-tools ];
28 users.groups.adbusers = {};
27 users.groups.adbusers = {};
nixos/modules/programs/chromium.nix+3
@@ -108,5 +108,8 @@ in
108 # for google-chrome https://www.chromium.org/administrators/linux-quick-start
108 # for google-chrome https://www.chromium.org/administrators/linux-quick-start
109 environment.etc."opt/chrome/policies/managed/default.json".text = builtins.toJSON defaultProfile;
109 environment.etc."opt/chrome/policies/managed/default.json".text = builtins.toJSON defaultProfile;
110 environment.etc."opt/chrome/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
110 environment.etc."opt/chrome/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
112+ environment.etc."brave/policies/managed/default.json".text = builtins.toJSON defaultProfile;
113+ environment.etc."brave/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
nixos/modules/programs/k3b.nixnew file+52
@@ -0,0 +1,52 @@
1+{ config, pkgs, lib, ... }:
7+ options.programs.k3b = {
12+ Whether to enable k3b, the KDE disk burning application.
14+ Additionally to installing <package>k3b</package> enabling this will
15+ add <literal>setuid</literal> wrappers in <literal>/run/wrappers/bin</literal>
16+ for both <package>cdrdao</package> and <package>cdrecord</package>. On first
17+ run you must manually configure the path of <package>cdrdae</package> and
18+ <package>cdrecord</package> to correspond to the appropriate paths under
19+ <literal>/run/wrappers/bin</literal> in the "Setup External Programs" menu.
25+ config = mkIf config.programs.k3b.enable {
27+ environment.systemPackages = with pkgs; [
34+ security.wrappers = {
39+ permissions = "u+wrx,g+x";
40+ source = "${pkgs.cdrdao}/bin/cdrdao";
46+ permissions = "u+wrx,g+x";
47+ source = "${pkgs.cdrkit}/bin/cdrecord";
nixos/modules/programs/mininet.nix+2−2
@@ -23,8 +23,8 @@ let
23 ln -s ${pyEnv}/bin/mn $out/bin/mn
23 ln -s ${pyEnv}/bin/mn $out/bin/mn
25 # mn errors out without a telnet binary
25 # mn errors out without a telnet binary
26− # pkgs.telnet brings an undesired ifconfig into PATH see #43105
26+ # pkgs.inetutils brings an undesired ifconfig into PATH see #43105
27− ln -s ${pkgs.telnet}/bin/telnet $out/bin/telnet
27+ ln -s ${pkgs.inetutils}/bin/telnet $out/bin/telnet
nixos/modules/programs/nethoscope.nixnew file+30
@@ -0,0 +1,30 @@
1+{ config, lib, pkgs, ... }:
5+let cfg = config.programs.nethoscope;
8+ meta.maintainers = with maintainers; [ _0x4A6F ];
11+ programs.nethoscope = {
16+ Whether to add nethoscope to the global environment and configure a
17+ setcap wrapper for it.
23+ config = mkIf cfg.enable {
24+ environment.systemPackages = with pkgs; [ nethoscope ];
25+ security.wrappers.nethoscope = {
26+ source = "${pkgs.nethoscope}/bin/nethoscope";
27+ capabilities = "cap_net_raw,cap_net_admin=eip";
nixos/modules/programs/ssh.nix+18−7
@@ -157,9 +157,13 @@ in
157 default = [ name ] ++ config.extraHostNames;
157 default = [ name ] ++ config.extraHostNames;
158 defaultText = literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
158 defaultText = literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
159 description = ''
159 description = ''
160− DEPRECATED, please use <literal>extraHostNames</literal>.
161 A list of host names and/or IP numbers used for accessing
160 A list of host names and/or IP numbers used for accessing
162− the host's ssh service.
161+ the host's ssh service. This list includes the name of the
162+ containing <literal>knownHosts</literal> attribute by default
163+ for convenience. If you wish to configure multiple host keys
164+ for the same host use multiple <literal>knownHosts</literal>
165+ entries with different attribute names and the same
166+ <literal>hostNames</literal> list.
165 extraHostNames = mkOption {
169 extraHostNames = mkOption {
@@ -167,7 +171,8 @@ in
167 default = [];
171 default = [];
168 description = ''
172 description = ''
169 A list of additional host names and/or IP numbers used for
173 A list of additional host names and/or IP numbers used for
170− accessing the host's ssh service.
174+ accessing the host's ssh service. This list is ignored if
175+ <literal>hostNames</literal> is set explicitly.
173 publicKey = mkOption {
178 publicKey = mkOption {
@@ -198,7 +203,12 @@ in
200 description = ''
205 description = ''
201− The set of system-wide known SSH hosts.
206+ The set of system-wide known SSH hosts. To make simple setups more
207+ convenient the name of an attribute in this set is used as a host name
208+ for the entry. This behaviour can be disabled by setting
209+ <literal>hostNames</literal> explicitly. You can use
210+ <literal>extraHostNames</literal> to add additional host names without
211+ disabling this default.
203 example = literalExpression ''
213 example = literalExpression ''
@@ -207,6 +217,10 @@ in
207 publicKeyFile = ./pubkeys/myhost_ssh_host_dsa_key.pub;
217 publicKeyFile = ./pubkeys/myhost_ssh_host_dsa_key.pub;
209 "myhost2.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILIRuJ8p1Fi+m6WkHV0KWnRfpM1WxoW8XAS+XvsSKsTK";
219 "myhost2.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILIRuJ8p1Fi+m6WkHV0KWnRfpM1WxoW8XAS+XvsSKsTK";
220+ "myhost2.net/dsa" = {
221+ hostNames = [ "myhost2.net" ];
222+ publicKeyFile = ./pubkeys/myhost2_ssh_host_dsa_key.pub;
@@ -279,9 +293,6 @@ in
279 message = "knownHost ${name} must contain either a publicKey or publicKeyFile";
293 message = "knownHost ${name} must contain either a publicKey or publicKeyFile";
282− warnings = mapAttrsToList (name: _: ''programs.ssh.knownHosts.${name}.hostNames is deprecated, use programs.ssh.knownHosts.${name}.extraHostNames'')
283− (filterAttrs (name: {hostNames, extraHostNames, ...}: hostNames != [ name ] ++ extraHostNames) cfg.knownHosts);
285 # SSH configuration. Slight duplication of the sshd_config
296 # SSH configuration. Slight duplication of the sshd_config
286 # generation in the sshd service.
297 # generation in the sshd service.
287 environment.etc."ssh/ssh_config".text =
298 environment.etc."ssh/ssh_config".text =
nixos/modules/programs/ssmtp.nixdeleted−190
@@ -1,190 +0,0 @@
1−# Configuration for `ssmtp', a trivial mail transfer agent that can
2−# replace sendmail/postfix on simple systems. It delivers email
3−# directly to an SMTP server defined in its configuration file, without
4−# queueing mail locally.
6−{ config, lib, pkgs, ... }:
11− cfg = config.services.ssmtp;
17− (mkRenamedOptionModule [ "networking" "defaultMailServer" "directDelivery" ] [ "services" "ssmtp" "enable" ])
18− (mkRenamedOptionModule [ "networking" "defaultMailServer" "hostName" ] [ "services" "ssmtp" "hostName" ])
19− (mkRenamedOptionModule [ "networking" "defaultMailServer" "domain" ] [ "services" "ssmtp" "domain" ])
20− (mkRenamedOptionModule [ "networking" "defaultMailServer" "root" ] [ "services" "ssmtp" "root" ])
21− (mkRenamedOptionModule [ "networking" "defaultMailServer" "useTLS" ] [ "services" "ssmtp" "useTLS" ])
22− (mkRenamedOptionModule [ "networking" "defaultMailServer" "useSTARTTLS" ] [ "services" "ssmtp" "useSTARTTLS" ])
23− (mkRenamedOptionModule [ "networking" "defaultMailServer" "authUser" ] [ "services" "ssmtp" "authUser" ])
24− (mkRenamedOptionModule [ "networking" "defaultMailServer" "authPassFile" ] [ "services" "ssmtp" "authPassFile" ])
25− (mkRenamedOptionModule [ "networking" "defaultMailServer" "setSendmail" ] [ "services" "ssmtp" "setSendmail" ])
27− (mkRemovedOptionModule [ "networking" "defaultMailServer" "authPass" ] "authPass has been removed since it leaks the clear-text password into the world-readable store. Use authPassFile instead and make sure it's not a store path")
28− (mkRemovedOptionModule [ "services" "ssmtp" "authPass" ] "authPass has been removed since it leaks the clear-text password into the world-readable store. Use authPassFile instead and make sure it's not a store path")
39− Use the trivial Mail Transfer Agent (MTA)
40− <command>ssmtp</command> package to allow programs to send
41− e-mail. If you don't want to run a “real” MTA like
42− <command>sendmail</command> or <command>postfix</command> on
43− your machine, set this option to <literal>true</literal>, and
45− <option>services.ssmtp.hostName</option> to the
46− host name of your preferred mail server.
50− settings = mkOption {
51− type = with types; attrsOf (oneOf [ bool str ]);
54− <citerefentry><refentrytitle>ssmtp</refentrytitle><manvolnum>5</manvolnum></citerefentry> configuration. Refer
55− to <link xlink:href="https://linux.die.net/man/5/ssmtp.conf"/> for details on supported values.
57− example = literalExpression ''
60− FromLineOverride = false;
65− hostName = mkOption {
67− example = "mail.example.org";
69− The host name of the default mail server to use to deliver
70− e-mail. Can also contain a port number (ex: mail.example.org:587),
71− defaults to port 25 if no port is given.
78− example = "root@example.org";
80− The e-mail to which mail for users with UID < 1000 is forwarded.
87− example = "example.org";
89− The domain from which mail will appear to be sent.
97− Whether TLS should be used to connect to the default mail
102− useSTARTTLS = mkOption {
106− Whether the STARTTLS should be used to connect to the default
107− mail server. (This is needed for TLS-capable mail servers
108− running on the default SMTP port 25.)
112− authUser = mkOption {
115− example = "foo@example.org";
117− Username used for SMTP auth. Leave blank to disable.
121− authPassFile = mkOption {
122− type = types.nullOr types.str;
124− example = "/run/keys/ssmtp-authpass";
126− Path to a file that contains the password used for SMTP auth. The file
127− should not contain a trailing newline, if the password does not contain one
128− (e.g. use <command>echo -n "password" > file</command>).
129− This file should be readable by the users that need to execute ssmtp.
133− setSendmail = mkOption {
136− description = "Whether to set the system sendmail to ssmtp's.";
144− config = mkIf cfg.enable {
148− assertion = cfg.useSTARTTLS -> cfg.useTLS;
149− message = "services.ssmtp.useSTARTTLS has no effect without services.ssmtp.useTLS";
153− services.ssmtp.settings = mkMerge [
155− MailHub = cfg.hostName;
156− FromLineOverride = mkDefault true;
157− UseTLS = cfg.useTLS;
158− UseSTARTTLS = cfg.useSTARTTLS;
160− (mkIf (cfg.root != "") { root = cfg.root; })
161− (mkIf (cfg.domain != "") { rewriteDomain = cfg.domain; })
162− (mkIf (cfg.authUser != "") { AuthUser = cfg.authUser; })
163− (mkIf (cfg.authPassFile != null) { AuthPassFile = cfg.authPassFile; })
166− # careful here: ssmtp REQUIRES all config lines to end with a newline char!
167− environment.etc."ssmtp/ssmtp.conf".text = with generators; toKeyValue {
168− mkKeyValue = mkKeyValueDefault {
169− mkValueString = value:
170− if value == true then "YES"
171− else if value == false then "NO"
172− else mkValueStringDefault {} value
177− environment.systemPackages = [pkgs.ssmtp];
179− services.mail.sendmailSetuidWrapper = mkIf cfg.setSendmail {
180− program = "sendmail";
181− source = "${pkgs.ssmtp}/bin/sendmail";
nixos/modules/programs/thefuck.nix+7−6
@@ -6,9 +6,12 @@ let
6 prg = config.programs;
6 prg = config.programs;
7 cfg = prg.thefuck;
7 cfg = prg.thefuck;
9− initScript = ''
9+ bashAndZshInitScript = ''
10 eval $(${pkgs.thefuck}/bin/thefuck --alias ${cfg.alias})
10 eval $(${pkgs.thefuck}/bin/thefuck --alias ${cfg.alias})
13+ ${pkgs.thefuck}/bin/thefuck --alias ${cfg.alias} | source
14 options = {
17 options = {
@@ -30,10 +33,8 @@ in
30 config = mkIf cfg.enable {
33 config = mkIf cfg.enable {
31 environment.systemPackages = with pkgs; [ thefuck ];
34 environment.systemPackages = with pkgs; [ thefuck ];
33− programs.bash.interactiveShellInit = initScript;
36+ programs.bash.interactiveShellInit = bashAndZshInitScript;
34− programs.zsh.interactiveShellInit = mkIf prg.zsh.enable initScript;
37+ programs.zsh.interactiveShellInit = mkIf prg.zsh.enable bashAndZshInitScript;
35− programs.fish.interactiveShellInit = mkIf prg.fish.enable ''
38+ programs.fish.interactiveShellInit = mkIf prg.fish.enable fishInitScript;
36− ${pkgs.thefuck}/bin/thefuck --alias | source
nixos/modules/rename.nix+6
@@ -69,6 +69,11 @@ with lib;
70 (mkRemovedOptionModule [ "services" "quagga" ] "the corresponding package has been removed from nixpkgs")
70 (mkRemovedOptionModule [ "services" "quagga" ] "the corresponding package has been removed from nixpkgs")
71 (mkRemovedOptionModule [ "services" "seeks" ] "")
71 (mkRemovedOptionModule [ "services" "seeks" ] "")
72+ (mkRemovedOptionModule [ "services" "ssmtp" ] ''
73+ The ssmtp package and the corresponding module have been removed due to
74+ the program being unmaintained. The options `programs.msmtp.*` can be
72 (mkRemovedOptionModule [ "services" "venus" ] "The corresponding package was removed from nixpkgs.")
77 (mkRemovedOptionModule [ "services" "venus" ] "The corresponding package was removed from nixpkgs.")
73 (mkRemovedOptionModule [ "services" "wakeonlan"] "This module was removed in favor of enabling it with networking.interfaces.<name>.wakeOnLan")
78 (mkRemovedOptionModule [ "services" "wakeonlan"] "This module was removed in favor of enabling it with networking.interfaces.<name>.wakeOnLan")
74 (mkRemovedOptionModule [ "services" "winstone" ] "The corresponding package was removed from nixpkgs.")
79 (mkRemovedOptionModule [ "services" "winstone" ] "The corresponding package was removed from nixpkgs.")
@@ -91,6 +96,7 @@ with lib;
91 (mkRemovedOptionModule [ "services" "shellinabox" ] "The corresponding package was removed from nixpkgs.")
96 (mkRemovedOptionModule [ "services" "shellinabox" ] "The corresponding package was removed from nixpkgs.")
92 (mkRemovedOptionModule [ "services" "gogoclient" ] "The corresponding package was removed from nixpkgs.")
97 (mkRemovedOptionModule [ "services" "gogoclient" ] "The corresponding package was removed from nixpkgs.")
93 (mkRemovedOptionModule [ "services" "virtuoso" ] "The corresponding package was removed from nixpkgs.")
98 (mkRemovedOptionModule [ "services" "virtuoso" ] "The corresponding package was removed from nixpkgs.")
99+ (mkRemovedOptionModule [ "services" "openfire" ] "The corresponding package was removed from nixpkgs.")
95 # Do NOT add any option renames here, see top of the file
101 # Do NOT add any option renames here, see top of the file
nixos/modules/security/pam.nix+113−3
@@ -61,6 +61,19 @@ let
64+ usshAuth = mkOption {
68+ If set, users with an SSH certificate containing an authorized principal
69+ in their SSH agent are able to log in. Specific options are controlled
70+ using the <option>security.pam.ussh</option> options.
72+ Note that the <option>security.pam.ussh.enable</option> must also be
73+ set for this option to take effect.
64 yubicoAuth = mkOption {
77 yubicoAuth = mkOption {
65 default = config.security.pam.yubico.enable;
78 default = config.security.pam.yubico.enable;
66 defaultText = literalExpression "config.security.pam.yubico.enable";
79 defaultText = literalExpression "config.security.pam.yubico.enable";
@@ -475,8 +488,11 @@ let
475 optionalString cfg.usbAuth ''
488 optionalString cfg.usbAuth ''
476 auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so
489 auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so
491+ (let ussh = config.security.pam.ussh; in optionalString (config.security.pam.ussh.enable && cfg.usshAuth) ''
492+ auth ${ussh.control} ${pkgs.pam_ussh}/lib/security/pam_ussh.so ${optionalString (ussh.caFile != null) "ca_file=${ussh.caFile}"} ${optionalString (ussh.authorizedPrincipals != null) "authorized_principals=${ussh.authorizedPrincipals}"} ${optionalString (ussh.authorizedPrincipalsFile != null) "authorized_principals_file=${ussh.authorizedPrincipalsFile}"} ${optionalString (ussh.group != null) "group=${ussh.group}"}
478 (let oath = config.security.pam.oath; in optionalString cfg.oathAuth ''
494 (let oath = config.security.pam.oath; in optionalString cfg.oathAuth ''
479− auth requisite ${pkgs.oathToolkit}/lib/security/pam_oath.so window=${toString oath.window} usersfile=${toString oath.usersFile} digits=${toString oath.digits}
495+ auth requisite ${pkgs.oath-toolkit}/lib/security/pam_oath.so window=${toString oath.window} usersfile=${toString oath.usersFile} digits=${toString oath.digits}
481 (let yubi = config.security.pam.yubico; in optionalString cfg.yubicoAuth ''
497 (let yubi = config.security.pam.yubico; in optionalString cfg.yubicoAuth ''
482 auth ${yubi.control} ${pkgs.yubico-pam}/lib/security/pam_yubico.so mode=${toString yubi.mode} ${optionalString (yubi.challengeResponsePath != null) "chalresp_path=${yubi.challengeResponsePath}"} ${optionalString (yubi.mode == "client") "id=${toString yubi.id}"} ${optionalString yubi.debug "debug"}
498 auth ${yubi.control} ${pkgs.yubico-pam}/lib/security/pam_yubico.so mode=${toString yubi.mode} ${optionalString (yubi.challengeResponsePath != null) "chalresp_path=${yubi.challengeResponsePath}"} ${optionalString (yubi.mode == "client") "id=${toString yubi.id}"} ${optionalString yubi.debug "debug"}
@@ -594,6 +610,7 @@ let
594 session optional ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so
610 session optional ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so
596 optionalString cfg.pamMount ''
612 optionalString cfg.pamMount ''
613+ session [success=1 default=ignore] ${pkgs.pam}/lib/security/pam_succeed_if.so service = systemd-user quiet
597 session optional ${pkgs.pam_mount}/lib/security/pam_mount.so disable_interactive
614 session optional ${pkgs.pam_mount}/lib/security/pam_mount.so disable_interactive
599 optionalString use_ldap ''
616 optionalString use_ldap ''
@@ -926,6 +943,96 @@ in
946+ security.pam.ussh = {
951+ Enables Uber's USSH PAM (<literal>pam-ussh</literal>) module.
953+ This is similar to <literal>pam-ssh-agent</literal>, except that
954+ the presence of a CA-signed SSH key with a valid principal is checked
957+ Note that this module must both be enabled using this option and on a
958+ per-PAM-service level as well (using <literal>usshAuth</literal>).
960+ More information can be found <link
961+ xlink:href="https://github.com/uber/pam-ussh">here</link>.
967+ type = with types; nullOr path;
969+ By default <literal>pam-ussh</literal> reads the trusted user CA keys
970+ from <filename>/etc/ssh/trusted_user_ca</filename>.
972+ This should be set the same as your <literal>TrustedUserCAKeys</literal>
977+ authorizedPrincipals = mkOption {
979+ type = with types; nullOr commas;
981+ Comma-separated list of authorized principals to permit; if the user
982+ presents a certificate with one of these principals, then they will be
985+ Note that <literal>pam-ussh</literal> also requires that the certificate
986+ contain a principal matching the user's username. The principals from
987+ this list are in addition to those principals.
989+ Mutually exclusive with <literal>authorizedPrincipalsFile</literal>.
993+ authorizedPrincipalsFile = mkOption {
995+ type = with types; nullOr path;
997+ Path to a list of principals; if the user presents a certificate with
998+ one of these principals, then they will be authorized.
1000+ Note that <literal>pam-ussh</literal> also requires that the certificate
1001+ contain a principal matching the user's username. The principals from
1002+ this file are in addition to those principals.
1004+ Mutually exclusive with <literal>authorizedPrincipals</literal>.
1010+ type = with types; nullOr str;
1012+ If set, then the authenticating user must be a member of this group
1013+ to use this module.
1017+ control = mkOption {
1018+ default = "sufficient";
1019+ type = types.enum [ "required" "requisite" "sufficient" "optional" ];
1021+ This option sets pam "control".
1022+ If you want to have multi factor authentication, use "required".
1023+ If you want to use the SSH certificate instead of the regular password,
1028+ <refentrytitle>pam.conf</refentrytitle>
1029+ <manvolnum>5</manvolnum>
1031+ for better understanding of this option.
929 security.pam.yubico = {
1036 security.pam.yubico = {
930 enable = mkOption {
1037 enable = mkOption {
931 default = false;
1038 default = false;
@@ -1024,7 +1131,7 @@ in
1024 ++ optional config.services.sssd.enable pkgs.sssd
1131 ++ optional config.services.sssd.enable pkgs.sssd
1025 ++ optionals config.krb5.enable [pam_krb5 pam_ccreds]
1132 ++ optionals config.krb5.enable [pam_krb5 pam_ccreds]
1026 ++ optionals config.security.pam.enableOTPW [ pkgs.otpw ]
1133 ++ optionals config.security.pam.enableOTPW [ pkgs.otpw ]
1027− ++ optionals config.security.pam.oath.enable [ pkgs.oathToolkit ]
1134+ ++ optionals config.security.pam.oath.enable [ pkgs.oath-toolkit ]
1028 ++ optionals config.security.pam.p11.enable [ pkgs.pam_p11 ]
1135 ++ optionals config.security.pam.p11.enable [ pkgs.pam_p11 ]
1029 ++ optionals config.security.pam.u2f.enable [ pkgs.pam_u2f ];
1136 ++ optionals config.security.pam.u2f.enable [ pkgs.pam_u2f ];
@@ -1110,8 +1217,11 @@ in
1110 optionalString (isEnabled (cfg: cfg.usbAuth)) ''
1217 optionalString (isEnabled (cfg: cfg.usbAuth)) ''
1111 mr ${pkgs.pam_usb}/lib/security/pam_usb.so,
1218 mr ${pkgs.pam_usb}/lib/security/pam_usb.so,
1220+ optionalString (isEnabled (cfg: cfg.usshAuth)) ''
1221+ mr ${pkgs.pam_ussh}/lib/security/pam_ussh.so,
1113 optionalString (isEnabled (cfg: cfg.oathAuth)) ''
1223 optionalString (isEnabled (cfg: cfg.oathAuth)) ''
1114− "mr ${pkgs.oathToolkit}/lib/security/pam_oath.so,
1224+ "mr ${pkgs.oath-toolkit}/lib/security/pam_oath.so,
1116 optionalString (isEnabled (cfg: cfg.yubicoAuth)) ''
1226 optionalString (isEnabled (cfg: cfg.yubicoAuth)) ''
1117 mr ${pkgs.yubico-pam}/lib/security/pam_yubico.so,
1227 mr ${pkgs.yubico-pam}/lib/security/pam_yubico.so,
nixos/modules/security/pam_mount.nix+78−6
@@ -5,6 +5,14 @@ with lib;
6 cfg = config.security.pam.mount;
6 cfg = config.security.pam.mount;
8+ oflRequired = cfg.logoutHup || cfg.logoutTerm || cfg.logoutKill;
10+ fake_ofl = pkgs.writeShellScriptBin "fake_ofl" ''
13+ ${pkgs.lsof}/bin/lsof | ${pkgs.gnugrep}/bin/grep $MNTPT | ${pkgs.gawk}/bin/awk '{print $2}' | ${pkgs.findutils}/bin/xargs ${pkgs.util-linux}/bin/kill -$SIGNAL
8 anyPamMount = any (attrByPath ["pamMount"] false) (attrValues config.security.pam.services);
16 anyPamMount = any (attrByPath ["pamMount"] false) (attrValues config.security.pam.services);
@@ -51,6 +59,71 @@ in
51 You can define volume-specific options in the volume definitions.
59 You can define volume-specific options in the volume definitions.
63+ debugLevel = mkOption {
68+ Sets the Debug-Level. 0 disables debugging, 1 enables pam_mount tracing,
69+ and 2 additionally enables tracing in mount.crypt. The default is 0.
70+ For more information, visit <link
71+ xlink:href="http://pam-mount.sourceforge.net/pam_mount.conf.5.html" />.
75+ logoutWait = mkOption {
79+ Amount of microseconds to wait until killing remaining processes after
81+ For more information, visit <link
82+ xlink:href="http://pam-mount.sourceforge.net/pam_mount.conf.5.html" />.
86+ logoutHup = mkOption {
90+ Kill remaining processes after logout by sending a SIGHUP.
94+ logoutTerm = mkOption {
98+ Kill remaining processes after logout by sending a SIGTERM.
102+ logoutKill = mkOption {
106+ Kill remaining processes after logout by sending a SIGKILL.
110+ createMountPoints = mkOption {
114+ Create mountpoints for volumes if they do not exist.
118+ removeCreatedMountPoints = mkOption {
122+ Remove mountpoints created by pam_mount after logout. This
123+ only affects mountpoints that have been created by pam_mount
124+ in the same session.
@@ -77,21 +150,20 @@ in
77 <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
150 <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
78 <!-- auto generated from Nixos: modules/config/users-groups.nix -->
151 <!-- auto generated from Nixos: modules/config/users-groups.nix -->
79 <pam_mount>
152 <pam_mount>
80− <debug enable="0" />
153+ <debug enable="${toString cfg.debugLevel}" />
82 <!-- if activated, requires ofl from hxtools to be present -->
154 <!-- if activated, requires ofl from hxtools to be present -->
83− <logout wait="0" hup="no" term="no" kill="no" />
155+ <logout wait="${toString cfg.logoutWait}" hup="${if cfg.logoutHup then "yes" else "no"}" term="${if cfg.logoutTerm then "yes" else "no"}" kill="${if cfg.logoutKill then "yes" else "no"}" />
84 <!-- set PATH variable for pam_mount module -->
156 <!-- set PATH variable for pam_mount module -->
85 <path>${makeBinPath ([ pkgs.util-linux ] ++ cfg.additionalSearchPaths)}</path>
157 <path>${makeBinPath ([ pkgs.util-linux ] ++ cfg.additionalSearchPaths)}</path>
86 <!-- create mount point if not present -->
158 <!-- create mount point if not present -->
87− <mkmountpoint enable="1" remove="true" />
159+ <mkmountpoint enable="${if cfg.createMountPoints then "1" else "0"}" remove="${if cfg.removeCreatedMountPoints then "true" else "false"}" />
89 <!-- specify the binaries to be called -->
160 <!-- specify the binaries to be called -->
90 <fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}</fusemount>
161 <fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}</fusemount>
162+ <fuseumount>${pkgs.fuse}/bin/fusermount -u %(MNTPT)</fuseumount>
91 <cryptmount>${pkgs.pam_mount}/bin/mount.crypt %(VOLUME) %(MNTPT)</cryptmount>
163 <cryptmount>${pkgs.pam_mount}/bin/mount.crypt %(VOLUME) %(MNTPT)</cryptmount>
92 <cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
164 <cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
93 <pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
165 <pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
94−
166+ ${optionalString oflRequired "<ofl>${fake_ofl}/bin/fake_ofl %(SIGNAL) %(MNTPT)</ofl>"}
95 ${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))}
167 ${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))}
96 ${concatStringsSep "\n" cfg.extraVolumes}
168 ${concatStringsSep "\n" cfg.extraVolumes}
97 </pam_mount>
169 </pam_mount>
nixos/modules/security/sudo.nix+1−1
@@ -245,7 +245,7 @@ in
246 environment.systemPackages = [ sudo ];
246 environment.systemPackages = [ sudo ];
248− security.pam.services.sudo = { sshAgentAuth = true; };
248+ security.pam.services.sudo = { sshAgentAuth = true; usshAuth = true; };
250 environment.etc.sudoers =
250 environment.etc.sudoers =
251 { source =
251 { source =
nixos/modules/services/audio/snapserver.nix+15−7
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, options, lib, pkgs, ... }:
@@ -101,6 +101,8 @@ in {
102 openFirewall = mkOption {
102 openFirewall = mkOption {
103 type = types.bool;
103 type = types.bool;
104+ # Make the behavior consistent with other services. Set the default to
105+ # false and remove the accompanying warning after NixOS 22.05 is released.
104 default = true;
106 default = true;
105 description = ''
107 description = ''
106 Whether to automatically open the specified ports in the firewall.
108 Whether to automatically open the specified ports in the firewall.
@@ -273,10 +275,16 @@ in {
274 config = mkIf cfg.enable {
276 config = mkIf cfg.enable {
276− # https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
279+ # https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
277− warnings = filter (w: w != "") (mapAttrsToList (k: v: if v.type == "spotify" then ''
280+ filter (w: w != "") (mapAttrsToList (k: v: if v.type == "spotify" then ''
278− services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
281+ services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
279− '' else "") cfg.streams);
282+ '' else "") cfg.streams)
283+ # Remove this warning after NixOS 22.05 is released.
284+ ++ optional (options.services.snapserver.openFirewall.highestPrio >= (mkOptionDefault null).priority) ''
285+ services.snapserver.openFirewall will no longer default to true starting with NixOS 22.11.
286+ Enable it explicitly if you need to control Snapserver remotely.
281 systemd.services.snapserver = {
289 systemd.services.snapserver = {
282 after = [ "network.target" ];
290 after = [ "network.target" ];
@@ -304,8 +312,8 @@ in {
305 networking.firewall.allowedTCPPorts =
313 networking.firewall.allowedTCPPorts =
306 optionals cfg.openFirewall [ cfg.port ]
314 optionals cfg.openFirewall [ cfg.port ]
307− ++ optional cfg.tcp.enable cfg.tcp.port
315+ ++ optional (cfg.openFirewall && cfg.tcp.enable) cfg.tcp.port
308− ++ optional cfg.http.enable cfg.http.port;
316+ ++ optional (cfg.openFirewall && cfg.http.enable) cfg.http.port;
nixos/modules/services/continuous-integration/github-runner.nix+10
@@ -299,6 +299,16 @@ in
299 RestrictRealtime = true;
299 RestrictRealtime = true;
300 RestrictSUIDSGID = true;
300 RestrictSUIDSGID = true;
301 UMask = "0066";
301 UMask = "0066";
302+ ProtectProc = "invisible";
304+ SystemCallFilter = [
311+ RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" "AF_NETLINK" ];
303 # Needs network access
313 # Needs network access
304 PrivateNetwork = false;
314 PrivateNetwork = false;
nixos/modules/services/continuous-integration/gitlab-runner.nix+9−2
@@ -36,12 +36,12 @@ let
37 # register new services
37 # register new services
38 ${concatStringsSep "\n" (mapAttrsToList (name: service: ''
38 ${concatStringsSep "\n" (mapAttrsToList (name: service: ''
39− if echo "$NEW_SERVICES" | grep -xq ${name}; then
39+ if echo "$NEW_SERVICES" | grep -xq "${name}"; then
40 bash -c ${escapeShellArg (concatStringsSep " \\\n " ([
40 bash -c ${escapeShellArg (concatStringsSep " \\\n " ([
41 "set -a && source ${service.registrationConfigFile} &&"
41 "set -a && source ${service.registrationConfigFile} &&"
42 "gitlab-runner register"
42 "gitlab-runner register"
43 "--non-interactive"
43 "--non-interactive"
44− "--name ${name}"
44+ (if service.description != null then "--description \"${service.description}\"" else "--name '${name}'")
45 "--executor ${service.executor}"
45 "--executor ${service.executor}"
46 "--limit ${toString service.limit}"
46 "--limit ${toString service.limit}"
47 "--request-concurrency ${toString service.requestConcurrency}"
47 "--request-concurrency ${toString service.requestConcurrency}"
@@ -365,6 +365,13 @@ in
365 with <literal>RUNNER_ENV</literal> variable set.
365 with <literal>RUNNER_ENV</literal> variable set.
368+ description = mkOption {
369+ type = types.nullOr types.str;
372+ Name/description of the runner.
368 executor = mkOption {
375 executor = mkOption {
369 type = types.str;
376 type = types.str;
370 default = "docker";
377 default = "docker";
nixos/modules/services/databases/cockroachdb.nix+37−29
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
@@ -6,46 +6,44 @@ let
6 cfg = config.services.cockroachdb;
6 cfg = config.services.cockroachdb;
7 crdb = cfg.package;
7 crdb = cfg.package;
9− escape = builtins.replaceStrings ["%"] ["%%"];
9+ startupCommand = utils.escapeSystemdExecArgs
10− ifNotNull = v: s: optionalString (v != null) s;
10+ ([
12− startupCommand = lib.concatStringsSep " "
13− [ # Basic startup
11+ # Basic startup
14− "${crdb}/bin/cockroach start"
12+ "${crdb}/bin/cockroach"
15 "--logtostderr"
14 "--logtostderr"
16 "--store=/var/lib/cockroachdb"
15 "--store=/var/lib/cockroachdb"
17− (ifNotNull cfg.locality "--locality='${cfg.locality}'")
19 # WebUI settings
17 # WebUI settings
20− "--http-addr='${cfg.http.address}:${toString cfg.http.port}'"
18+ "--http-addr=${cfg.http.address}:${toString cfg.http.port}"
22 # Cluster listen address
20 # Cluster listen address
23− "--listen-addr='${cfg.listen.address}:${toString cfg.listen.port}'"
21+ "--listen-addr=${cfg.listen.address}:${toString cfg.listen.port}"
25− # Cluster configuration
26− (ifNotNull cfg.join "--join=${cfg.join}")
28− # Cache and memory settings. Must be escaped.
23+ # Cache and memory settings.
29− "--cache='${escape cfg.cache}'"
24+ "--cache=${cfg.cache}"
30− "--max-sql-memory='${escape cfg.maxSqlMemory}'"
25+ "--max-sql-memory=${cfg.maxSqlMemory}"
32 # Certificate/security settings.
27 # Certificate/security settings.
33 (if cfg.insecure then "--insecure" else "--certs-dir=${cfg.certsDir}")
28 (if cfg.insecure then "--insecure" else "--certs-dir=${cfg.certsDir}")
35−
30+ ++ lib.optional (cfg.join != null) "--join=${cfg.join}"
31+ ++ lib.optional (cfg.locality != null) "--locality=${cfg.locality}"
36− addressOption = descr: defaultPort: {
34+ addressOption = descr: defaultPort: {
37− address = mkOption {
35+ address = mkOption {
38− type = types.str;
36+ type = types.str;
39− default = "localhost";
37+ default = "localhost";
40− description = "Address to bind to for ${descr}";
38+ description = "Address to bind to for ${descr}";
43− port = mkOption {
41+ port = mkOption {
44− type = types.port;
42+ type = types.port;
45− default = defaultPort;
43+ default = defaultPort;
46− description = "Port to bind to for ${descr}";
44+ description = "Port to bind to for ${descr}";
@@ -159,6 +157,16 @@ in
159 only contain open source features and open source code).
157 only contain open source features and open source code).
161+ extraArgs = mkOption {
162+ type = types.listOf types.str;
164+ example = [ "--advertise-addr" "[fe80::f6f2:::]" ];
166+ Extra CLI arguments passed to <command>cockroach start</command>.
167+ For the full list of supported argumemnts, check <link xlink:href="https://www.cockroachlabs.com/docs/stable/cockroach-start.html#flags"/>
nixos/modules/services/databases/couchdb.nix+6
@@ -193,6 +193,11 @@ in {
194 preStart = ''
194 preStart = ''
195 touch ${cfg.configFile}
195 touch ${cfg.configFile}
196+ if ! test -e ${cfg.databaseDir}/.erlang.cookie; then
197+ touch ${cfg.databaseDir}/.erlang.cookie
198+ chmod 600 ${cfg.databaseDir}/.erlang.cookie
199+ dd if=/dev/random bs=16 count=1 | base64 > ${cfg.databaseDir}/.erlang.cookie
198 environment = {
203 environment = {
@@ -204,6 +209,7 @@ in {
204 ERL_FLAGS= ''-couch_ini ${cfg.package}/etc/default.ini ${configFile} ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} ${cfg.configFile}'';
209 ERL_FLAGS= ''-couch_ini ${cfg.package}/etc/default.ini ${configFile} ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} ${cfg.configFile}'';
205 # 5. the vm.args file
210 # 5. the vm.args file
206 COUCHDB_ARGS_FILE=''${cfg.argsFile}'';
211 COUCHDB_ARGS_FILE=''${cfg.argsFile}'';
212+ HOME =''${cfg.databaseDir}'';
209 serviceConfig = {
215 serviceConfig = {
nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+4−4
@@ -58,7 +58,7 @@ in {
58 Configuration for the media session core. For details see
58 Configuration for the media session core. For details see
59 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/media-session.conf
59 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/media-session.conf
61− default = {};
61+ default = defaults.media-session;
64 alsa-monitor = mkOption {
64 alsa-monitor = mkOption {
@@ -67,7 +67,7 @@ in {
67 Configuration for the alsa monitor. For details see
67 Configuration for the alsa monitor. For details see
68 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/alsa-monitor.conf
68 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/alsa-monitor.conf
70− default = {};
70+ default = defaults.alsa-monitor;
73 bluez-monitor = mkOption {
73 bluez-monitor = mkOption {
@@ -76,7 +76,7 @@ in {
76 Configuration for the bluez5 monitor. For details see
76 Configuration for the bluez5 monitor. For details see
77 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/bluez-monitor.conf
77 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/bluez-monitor.conf
79− default = {};
79+ default = defaults.bluez-monitor;
82 v4l2-monitor = mkOption {
82 v4l2-monitor = mkOption {
@@ -85,7 +85,7 @@ in {
85 Configuration for the V4L2 monitor. For details see
85 Configuration for the V4L2 monitor. For details see
86 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/v4l2-monitor.conf
86 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/v4l2-monitor.conf
88− default = {};
88+ default = defaults.v4l2-monitor;
nixos/modules/services/development/jupyter/default.nix+1
@@ -194,6 +194,7 @@ in {
194 extraGroups = [ cfg.group ];
194 extraGroups = [ cfg.group ];
195 home = "/var/lib/jupyter";
195 home = "/var/lib/jupyter";
196 createHome = true;
196 createHome = true;
197+ isSystemUser = true;
197 useDefaultShell = true; # needed so that the user can start a terminal.
198 useDefaultShell = true; # needed so that the user can start a terminal.
nixos/modules/services/editors/haste.nixnew file+86
@@ -0,0 +1,86 @@
1+{ config, lib, pkgs, ... }:
6+ pkg = pkgs.haste-server;
7+ cfg = config.services.haste-server;
9+ format = pkgs.formats.json {};
12+ options.services.haste-server = {
13+ enable = mkEnableOption "haste-server";
14+ openFirewall = mkEnableOption "firewall passthrough for haste-server";
16+ settings = mkOption {
18+ Configuration for haste-server.
19+ For documentation see <link xlink:href="https://github.com/toptal/haste-server#settings">project readme</link>
25+ config = mkIf (cfg.enable) {
26+ networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.settings.port ];
28+ services.haste-server = {
30+ host = mkDefault "::";
31+ port = mkDefault 7777;
33+ keyLength = mkDefault 10;
34+ maxLength = mkDefault 400000;
36+ staticMaxAge = mkDefault 86400;
37+ recompressStaticAssets = mkDefault false;
39+ logging = mkDefault [
47+ keyGenerator = mkDefault {
54+ totalRequests = mkDefault 500;
55+ every = mkDefault 60000;
60+ storage = mkDefault {
65+ about = mkDefault "${pkg}/share/haste-server/about.md";
70+ systemd.services.haste-server = {
71+ wantedBy = [ "multi-user.target" ];
72+ requires = [ "network.target" ];
73+ after = [ "network.target" ];
76+ User = "haste-server";
78+ StateDirectory = "haste-server";
79+ WorkingDirectory = "/var/lib/haste-server";
80+ ExecStart = "${pkg}/bin/haste-server ${format.generate "config.json" cfg.settings}";
83+ path = with pkgs; [ pkg coreutils ];
nixos/modules/services/hardware/udev.nix+125−23
@@ -8,6 +8,24 @@ let
9 cfg = config.services.udev;
9 cfg = config.services.udev;
11+ initrdUdevRules = pkgs.runCommand "initrd-udev-rules" {} ''
12+ mkdir -p $out/etc/udev/rules.d
13+ for f in 60-cdrom_id 60-persistent-storage 75-net-description 80-drivers 80-net-setup-link; do
14+ ln -s ${config.boot.initrd.systemd.package}/lib/udev/rules.d/$f.rules $out/etc/udev/rules.d
19+ # networkd link files are used early by udev to set up interfaces early.
20+ # This must be done in stage 1 to avoid race conditions between udev and
22+ # TODO move this into the initrd-network module when it exists
23+ initrdLinkUnits = pkgs.runCommand "initrd-link-units" {} ''
25+ ln -s ${udev}/lib/systemd/network/*.link $out/
26+ ${lib.concatMapStringsSep "\n" (file: "ln -s ${file} $out/") (lib.mapAttrsToList (n: v: "${v.unit}/${n}") (lib.filterAttrs (n: _: hasSuffix ".link" n) config.systemd.network.units))}
11 extraUdevRules = pkgs.writeTextFile {
29 extraUdevRules = pkgs.writeTextFile {
12 name = "extra-udev-rules";
30 name = "extra-udev-rules";
13 text = cfg.extraRules;
31 text = cfg.extraRules;
@@ -23,17 +41,16 @@ let
23 nixosRules = ''
41 nixosRules = ''
24 # Miscellaneous devices.
42 # Miscellaneous devices.
25 KERNEL=="kvm", MODE="0666"
43 KERNEL=="kvm", MODE="0666"
26− KERNEL=="kqemu", MODE="0666"
28 # Needed for gpm.
45 # Needed for gpm.
29 SUBSYSTEM=="input", KERNEL=="mice", TAG+="systemd"
46 SUBSYSTEM=="input", KERNEL=="mice", TAG+="systemd"
32 # Perform substitutions in all udev rules files.
49 # Perform substitutions in all udev rules files.
33− udevRules = pkgs.runCommand "udev-rules"
50+ udevRulesFor = { name, udevPackages, udevPath, udev, systemd, binPackages, initrdBin ? null }: pkgs.runCommand name
34 { preferLocalBuild = true;
51 { preferLocalBuild = true;
35 allowSubstitutes = false;
52 allowSubstitutes = false;
36− packages = unique (map toString cfg.packages);
53+ packages = unique (map toString udevPackages);
39 mkdir -p $out
56 mkdir -p $out
@@ -61,6 +78,9 @@ let
61 --replace \"/bin/mount \"${pkgs.util-linux}/bin/mount \
78 --replace \"/bin/mount \"${pkgs.util-linux}/bin/mount \
62 --replace /usr/bin/readlink ${pkgs.coreutils}/bin/readlink \
79 --replace /usr/bin/readlink ${pkgs.coreutils}/bin/readlink \
63 --replace /usr/bin/basename ${pkgs.coreutils}/bin/basename
80 --replace /usr/bin/basename ${pkgs.coreutils}/bin/basename
81+ ${optionalString (initrdBin != null) ''
82+ substituteInPlace $i --replace '/run/current-system/systemd' "${removeSuffix "/bin" initrdBin}"
66 echo -n "Checking that all programs called by relative paths in udev rules exist in ${udev}/lib/udev... "
86 echo -n "Checking that all programs called by relative paths in udev rules exist in ${udev}/lib/udev... "
@@ -85,8 +105,9 @@ let
85 for i in $import_progs $run_progs; do
105 for i in $import_progs $run_progs; do
86 # if the path refers to /run/current-system/systemd, replace with config.systemd.package
106 # if the path refers to /run/current-system/systemd, replace with config.systemd.package
87 if [[ $i == /run/current-system/systemd* ]]; then
107 if [[ $i == /run/current-system/systemd* ]]; then
88− i="${config.systemd.package}/''${i#/run/current-system/systemd/}"
108+ i="${systemd}/''${i#/run/current-system/systemd/}"
90 if [[ ! -x $i ]]; then
111 if [[ ! -x $i ]]; then
91 echo "FAIL"
112 echo "FAIL"
92 echo "$i is called in udev rules but is not executable or does not exist"
113 echo "$i is called in udev rules but is not executable or does not exist"
@@ -103,7 +124,7 @@ let
103 echo "Consider fixing the following udev rules:"
124 echo "Consider fixing the following udev rules:"
104 echo "$filesToFixup" | while read localFile; do
125 echo "$filesToFixup" | while read localFile; do
105 remoteFile="origin unknown"
126 remoteFile="origin unknown"
106− for i in ${toString cfg.packages}; do
127+ for i in ${toString binPackages}; do
107 for j in "$i"/*/udev/rules.d/*; do
128 for j in "$i"/*/udev/rules.d/*; do
108 [ -e "$out/$(basename "$j")" ] || continue
129 [ -e "$out/$(basename "$j")" ] || continue
109 [ "$(basename "$j")" = "$(basename "$localFile")" ] || continue
130 [ "$(basename "$j")" = "$(basename "$localFile")" ] || continue
@@ -126,7 +147,7 @@ let
126 ${optionalString (!config.boot.hardwareScan) ''
147 ${optionalString (!config.boot.hardwareScan) ''
127 ln -s /dev/null $out/80-drivers.rules
148 ln -s /dev/null $out/80-drivers.rules
131 hwdbBin = pkgs.runCommand "hwdb.bin"
152 hwdbBin = pkgs.runCommand "hwdb.bin"
132 { preferLocalBuild = true;
153 { preferLocalBuild = true;
@@ -202,20 +223,6 @@ in
205− initrdRules = mkOption {
208− SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
212− <command>udev</command> rules to include in the initrd
213− <emphasis>only</emphasis>. They'll be written into file
214− <filename>99-local.rules</filename>. Thus they are read and applied
215− after the essential initrd rules.
219 extraRules = mkOption {
226 extraRules = mkOption {
220 default = "";
227 default = "";
221 example = ''
228 example = ''
@@ -283,6 +290,52 @@ in
293+ boot.initrd.services.udev = {
295+ packages = mkOption {
296+ type = types.listOf types.path;
300+ <emphasis>This will only be used when systemd is used in stage 1.</emphasis>
302+ List of packages containing <command>udev</command> rules that will be copied to stage 1.
304+ <filename><replaceable>pkg</replaceable>/etc/udev/rules.d</filename> and
305+ <filename><replaceable>pkg</replaceable>/lib/udev/rules.d</filename>
310+ binPackages = mkOption {
311+ type = types.listOf types.path;
315+ <emphasis>This will only be used when systemd is used in stage 1.</emphasis>
317+ Packages to search for binaries that are referenced by the udev rules in stage 1.
318+ This list always contains /bin of the initrd.
326+ SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
330+ <command>udev</command> rules to include in the initrd
331+ <emphasis>only</emphasis>. They'll be written into file
332+ <filename>99-local.rules</filename>. Thus they are read and applied
333+ after the essential initrd rules.
@@ -298,16 +351,61 @@ in
299 boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
352 boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
301− boot.initrd.extraUdevRulesCommands = optionalString (cfg.initrdRules != "")
354+ boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
303 cat <<'EOF' > $out/99-local.rules
356 cat <<'EOF' > $out/99-local.rules
304− ${cfg.initrdRules}
357+ ${config.boot.initrd.services.udev.rules}
361+ boot.initrd.systemd.additionalUpstreamUnits = [
362+ # TODO: "initrd-udevadm-cleanup-db.service" is commented out because of https://github.com/systemd/systemd/issues/12953
363+ "systemd-udevd-control.socket"
364+ "systemd-udevd-kernel.socket"
365+ "systemd-udevd.service"
366+ "systemd-udev-settle.service"
367+ "systemd-udev-trigger.service"
369+ boot.initrd.systemd.storePaths = [
370+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-udevd"
371+ "${config.boot.initrd.systemd.package}/lib/udev/ata_id"
372+ "${config.boot.initrd.systemd.package}/lib/udev/cdrom_id"
373+ "${config.boot.initrd.systemd.package}/lib/udev/scsi_id"
374+ "${config.boot.initrd.systemd.package}/lib/udev/rules.d"
375+ ] ++ map (x: "${x}/bin") config.boot.initrd.services.udev.binPackages;
377+ # Generate the udev rules for the initrd
378+ boot.initrd.systemd.contents = {
379+ "/etc/udev/rules.d".source = udevRulesFor {
380+ name = "initrd-udev-rules";
381+ initrdBin = config.boot.initrd.systemd.contents."/bin".source;
382+ udevPackages = config.boot.initrd.services.udev.packages;
383+ udevPath = config.boot.initrd.systemd.contents."/bin".source;
384+ udev = config.boot.initrd.systemd.package;
385+ systemd = config.boot.initrd.systemd.package;
386+ binPackages = config.boot.initrd.services.udev.binPackages ++ [ config.boot.initrd.systemd.contents."/bin".source ];
388+ "/etc/systemd/network".source = initrdLinkUnits;
390+ # Insert initrd rules
391+ boot.initrd.services.udev.packages = [
393+ (mkIf (config.boot.initrd.services.udev.rules != "") (pkgs.writeTextFile {
394+ name = "initrd-udev-rules";
395+ destination = "/etc/udev/rules.d/99-local.rules";
396+ text = config.boot.initrd.services.udev.rules;
308 environment.etc =
400 environment.etc =
310− "udev/rules.d".source = udevRules;
402+ "udev/rules.d".source = udevRulesFor {
403+ name = "udev-rules";
404+ udevPackages = cfg.packages;
405+ systemd = config.systemd.package;
406+ binPackages = cfg.packages;
407+ inherit udevPath udev;
311 "udev/hwdb.bin".source = hwdbBin;
409 "udev/hwdb.bin".source = hwdbBin;
@@ -338,4 +436,8 @@ in
441+ (mkRenamedOptionModule [ "services" "udev" "initrdRules" ] [ "boot" "initrd" "services" "udev" "rules" ])
nixos/modules/services/hardware/udisks2.nix+39
@@ -4,6 +4,13 @@
8+ settingsFormat = pkgs.formats.ini {
9+ listToValue = concatMapStringsSep "," (generators.mkValueStringDefault {});
11+ configFiles = mapAttrs (name: value: (settingsFormat.generate name value)) (mapAttrs' (name: value: nameValuePair name value ) config.services.udisks2.settings);
9 ###### interface
16 ###### interface
@@ -21,6 +28,36 @@ with lib;
31+ settings = mkOption rec {
32+ type = types.attrsOf settingsFormat.type;
33+ apply = recursiveUpdate default;
38+ modules_load_preference = "ondemand";
41+ encryption = "luks2";
45+ example = literalExpression ''
47+ "WDC-WD10EZEX-60M2NA0-WD-WCC3F3SJ0698.conf" = {
55+ Options passed to udisksd.
56+ See <link xlink:href="http://manpages.ubuntu.com/manpages/latest/en/man5/udisks2.conf.5.html">here</link> and
57+ drive configuration in <link xlink:href="http://manpages.ubuntu.com/manpages/latest/en/man8/udisks.8.html">here</link> for supported options.
@@ -32,6 +69,8 @@ with lib;
33 environment.systemPackages = [ pkgs.udisks2 ];
70 environment.systemPackages = [ pkgs.udisks2 ];
72+ environment.etc = mapAttrs' (name: value: nameValuePair "udisks2/${name}" { source = value; } ) configFiles;
35 security.polkit.enable = true;
74 security.polkit.enable = true;
37 services.dbus.packages = [ pkgs.udisks2 ];
76 services.dbus.packages = [ pkgs.udisks2 ];
nixos/modules/services/hardware/usbrelayd.nixnew file+44
@@ -0,0 +1,44 @@
1+{ config, lib, pkgs, ... }:
4+ cfg = config.services.usbrelayd;
7+ options.services.usbrelayd = with types; {
8+ enable = mkEnableOption "USB Relay MQTT daemon";
12+ description = "Hostname or IP address of your MQTT Broker.";
13+ default = "127.0.0.1";
20+ clientName = mkOption {
22+ description = "Name, your client connects as.";
23+ default = "MyUSBRelay";
27+ config = mkIf cfg.enable {
29+ # TODO: Rename to .conf in upcomming release
30+ environment.etc."usbrelayd.ini".text = ''
32+ BROKER = ${cfg.broker}
33+ CLIENTNAME = ${cfg.clientName}
36+ services.udev.packages = [ pkgs.usbrelayd ];
37+ systemd.packages = [ pkgs.usbrelayd ];
38+ users.users.usbrelay = {
42+ users.groups.usbrelay = { };
nixos/modules/services/logging/klogd.nix+6−35
@@ -1,38 +1,9 @@
1−{ config, lib, pkgs, ... }:
1+{ lib, ... }:
6− ###### interface
4+ imports = [
7−
5+ (lib.mkRemovedOptionModule [ "security" "klogd" "enable" ] ''
8− options = {
6+ Logging of kernel messages is now handled by systemd.
10− services.klogd.enable = mkOption {
12− default = versionOlder (getVersion config.boot.kernelPackages.kernel) "3.5";
13− defaultText = literalExpression ''versionOlder (getVersion config.boot.kernelPackages.kernel) "3.5"'';
15− Whether to enable klogd, the kernel log message processing
16− daemon. Since systemd handles logging of kernel messages on
17− Linux 3.5 and later, this is only useful if you're running an
25− ###### implementation
27− config = mkIf config.services.klogd.enable {
28− systemd.services.klogd = {
29− description = "Kernel Log Daemon";
30− wantedBy = [ "multi-user.target" ];
31− path = [ pkgs.sysklogd ];
32− unitConfig.ConditionVirtualization = "!systemd-nspawn";
34− "klogd -c 1 -2 -n " +
35− "-k $(dirname $(readlink -f /run/booted-system/kernel))/System.map";
nixos/modules/services/logging/logrotate.nix+3−3
@@ -162,8 +162,8 @@ let
162 # file exist, but we only have sandboxed users here so brown these
162 # file exist, but we only have sandboxed users here so brown these
163 # out. according to man page that means su, create and createolddir.
163 # out. according to man page that means su, create and createolddir.
164 # files required to exist also won't be present, so missingok is forced.
164 # files required to exist also won't be present, so missingok is forced.
165− user=$(${pkgs.coreutils}/bin/id -un)
165+ user=$(${pkgs.buildPackages.coreutils}/bin/id -un)
166− group=$(${pkgs.coreutils}/bin/id -gn)
166+ group=$(${pkgs.buildPackages.coreutils}/bin/id -gn)
167 sed -e "s/\bsu\s.*/su $user $group/" \
167 sed -e "s/\bsu\s.*/su $user $group/" \
168 -e "s/\b\(create\s\+[0-9]*\s*\|createolddir\s\+[0-9]*\s\+\).*/\1$user $group/" \
168 -e "s/\b\(create\s\+[0-9]*\s*\|createolddir\s\+[0-9]*\s\+\).*/\1$user $group/" \
169 -e "1imissingok" -e "s/\bnomissingok\b//" \
169 -e "1imissingok" -e "s/\bnomissingok\b//" \
@@ -173,7 +173,7 @@ let
173 # 'error:' at common log level, so we can use grep, taking care
173 # 'error:' at common log level, so we can use grep, taking care
174 # to keep error codes
174 # to keep error codes
175 set -o pipefail
175 set -o pipefail
176− if ! ${pkgs.logrotate}/sbin/logrotate --debug /tmp/logrotate.conf 2>&1 \
176+ if ! ${pkgs.buildPackages.logrotate}/sbin/logrotate --debug /tmp/logrotate.conf 2>&1 \
177 | ( ! grep "error:" ) > /tmp/logrotate-error; then
177 | ( ! grep "error:" ) > /tmp/logrotate-error; then
178 echo "Logrotate configuration check failed."
178 echo "Logrotate configuration check failed."
179 echo "The failing configuration (after adjustments to pass tests in sandbox) was:"
179 echo "The failing configuration (after adjustments to pass tests in sandbox) was:"
nixos/modules/services/mail/mailman.nix+14−7
@@ -192,7 +192,6 @@ in {
192 log_dir = "/var/log/mailman";
192 log_dir = "/var/log/mailman";
193 lock_dir = "$var_dir/lock";
193 lock_dir = "$var_dir/lock";
194 etc_dir = "/etc";
194 etc_dir = "/etc";
195− ext_dir = "$etc_dir/mailman.d";
196 pid_file = "/run/mailman/master.pid";
195 pid_file = "/run/mailman/master.pid";
@@ -225,7 +224,14 @@ in {
225 See <https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html>.
224 See <https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html>.
228+ { assertion = cfg.webHosts != [];
230+ services.mailman.serve.enable requires there to be at least one entry
231+ in services.mailman.webHosts.
228− in (lib.optionals cfg.enablePostfix [
234+ ] ++ (lib.optionals cfg.enablePostfix [
229 { assertion = postfix.enable;
235 { assertion = postfix.enable;
230 message = ''
236 message = ''
231 Mailman's default NixOS configuration requires Postfix to be enabled.
237 Mailman's default NixOS configuration requires Postfix to be enabled.
@@ -275,15 +281,14 @@ in {
275 globals().update(json.load(f))
281 globals().update(json.load(f))
278− services.nginx = mkIf cfg.serve.enable {
284+ services.nginx = mkIf (cfg.serve.enable && cfg.webHosts != []) {
279 enable = mkDefault true;
285 enable = mkDefault true;
280− virtualHosts."${lib.head cfg.webHosts}" = {
286+ virtualHosts = lib.genAttrs cfg.webHosts (webHost: {
281− serverAliases = cfg.webHosts;
282 locations = {
287 locations = {
283 "/".extraConfig = "uwsgi_pass unix:/run/mailman-web.socket;";
288 "/".extraConfig = "uwsgi_pass unix:/run/mailman-web.socket;";
284 "/static/".alias = webSettings.STATIC_ROOT + "/";
289 "/static/".alias = webSettings.STATIC_ROOT + "/";
289 environment.systemPackages = [ (pkgs.buildEnv {
294 environment.systemPackages = [ (pkgs.buildEnv {
@@ -313,7 +318,9 @@ in {
313 systemd.services = {
318 systemd.services = {
314 mailman = {
319 mailman = {
315 description = "GNU Mailman Master Process";
320 description = "GNU Mailman Master Process";
321+ before = lib.optional cfg.enablePostfix "postfix.service";
316− after = [ "network.target" ];
322+ after = [ "network.target" ]
323+ ++ lib.optional cfg.enablePostfix "postfix-setup.service";
317 restartTriggers = [ config.environment.etc."mailman.cfg".source ];
324 restartTriggers = [ config.environment.etc."mailman.cfg".source ];
318 wantedBy = [ "multi-user.target" ];
325 wantedBy = [ "multi-user.target" ];
319 serviceConfig = {
326 serviceConfig = {
nixos/modules/services/mail/postfix.nix+22−17
@@ -723,23 +723,10 @@ in
723 { ${setgidGroup}.gid = config.ids.gids.postdrop;
723 { ${setgidGroup}.gid = config.ids.gids.postdrop;
726− systemd.services.postfix =
726+ systemd.services.postfix-setup =
727− { description = "Postfix mail server";
727+ { description = "Setup for Postfix mail server";
729− wantedBy = [ "multi-user.target" ];
730− after = [ "network.target" ];
731− path = [ pkgs.postfix ];
733− serviceConfig = {
728+ serviceConfig.Type = "oneshot";
734− Type = "forking";
729+ script = ''
736− PIDFile = "/var/lib/postfix/queue/pid/master.pid";
737− ExecStart = "${pkgs.postfix}/bin/postfix start";
738− ExecStop = "${pkgs.postfix}/bin/postfix stop";
739− ExecReload = "${pkgs.postfix}/bin/postfix reload";
743 # Backwards compatibility
730 # Backwards compatibility
744 if [ ! -d /var/lib/postfix ] && [ -d /var/postfix ]; then
731 if [ ! -d /var/lib/postfix ] && [ -d /var/postfix ]; then
745 mkdir -p /var/lib
732 mkdir -p /var/lib
@@ -777,6 +764,24 @@ in
767+ systemd.services.postfix =
768+ { description = "Postfix mail server";
770+ wantedBy = [ "multi-user.target" ];
771+ after = [ "network.target" "postfix-setup.service" ];
772+ requires = [ "postfix-setup.service" ];
773+ path = [ pkgs.postfix ];
778+ PIDFile = "/var/lib/postfix/queue/pid/master.pid";
779+ ExecStart = "${pkgs.postfix}/bin/postfix start";
780+ ExecStop = "${pkgs.postfix}/bin/postfix stop";
781+ ExecReload = "${pkgs.postfix}/bin/postfix reload";
780 services.postfix.config = (mapAttrs (_: v: mkDefault v) {
785 services.postfix.config = (mapAttrs (_: v: mkDefault v) {
781 compatibility_level = pkgs.postfix.version;
786 compatibility_level = pkgs.postfix.version;
782 mail_owner = cfg.user;
787 mail_owner = cfg.user;
nixos/modules/services/matrix/matrix-synapse.nix+1−1
@@ -81,7 +81,7 @@ in {
81 (mkRemovedOptionModule [ "services" "matrix-synapse" "verbose" ] "Use a log config instead." )
81 (mkRemovedOptionModule [ "services" "matrix-synapse" "verbose" ] "Use a log config instead." )
83 # options that were moved into rfc42 style settigns
83 # options that were moved into rfc42 style settigns
84− (mkRemovedOptionModule [ "services" "matrix-synapse" "app_service_config_files" ] "Use settings.app_service_config_Files instead" )
84+ (mkRemovedOptionModule [ "services" "matrix-synapse" "app_service_config_files" ] "Use settings.app_service_config_files instead" )
85 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_args" ] "Use settings.database.args instead" )
85 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_args" ] "Use settings.database.args instead" )
86 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_name" ] "Use settings.database.args.database instead" )
86 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_name" ] "Use settings.database.args.database instead" )
87 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_type" ] "Use settings.database.name instead" )
87 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_type" ] "Use settings.database.name instead" )
nixos/modules/services/misc/dendrite.nix+1
@@ -247,6 +247,7 @@ in
247 WorkingDirectory = workingDir;
247 WorkingDirectory = workingDir;
248 RuntimeDirectory = "dendrite";
248 RuntimeDirectory = "dendrite";
249 RuntimeDirectoryMode = "0700";
249 RuntimeDirectoryMode = "0700";
250+ LimitNOFILE = 65535;
250 EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
251 EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
251 ExecStartPre = ''
252 ExecStartPre = ''
252 ${pkgs.envsubst}/bin/envsubst \
253 ${pkgs.envsubst}/bin/envsubst \
nixos/modules/services/misc/etebase-server.nix+1−1
@@ -166,7 +166,7 @@ in
167 makeWrapper ${pythonEnv}/bin/etebase-server \
167 makeWrapper ${pythonEnv}/bin/etebase-server \
168 $out/bin/etebase-server \
168 $out/bin/etebase-server \
169− --run "cd ${cfg.dataDir}" \
169+ --chdir ${escapeShellArg cfg.dataDir} \
170 --prefix ETEBASE_EASY_CONFIG_PATH : "${configIni}"
170 --prefix ETEBASE_EASY_CONFIG_PATH : "${configIni}"
nixos/modules/services/misc/ethminer.nix+4−4
@@ -22,7 +22,7 @@ in
24 recheckInterval = mkOption {
24 recheckInterval = mkOption {
25− type = types.int;
25+ type = types.ints.unsigned;
26 default = 2000;
26 default = 2000;
27 description = "Interval in milliseconds between farm rechecks.";
27 description = "Interval in milliseconds between farm rechecks.";
@@ -70,7 +70,7 @@ in
72 maxPower = mkOption {
72 maxPower = mkOption {
73− type = types.int;
73+ type = types.ints.unsigned;
74 default = 113;
74 default = 113;
75 description = "Miner max watt usage.";
75 description = "Miner max watt usage.";
@@ -85,7 +85,7 @@ in
85 config = mkIf cfg.enable {
85 config = mkIf cfg.enable {
87 systemd.services.ethminer = {
87 systemd.services.ethminer = {
88− path = [ pkgs.cudatoolkit ];
88+ path = optional (cfg.toolkit == "cuda") [ pkgs.cudaPackages.cudatoolkit ];
89 description = "ethminer ethereum mining service";
89 description = "ethminer ethereum mining service";
90 wantedBy = [ "multi-user.target" ];
90 wantedBy = [ "multi-user.target" ];
91 after = [ "network.target" ];
91 after = [ "network.target" ];
@@ -97,7 +97,7 @@ in
97 Restart = "always";
97 Restart = "always";
100− environment = {
100+ environment = mkIf (cfg.toolkit == "cuda") {
101 LD_LIBRARY_PATH = "${config.boot.kernelPackages.nvidia_x11}/lib";
101 LD_LIBRARY_PATH = "${config.boot.kernelPackages.nvidia_x11}/lib";
nixos/modules/services/misc/gitea.nix+11−16
@@ -499,6 +499,7 @@ in
499 oldLfsJwtSecret = "${cfg.stateDir}/custom/conf/jwt_secret"; # old file for LFS_JWT_SECRET
499 oldLfsJwtSecret = "${cfg.stateDir}/custom/conf/jwt_secret"; # old file for LFS_JWT_SECRET
500 lfsJwtSecret = "${cfg.stateDir}/custom/conf/lfs_jwt_secret"; # new file for LFS_JWT_SECRET
500 lfsJwtSecret = "${cfg.stateDir}/custom/conf/lfs_jwt_secret"; # new file for LFS_JWT_SECRET
501 internalToken = "${cfg.stateDir}/custom/conf/internal_token";
501 internalToken = "${cfg.stateDir}/custom/conf/internal_token";
502+ replaceSecretBin = "${pkgs.replace-secret}/bin/replace-secret";
503 # copy custom configuration and generate a random secret key if needed
504 # copy custom configuration and generate a random secret key if needed
504 ${optionalString (cfg.useWizard == false) ''
505 ${optionalString (cfg.useWizard == false) ''
@@ -526,23 +527,17 @@ in
526 ${gitea}/bin/gitea generate secret INTERNAL_TOKEN > ${internalToken}
527 ${gitea}/bin/gitea generate secret INTERNAL_TOKEN > ${internalToken}
529− SECRETKEY="$(head -n1 ${secretKey})"
530+ chmod u+w '${runConfig}'
531+ ${replaceSecretBin} '#secretkey#' '${secretKey}' '${runConfig}'
530− DBPASS="$(head -n1 ${cfg.database.passwordFile})"
532+ ${replaceSecretBin} '#dbpass#' '${cfg.database.passwordFile}' '${runConfig}'
531− OAUTH2JWTSECRET="$(head -n1 ${oauth2JwtSecret})"
533+ ${replaceSecretBin} '#oauth2jwtsecret#' '${oauth2JwtSecret}' '${runConfig}'
532− LFSJWTSECRET="$(head -n1 ${lfsJwtSecret})"
534+ ${replaceSecretBin} '#lfsjwtsecret#' '${lfsJwtSecret}' '${runConfig}'
533− INTERNALTOKEN="$(head -n1 ${internalToken})"
535+ ${replaceSecretBin} '#internaltoken#' '${internalToken}' '${runConfig}'
534− ${if (cfg.mailerPasswordFile == null) then ''
537+ ${lib.optionalString (cfg.mailerPasswordFile != null) ''
535− MAILERPASSWORD="#mailerpass#"
537− MAILERPASSWORD="$(head -n1 ${cfg.mailerPasswordFile} || :)"
538+ ${replaceSecretBin} '#mailerpass#' '${cfg.mailerPasswordFile}' '${runConfig}'
539− sed -e "s,#secretkey#,$SECRETKEY,g" \
540− -e "s,#dbpass#,$DBPASS,g" \
541− -e "s,#oauth2jwtsecret#,$OAUTH2JWTSECRET,g" \
542− -e "s,#lfsjwtsecret#,$LFSJWTSECRET,g" \
543− -e "s,#internaltoken#,$INTERNALTOKEN,g" \
544− -e "s,#mailerpass#,$MAILERPASSWORD,g" \
545− -i ${runConfig}
540+ chmod u-w '${runConfig}'
547 (umask 027; gitea_setup)
542 (umask 027; gitea_setup)
nixos/modules/services/misc/gitit.nix+1−1
@@ -10,7 +10,7 @@ let
11 toYesNo = b: if b then "yes" else "no";
11 toYesNo = b: if b then "yes" else "no";
13− gititShared = with cfg.haskellPackages; gitit + "/share/" + pkgs.stdenv.hostPlatform.system + "-" + ghc.name + "/" + gitit.pname + "-" + gitit.version;
13+ gititShared = with cfg.haskellPackages; gitit + "/share/" + ghc.targetPrefix + ghc.haskellCompilerName + "/" + gitit.pname + "-" + gitit.version;
15 gititWithPkgs = hsPkgs: extras: hsPkgs.ghcWithPackages (self: with self; [ gitit ] ++ (extras self));
15 gititWithPkgs = hsPkgs: extras: hsPkgs.ghcWithPackages (self: with self; [ gitit ] ++ (extras self));
nixos/modules/services/misc/gitlab.nix+2−2
@@ -179,7 +179,7 @@ let
179 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
179 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
180 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
180 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
181 --set RAKEOPT '-f ${cfg.packages.gitlab}/share/gitlab/Rakefile' \
181 --set RAKEOPT '-f ${cfg.packages.gitlab}/share/gitlab/Rakefile' \
182− --run 'cd ${cfg.packages.gitlab}/share/gitlab'
182+ --chdir '${cfg.packages.gitlab}/share/gitlab'
@@ -193,7 +193,7 @@ let
193 makeWrapper ${cfg.packages.gitlab.rubyEnv}/bin/rails $out/bin/gitlab-rails \
193 makeWrapper ${cfg.packages.gitlab.rubyEnv}/bin/rails $out/bin/gitlab-rails \
194 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
194 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
195 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
195 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
196− --run 'cd ${cfg.packages.gitlab}/share/gitlab'
196+ --chdir '${cfg.packages.gitlab}/share/gitlab'
nixos/modules/services/misc/nix-daemon.nix+8
@@ -708,6 +708,14 @@ in
709 systemd.packages = [ nixPackage ];
709 systemd.packages = [ nixPackage ];
711+ # Will only work once https://github.com/NixOS/nix/pull/6285 is merged
712+ # systemd.tmpfiles.packages = [ nixPackage ];
714+ # Can be dropped for Nix > https://github.com/NixOS/nix/pull/6285
715+ systemd.tmpfiles.rules = [
716+ "d /nix/var/nix/daemon-socket 0755 root root - -"
711 systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
719 systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
713 systemd.services.nix-daemon =
721 systemd.services.nix-daemon =
nixos/modules/services/misc/paperless-ng.nix → nixos/modules/services/misc/paperless.nixrenamed+49−51
@@ -2,11 +2,13 @@
5− cfg = config.services.paperless-ng;
5+ cfg = config.services.paperless;
7 defaultUser = "paperless";
7 defaultUser = "paperless";
9+ # Don't start a redis instance if the user sets a custom redis connection
9− hasCustomRedis = hasAttr "PAPERLESS_REDIS" cfg.extraConfig;
10+ enableRedis = !hasAttr "PAPERLESS_REDIS" cfg.extraConfig;
11+ redisServer = config.services.redis.servers.paperless;
12 PAPERLESS_DATA_DIR = cfg.dataDir;
14 PAPERLESS_DATA_DIR = cfg.dataDir;
@@ -15,15 +17,15 @@ let
15 GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}";
17 GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}";
17 lib.mapAttrs (_: toString) cfg.extraConfig
19 lib.mapAttrs (_: toString) cfg.extraConfig
18− ) // (optionalAttrs (!hasCustomRedis) {
20+ ) // (optionalAttrs enableRedis {
19− PAPERLESS_REDIS = "unix://${config.services.redis.servers.paperless-ng.unixSocket}";
21+ PAPERLESS_REDIS = "unix://${redisServer.unixSocket}";
22 manage = let
24 manage = let
23 setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
25 setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
24 in pkgs.writeShellScript "manage" ''
26 in pkgs.writeShellScript "manage" ''
25 ${setupEnv}
27 ${setupEnv}
26− exec ${cfg.package}/bin/paperless-ng "$@"
28+ exec ${cfg.package}/bin/paperless-ngx "$@"
29 # Secure the services
31 # Secure the services
@@ -36,7 +38,7 @@ let
36 "-/etc/hosts"
38 "-/etc/hosts"
37 "-/etc/localtime"
39 "-/etc/localtime"
38 "-/run/postgresql"
40 "-/run/postgresql"
39− ] ++ (optional (!hasCustomRedis) config.services.redis.servers.paperless-ng.unixSocket);
41+ ] ++ (optional enableRedis redisServer.unixSocket);
40 BindPaths = [
42 BindPaths = [
41 cfg.consumptionDir
43 cfg.consumptionDir
42 cfg.dataDir
44 cfg.dataDir
@@ -53,7 +55,6 @@ let
53 PrivateNetwork = true;
55 PrivateNetwork = true;
54 PrivateTmp = true;
56 PrivateTmp = true;
55 PrivateUsers = true;
57 PrivateUsers = true;
57 ProtectClock = true;
58 ProtectClock = true;
58 # Breaks if the home dir of the user is in /home
59 # Breaks if the home dir of the user is in /home
59 # Also does not add much value in combination with the TemporaryFileSystem.
60 # Also does not add much value in combination with the TemporaryFileSystem.
@@ -66,11 +67,15 @@ let
66 ProtectKernelModules = true;
67 ProtectKernelModules = true;
67 ProtectKernelTunables = true;
68 ProtectKernelTunables = true;
68 ProtectProc = "invisible";
69 ProtectProc = "invisible";
70+ # Don't restrict ProcSubset because django-q requires read access to /proc/stat
71+ # to query CPU and memory information.
72+ # Note that /proc only contains processes of user `paperless`, so this is safe.
73+ # ProcSubset = "pid";
69 RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
74 RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
70 RestrictNamespaces = true;
75 RestrictNamespaces = true;
71 RestrictRealtime = true;
76 RestrictRealtime = true;
72 RestrictSUIDSGID = true;
77 RestrictSUIDSGID = true;
73− SupplementaryGroups = optional (!hasCustomRedis) config.services.redis.servers.paperless-ng.user;
78+ SupplementaryGroups = optional enableRedis redisServer.user;
74 SystemCallArchitectures = "native";
79 SystemCallArchitectures = "native";
75 SystemCallFilter = [ "@system-service" "~@privileged @resources @setuid @keyring" ];
80 SystemCallFilter = [ "@system-service" "~@privileged @resources @setuid @keyring" ];
76 # Does not work well with the temporary root
81 # Does not work well with the temporary root
@@ -81,26 +86,22 @@ in
81 meta.maintainers = with maintainers; [ earvstedt Flakebi ];
86 meta.maintainers = with maintainers; [ earvstedt Flakebi ];
83 imports = [
88 imports = [
84− (mkRemovedOptionModule [ "services" "paperless"] ''
89+ (mkRenamedOptionModule [ "services" "paperless-ng" ] [ "services" "paperless" ])
85− The paperless module has been removed as the upstream project died.
86− Users should migrate to the paperless-ng module (services.paperless-ng).
87− More information can be found in the NixOS 21.11 release notes.
91− options.services.paperless-ng = {
92+ options.services.paperless = {
92 enable = mkOption {
93 enable = mkOption {
93 type = lib.types.bool;
94 type = lib.types.bool;
94 default = false;
95 default = false;
95 description = ''
96 description = ''
96− Enable Paperless-ng.
97+ Enable Paperless.
98 When started, the Paperless database is automatically created if it doesn't
99 When started, the Paperless database is automatically created if it doesn't
99 exist and updated if the Paperless package has changed.
100 exist and updated if the Paperless package has changed.
100 Both tasks are achieved by running a Django migration.
101 Both tasks are achieved by running a Django migration.
102 A script to manage the Paperless instance (by wrapping Django's manage.py) is linked to
103 A script to manage the Paperless instance (by wrapping Django's manage.py) is linked to
103− <literal>''${dataDir}/paperless-ng-manage</literal>.
104+ <literal>''${dataDir}/paperless-manage</literal>.
@@ -133,13 +134,13 @@ in
133 passwordFile = mkOption {
134 passwordFile = mkOption {
134 type = types.nullOr types.path;
135 type = types.nullOr types.path;
135 default = null;
136 default = null;
136− example = "/run/keys/paperless-ng-password";
137+ example = "/run/keys/paperless-password";
137 description = ''
138 description = ''
138 A file containing the superuser password.
139 A file containing the superuser password.
140 A superuser is required to access the web interface.
141 A superuser is required to access the web interface.
141 If unset, you can create a superuser manually by running
142 If unset, you can create a superuser manually by running
142− <literal>''${dataDir}/paperless-ng-manage createsuperuser</literal>.
143+ <literal>''${dataDir}/paperless-manage createsuperuser</literal>.
144 The default superuser name is <literal>admin</literal>. To change it, set
145 The default superuser name is <literal>admin</literal>. To change it, set
145 option <option>extraConfig.PAPERLESS_ADMIN_USER</option>.
146 option <option>extraConfig.PAPERLESS_ADMIN_USER</option>.
@@ -168,9 +169,9 @@ in
168 type = types.attrs;
169 type = types.attrs;
169 default = {};
170 default = {};
170 description = ''
171 description = ''
171− Extra paperless-ng config options.
172+ Extra paperless config options.
173− See <link xlink:href="https://paperless-ng.readthedocs.io/en/latest/configuration.html">the documentation</link>
174+ See <link xlink:href="https://paperless-ngx.readthedocs.io/en/latest/configuration.html">the documentation</link>
174 for available options.
175 for available options.
176 example = literalExpression ''
177 example = literalExpression ''
@@ -188,15 +189,14 @@ in
189 package = mkOption {
190 package = mkOption {
190 type = types.package;
191 type = types.package;
191− default = pkgs.paperless-ng;
192+ default = pkgs.paperless-ngx;
192− defaultText = literalExpression "pkgs.paperless-ng";
193+ defaultText = literalExpression "pkgs.paperless-ngx";
193 description = "The Paperless package to use.";
194 description = "The Paperless package to use.";
197 config = mkIf cfg.enable {
198 config = mkIf cfg.enable {
198− # Enable redis if no special url is set
199− services.redis.servers.paperless-ng.enable = mkIf (!hasCustomRedis) true;
199+ services.redis.servers.paperless.enable = mkIf enableRedis true;
201 systemd.tmpfiles.rules = [
201 systemd.tmpfiles.rules = [
202 "d '${cfg.dataDir}' - ${cfg.user} ${config.users.users.${cfg.user}.group} - -"
202 "d '${cfg.dataDir}' - ${cfg.user} ${config.users.users.${cfg.user}.group} - -"
@@ -208,11 +208,11 @@ in
211− systemd.services.paperless-ng-server = {
211+ systemd.services.paperless-scheduler = {
212− description = "Paperless document server";
212+ description = "Paperless scheduler";
213 serviceConfig = defaultServiceConfig // {
213 serviceConfig = defaultServiceConfig // {
214 User = cfg.user;
214 User = cfg.user;
215− ExecStart = "${cfg.package}/bin/paperless-ng qcluster";
215+ ExecStart = "${cfg.package}/bin/paperless-ngx qcluster";
216 Restart = "on-failure";
216 Restart = "on-failure";
217 # The `mbind` syscall is needed for running the classifier.
217 # The `mbind` syscall is needed for running the classifier.
218 SystemCallFilter = defaultServiceConfig.SystemCallFilter ++ [ "mbind" ];
218 SystemCallFilter = defaultServiceConfig.SystemCallFilter ++ [ "mbind" ];
@@ -221,15 +221,15 @@ in
222 environment = env;
222 environment = env;
223 wantedBy = [ "multi-user.target" ];
223 wantedBy = [ "multi-user.target" ];
224− wants = [ "paperless-ng-consumer.service" "paperless-ng-web.service" ];
224+ wants = [ "paperless-consumer.service" "paperless-web.service" ];
226 preStart = ''
226 preStart = ''
227− ln -sf ${manage} ${cfg.dataDir}/paperless-ng-manage
227+ ln -sf ${manage} ${cfg.dataDir}/paperless-manage
229 # Auto-migrate on first run or if the package has changed
229 # Auto-migrate on first run or if the package has changed
230 versionFile="${cfg.dataDir}/src-version"
230 versionFile="${cfg.dataDir}/src-version"
231 if [[ $(cat "$versionFile" 2>/dev/null) != ${cfg.package} ]]; then
231 if [[ $(cat "$versionFile" 2>/dev/null) != ${cfg.package} ]]; then
232− ${cfg.package}/bin/paperless-ng migrate
232+ ${cfg.package}/bin/paperless-ngx migrate
233 echo ${cfg.package} > "$versionFile"
233 echo ${cfg.package} > "$versionFile"
@@ -240,20 +240,18 @@ in
240 superuserStateFile="${cfg.dataDir}/superuser-state"
240 superuserStateFile="${cfg.dataDir}/superuser-state"
242 if [[ $(cat "$superuserStateFile" 2>/dev/null) != $superuserState ]]; then
242 if [[ $(cat "$superuserStateFile" 2>/dev/null) != $superuserState ]]; then
243− ${cfg.package}/bin/paperless-ng manage_superuser
243+ ${cfg.package}/bin/paperless-ngx manage_superuser
244 echo "$superuserState" > "$superuserStateFile"
244 echo "$superuserState" > "$superuserStateFile"
247− } // optionalAttrs (!hasCustomRedis) {
247+ } // optionalAttrs enableRedis {
248− after = [ "redis-paperless-ng.service" ];
248+ after = [ "redis-paperless.service" ];
251− # Password copying can't be implemented as a privileged preStart script
251+ # Reading the user-provided password file requires root access
252− # in 'paperless-ng-server' because 'defaultServiceConfig' limits the filesystem
253− # paths accessible by the service.
254− systemd.services.paperless-ng-copy-password = mkIf (cfg.passwordFile != null) {
252+ systemd.services.paperless-copy-password = mkIf (cfg.passwordFile != null) {
255− requiredBy = [ "paperless-ng-server.service" ];
253+ requiredBy = [ "paperless-scheduler.service" ];
256− before = [ "paperless-ng-server.service" ];
254+ before = [ "paperless-scheduler.service" ];
257 serviceConfig = {
255 serviceConfig = {
258 ExecStart = ''
256 ExecStart = ''
259 ${pkgs.coreutils}/bin/install --mode 600 --owner '${cfg.user}' --compare \
257 ${pkgs.coreutils}/bin/install --mode 600 --owner '${cfg.user}' --compare \
@@ -263,27 +261,27 @@ in
266− systemd.services.paperless-ng-consumer = {
264+ systemd.services.paperless-consumer = {
267 description = "Paperless document consumer";
265 description = "Paperless document consumer";
268 serviceConfig = defaultServiceConfig // {
266 serviceConfig = defaultServiceConfig // {
269 User = cfg.user;
267 User = cfg.user;
270− ExecStart = "${cfg.package}/bin/paperless-ng document_consumer";
268+ ExecStart = "${cfg.package}/bin/paperless-ngx document_consumer";
271 Restart = "on-failure";
269 Restart = "on-failure";
273 environment = env;
271 environment = env;
274− # Bind to `paperless-ng-server` so that the consumer never runs
272+ # Bind to `paperless-scheduler` so that the consumer never runs
275 # during migrations
273 # during migrations
276− bindsTo = [ "paperless-ng-server.service" ];
274+ bindsTo = [ "paperless-scheduler.service" ];
277− after = [ "paperless-ng-server.service" ];
275+ after = [ "paperless-scheduler.service" ];
280− systemd.services.paperless-ng-web = {
278+ systemd.services.paperless-web = {
281 description = "Paperless web server";
279 description = "Paperless web server";
282 serviceConfig = defaultServiceConfig // {
280 serviceConfig = defaultServiceConfig // {
283 User = cfg.user;
281 User = cfg.user;
284 ExecStart = ''
282 ExecStart = ''
285 ${pkgs.python3Packages.gunicorn}/bin/gunicorn \
283 ${pkgs.python3Packages.gunicorn}/bin/gunicorn \
286− -c ${cfg.package}/lib/paperless-ng/gunicorn.conf.py paperless.asgi:application
284+ -c ${cfg.package}/lib/paperless-ngx/gunicorn.conf.py paperless.asgi:application
288 Restart = "on-failure";
286 Restart = "on-failure";
@@ -296,15 +294,15 @@ in
297 environment = env // {
295 environment = env // {
298 PATH = mkForce cfg.package.path;
296 PATH = mkForce cfg.package.path;
299− PYTHONPATH = "${cfg.package.pythonPath}:${cfg.package}/lib/paperless-ng/src";
297+ PYTHONPATH = "${cfg.package.pythonPath}:${cfg.package}/lib/paperless-ngx/src";
301 # Allow the web interface to access the private /tmp directory of the server.
299 # Allow the web interface to access the private /tmp directory of the server.
302 # This is required to support uploading files via the web interface.
300 # This is required to support uploading files via the web interface.
303− unitConfig.JoinsNamespaceOf = "paperless-ng-server.service";
301+ unitConfig.JoinsNamespaceOf = "paperless-scheduler.service";
304− # Bind to `paperless-ng-server` so that the web server never runs
302+ # Bind to `paperless-scheduler` so that the web server never runs
305 # during migrations
303 # during migrations
306− bindsTo = [ "paperless-ng-server.service" ];
304+ bindsTo = [ "paperless-scheduler.service" ];
307− after = [ "paperless-ng-server.service" ];
305+ after = [ "paperless-scheduler.service" ];
310 users = optionalAttrs (cfg.user == defaultUser) {
308 users = optionalAttrs (cfg.user == defaultUser) {
nixos/modules/services/misc/sourcehut/default.nix+1−1
@@ -1018,7 +1018,7 @@ in
1018 inherit configIniOfService;
1018 inherit configIniOfService;
1019 mainService = mkMerge [ baseService {
1019 mainService = mkMerge [ baseService {
1020 serviceConfig.StateDirectory = [ "sourcehut/gitsrht" "sourcehut/gitsrht/repos" ];
1020 serviceConfig.StateDirectory = [ "sourcehut/gitsrht" "sourcehut/gitsrht/repos" ];
1021− preStart = mkIf (!versionAtLeast config.system.stateVersion "22.05") (mkBefore ''
1021+ preStart = mkIf (versionOlder config.system.stateVersion "22.05") (mkBefore ''
1022 # Fix Git hooks of repositories pre-dating https://github.com/NixOS/nixpkgs/pull/133984
1022 # Fix Git hooks of repositories pre-dating https://github.com/NixOS/nixpkgs/pull/133984
nixos/modules/services/misc/taskserver/default.nix+10−6
@@ -106,7 +106,7 @@ let
107 certtool = "${pkgs.gnutls.bin}/bin/certtool";
107 certtool = "${pkgs.gnutls.bin}/bin/certtool";
109− nixos-taskserver = with pkgs.python2.pkgs; buildPythonApplication {
109+ nixos-taskserver = with pkgs.python3.pkgs; buildPythonApplication {
110 name = "nixos-taskserver";
110 name = "nixos-taskserver";
112 src = pkgs.runCommand "nixos-taskserver-src" { preferLocalBuild = true; } ''
112 src = pkgs.runCommand "nixos-taskserver-src" { preferLocalBuild = true; } ''
@@ -277,10 +277,6 @@ in {
277 example = "::";
277 example = "::";
278 description = ''
278 description = ''
279 The address (IPv4, IPv6 or DNS) to listen on.
279 The address (IPv4, IPv6 or DNS) to listen on.
281− If the value is something else than <literal>localhost</literal> the
282− port defined by <option>listenPort</option> is automatically added to
283− <option>networking.firewall.allowedTCPPorts</option>.
@@ -292,6 +288,14 @@ in {
291+ openFirewall = mkOption {
295+ Whether to open the firewall for the specified Taskserver port.
295 fqdn = mkOption {
299 fqdn = mkOption {
296 type = types.str;
300 type = types.str;
297 default = "localhost";
301 default = "localhost";
@@ -560,7 +564,7 @@ in {
563− (mkIf (cfg.enable && cfg.listenHost != "localhost") {
567+ (mkIf (cfg.enable && cfg.openFirewall) {
564 networking.firewall.allowedTCPPorts = [ cfg.listenPort ];
568 networking.firewall.allowedTCPPorts = [ cfg.listenPort ];
nixos/modules/services/misc/taskserver/helper-tool.py+5−5
@@ -90,7 +90,7 @@ def certtool_cmd(*args, **kwargs):
91 return subprocess.check_output(
91 return subprocess.check_output(
92 [CERTTOOL_COMMAND] + list(args),
92 [CERTTOOL_COMMAND] + list(args),
93− preexec_fn=lambda: os.umask(0077),
93+ preexec_fn=lambda: os.umask(0o077),
94 stderr=subprocess.STDOUT,
94 stderr=subprocess.STDOUT,
@@ -164,7 +164,7 @@ def generate_key(org, user):
164 pubcert = os.path.join(basedir, "public.cert")
164 pubcert = os.path.join(basedir, "public.cert")
167− os.makedirs(basedir, mode=0700)
167+ os.makedirs(basedir, mode=0o700)
169 certtool_cmd("-p", "--bits", CERT_BITS, "--outfile", privkey)
169 certtool_cmd("-p", "--bits", CERT_BITS, "--outfile", privkey)
@@ -301,7 +301,7 @@ class Organisation(object):
301 return None
301 return None
302 if name not in self.users.keys():
302 if name not in self.users.keys():
303 output = taskd_cmd("add", "user", self.name, name,
303 output = taskd_cmd("add", "user", self.name, name,
304− capture_stdout=True)
304+ capture_stdout=True, encoding='utf-8')
305 key = RE_USERKEY.search(output)
305 key = RE_USERKEY.search(output)
306 if key is None:
306 if key is None:
307 msg = "Unable to find key while creating user {}."
307 msg = "Unable to find key while creating user {}."
@@ -412,9 +412,9 @@ class Manager(object):
412 if org is not None:
412 if org is not None:
413 if self.ignore_imperative and is_imperative(name):
413 if self.ignore_imperative and is_imperative(name):
415− for user in org.users.keys():
415+ for user in list(org.users.keys()):
416 org.del_user(user)
416 org.del_user(user)
417− for group in org.groups.keys():
417+ for group in list(org.groups.keys()):
418 org.del_group(group)
418 org.del_group(group)
419 taskd_cmd("remove", "org", name)
419 taskd_cmd("remove", "org", name)
420 del self._lazy_orgs[name]
420 del self._lazy_orgs[name]
nixos/modules/services/misc/zookeeper.nix+8−1
@@ -114,6 +114,13 @@ in {
114 type = types.package;
114 type = types.package;
118+ description = "The JRE with which to run Zookeeper";
119+ default = cfg.package.jre;
120+ defaultText = literalExpression "pkgs.zookeeper.jre";
121+ example = literalExpression "pkgs.jre";
122+ type = types.package;
@@ -131,7 +138,7 @@ in {
131 after = [ "network.target" ];
138 after = [ "network.target" ];
132 serviceConfig = {
139 serviceConfig = {
133 ExecStart = ''
140 ExecStart = ''
134− ${pkgs.jre}/bin/java \
141+ ${cfg.jre}/bin/java \
135 -cp "${cfg.package}/lib/*:${configDir}" \
142 -cp "${cfg.package}/lib/*:${configDir}" \
136 ${escapeShellArgs cfg.extraCmdLineOptions} \
143 ${escapeShellArgs cfg.extraCmdLineOptions} \
137 -Dzookeeper.datadir.autocreate=false \
144 -Dzookeeper.datadir.autocreate=false \
nixos/modules/services/monitoring/collectd.nix+30−26
@@ -5,36 +5,15 @@ with lib;
6 cfg = config.services.collectd;
6 cfg = config.services.collectd;
8+ baseDirLine = ''BaseDir "${cfg.dataDir}"'';
8− unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" ''
9+ unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" cfg.extraConfig;
9− BaseDir "${cfg.dataDir}"
10− AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
11− Hostname "${config.networking.hostName}"
19− ${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
26− ${concatMapStrings (f: ''
33 conf = if cfg.validateConfig then
11 conf = if cfg.validateConfig then
34 pkgs.runCommand "collectd.conf" {} ''
12 pkgs.runCommand "collectd.conf" {} ''
35 echo testing ${unvalidated_conf}
13 echo testing ${unvalidated_conf}
14+ cp ${unvalidated_conf} collectd.conf
36 # collectd -t fails if BaseDir does not exist.
15 # collectd -t fails if BaseDir does not exist.
37− sed '1s/^BaseDir.*$/BaseDir "."/' ${unvalidated_conf} > collectd.conf
16+ substituteInPlace collectd.conf --replace ${lib.escapeShellArgs [ baseDirLine ]} 'BaseDir "."'
38 ${package}/bin/collectd -t -C collectd.conf
17 ${package}/bin/collectd -t -C collectd.conf
39 cp ${unvalidated_conf} $out
18 cp ${unvalidated_conf} $out
40 '' else unvalidated_conf;
19 '' else unvalidated_conf;
@@ -123,7 +102,8 @@ in {
123 extraConfig = mkOption {
102 extraConfig = mkOption {
124 default = "";
103 default = "";
125 description = ''
104 description = ''
126− Extra configuration for collectd.
105+ Extra configuration for collectd. Use mkBefore to add lines before the
106+ default config, and mkAfter to add them below.
128 type = lines;
108 type = lines;
@@ -131,6 +111,30 @@ in {
133 config = mkIf cfg.enable {
113 config = mkIf cfg.enable {
114+ # 1200 is after the default (1000) but before mkAfter (1500).
115+ services.collectd.extraConfig = lib.mkOrder 1200 ''
117+ AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
118+ Hostname "${config.networking.hostName}"
126+ ${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
127+ LoadPlugin ${plugin}
128+ <Plugin "${plugin}">
133+ ${concatMapStrings (f: ''
134 systemd.tmpfiles.rules = [
138 systemd.tmpfiles.rules = [
135 "d '${cfg.dataDir}' - ${cfg.user} - - -"
139 "d '${cfg.dataDir}' - ${cfg.user} - - -"
nixos/modules/services/monitoring/mimir.nixnew file+63
@@ -0,0 +1,63 @@
1+{ config, lib, pkgs, ... }:
4+ inherit (lib) escapeShellArgs mkEnableOption mkIf mkOption types;
6+ cfg = config.services.mimir;
8+ settingsFormat = pkgs.formats.yaml {};
10+ options.services.mimir = {
11+ enable = mkEnableOption "mimir";
13+ configuration = mkOption {
14+ type = (pkgs.formats.json {}).type;
17+ Specify the configuration for Mimir in Nix.
21+ configFile = mkOption {
22+ type = types.nullOr types.path;
25+ Specify a configuration file that Mimir should use.
30+ config = mkIf cfg.enable {
33+ (cfg.configuration == {} -> cfg.configFile != null) &&
34+ (cfg.configFile != null -> cfg.configuration == {})
37+ Please specify either
38+ 'services.mimir.configuration' or
39+ 'services.mimir.configFile'.
43+ systemd.services.mimir = {
44+ description = "mimir Service Daemon";
45+ wantedBy = [ "multi-user.target" ];
48+ conf = if cfg.configFile == null
49+ then settingsFormat.generate "config.yaml" cfg.configuration
53+ ExecStart = "${pkgs.grafana-mimir}/bin/mimir --config.file=${conf}";
56+ ProtectSystem = "full";
57+ DevicePolicy = "closed";
58+ NoNewPrivileges = true;
59+ StateDirectory = "mimir";
nixos/modules/services/monitoring/nagios.nix+2−2
@@ -102,8 +102,8 @@ in
103 plugins = mkOption {
103 plugins = mkOption {
104 type = types.listOf types.package;
104 type = types.listOf types.package;
105− default = with pkgs; [ monitoring-plugins ssmtp mailutils ];
105+ default = with pkgs; [ monitoring-plugins msmtp mailutils ];
106− defaultText = literalExpression "[pkgs.monitoring-plugins pkgs.ssmtp pkgs.mailutils]";
106+ defaultText = literalExpression "[pkgs.monitoring-plugins pkgs.msmtp pkgs.mailutils]";
107 description = "
107 description = "
108 Packages to be added to the Nagios <envar>PATH</envar>.
108 Packages to be added to the Nagios <envar>PATH</envar>.
109 Typically used to add plugins, but can be anything.
109 Typically used to add plugins, but can be anything.
nixos/modules/services/monitoring/prometheus/default.nix+2−9
@@ -74,7 +74,6 @@ let
75 "--web.listen-address=${cfg.listenAddress}:${builtins.toString cfg.port}"
75 "--web.listen-address=${cfg.listenAddress}:${builtins.toString cfg.port}"
76 "--alertmanager.notification-queue-capacity=${toString cfg.alertmanagerNotificationQueueCapacity}"
76 "--alertmanager.notification-queue-capacity=${toString cfg.alertmanagerNotificationQueueCapacity}"
77− "--alertmanager.timeout=${toString cfg.alertmanagerTimeout}s"
78 ] ++ optional (cfg.webExternalUrl != null) "--web.external-url=${cfg.webExternalUrl}"
77 ] ++ optional (cfg.webExternalUrl != null) "--web.external-url=${cfg.webExternalUrl}"
79 ++ optional (cfg.retentionTime != null) "--storage.tsdb.retention.time=${cfg.retentionTime}";
78 ++ optional (cfg.retentionTime != null) "--storage.tsdb.retention.time=${cfg.retentionTime}";
@@ -1563,6 +1562,8 @@ in
1563 (mkRenamedOptionModule [ "services" "prometheus2" ] [ "services" "prometheus" ])
1562 (mkRenamedOptionModule [ "services" "prometheus2" ] [ "services" "prometheus" ])
1564 (mkRemovedOptionModule [ "services" "prometheus" "environmentFile" ]
1563 (mkRemovedOptionModule [ "services" "prometheus" "environmentFile" ]
1565 "It has been removed since it was causing issues (https://github.com/NixOS/nixpkgs/issues/126083) and Prometheus now has native support for secret files, i.e. `basic_auth.password_file` and `authorization.credentials_file`.")
1564 "It has been removed since it was causing issues (https://github.com/NixOS/nixpkgs/issues/126083) and Prometheus now has native support for secret files, i.e. `basic_auth.password_file` and `authorization.credentials_file`.")
1565+ (mkRemovedOptionModule [ "services" "prometheus" "alertmanagerTimeout" ]
1566+ "Deprecated upstream and no longer had any effect")
1568 options.services.prometheus = {
1569 options.services.prometheus = {
@@ -1719,14 +1720,6 @@ in
1722− alertmanagerTimeout = mkOption {
1726− Alert manager HTTP API timeout (in seconds).
1730 webExternalUrl = mkOption {
1723 webExternalUrl = mkOption {
1731 type = types.nullOr types.str;
1724 type = types.nullOr types.str;
1732 default = null;
1725 default = null;
nixos/modules/services/monitoring/prometheus/exporters.xml+21
@@ -19,6 +19,7 @@
19<programlisting>
19<programlisting>
20 services.prometheus.exporters.node = {
20 services.prometheus.exporters.node = {
21 enable = true;
21 enable = true;
22 enabledCollectors = [
23 enabledCollectors = [
@@ -42,6 +43,26 @@
42 <link xlink:href="https://nixos.org/nixos/options.html#prometheus.exporters">available
43 <link xlink:href="https://nixos.org/nixos/options.html#prometheus.exporters">available
43 options</link>.
44 options</link>.
48+ Prometheus can now be configured to consume the metrics produced by the exporter:
50+ services.prometheus = {
57+ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ];
45 </section>
66 </section>
46 <section xml:id="module-services-prometheus-exporters-new-exporter">
67 <section xml:id="module-services-prometheus-exporters-new-exporter">
47 <title>Adding a new exporter</title>
68 <title>Adding a new exporter</title>
nixos/modules/services/network-filesystems/ipfs.nix+16−10
@@ -1,8 +1,7 @@
1−{ config, lib, pkgs, options, utils, ... }:
1+{ config, lib, pkgs, utils, ... }:
4 cfg = config.services.ipfs;
4 cfg = config.services.ipfs;
5− opt = options.services.ipfs;
7 ipfsFlags = utils.escapeSystemdExecArgs (
6 ipfsFlags = utils.escapeSystemdExecArgs (
8 optional cfg.autoMount "--mount" ++
7 optional cfg.autoMount "--mount" ++
@@ -255,23 +254,27 @@ in
256 # After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open.
255 # After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open.
257 rm -vf "$IPFS_PATH/api"
256 rm -vf "$IPFS_PATH/api"
258−
257+ '' + optionalString cfg.autoMigrate ''
258+ ${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
259 ipfs --offline config profile apply ${profile}
260 ipfs --offline config profile apply ${profile}
261 '' + optionalString cfg.autoMount ''
262 '' + optionalString cfg.autoMount ''
262 ipfs --offline config Mounts.FuseAllowOther --json true
263 ipfs --offline config Mounts.FuseAllowOther --json true
263 ipfs --offline config Mounts.IPFS ${cfg.ipfsMountDir}
264 ipfs --offline config Mounts.IPFS ${cfg.ipfsMountDir}
264 ipfs --offline config Mounts.IPNS ${cfg.ipnsMountDir}
265 ipfs --offline config Mounts.IPNS ${cfg.ipnsMountDir}
265− '' + optionalString cfg.autoMigrate ''
266− ${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
268 ipfs --offline config show \
267 ipfs --offline config show \
269 | ${pkgs.jq}/bin/jq '. * $extraConfig' --argjson extraConfig ${
268 | ${pkgs.jq}/bin/jq '. * $extraConfig' --argjson extraConfig ${
270− escapeShellArg (builtins.toJSON ({
269+ escapeShellArg (builtins.toJSON (
271− Addresses.API = cfg.apiAddress;
272+ Addresses.API = cfg.apiAddress;
272− Addresses.Gateway = cfg.gatewayAddress;
273+ Addresses.Gateway = cfg.gatewayAddress;
273− Addresses.Swarm = cfg.swarmAddress;
274+ Addresses.Swarm = cfg.swarmAddress;
274− } // cfg.extraConfig))
276+ cfg.extraConfig
276 | ipfs --offline config replace -
279 | ipfs --offline config replace -
@@ -312,6 +315,9 @@ in
313 [ "" "%t/ipfs.sock" ] ++ lib.optional (fromCfg != null) fromCfg;
316 [ "" "%t/ipfs.sock" ] ++ lib.optional (fromCfg != null) fromCfg;
321+ maintainers = with lib.maintainers; [ Luflosi ];
nixos/modules/services/networking/asterisk.nix+11−43
@@ -14,28 +14,9 @@ let
15 # Add filecontents from files of useTheseDefaultConfFiles to confFiles, do not override
15 # Add filecontents from files of useTheseDefaultConfFiles to confFiles, do not override
16 defaultConfFiles = subtractLists (attrNames cfg.confFiles) cfg.useTheseDefaultConfFiles;
16 defaultConfFiles = subtractLists (attrNames cfg.confFiles) cfg.useTheseDefaultConfFiles;
17− allConfFiles =
17+ allConfFiles = {
19− builtins.listToAttrs (map (x: { name = x;
20− value = builtins.readFile (cfg.package + "/etc/asterisk/" + x); })
23− asteriskEtc = pkgs.stdenv.mkDerivation
24− ((mapAttrs' (name: value: nameValuePair
25− # Fudge the names to make bash happy
26− ((replaceChars ["."] ["_"] name) + "_")
30− confFilesString = concatStringsSep " " (
31− attrNames allConfFiles
34− name = "asterisk-etc";
36 # Default asterisk.conf file
18 # Default asterisk.conf file
37− # (Notice that astetcdir will be set to the path of this derivation)
19+ "asterisk.conf".text = ''
39 [directories]
20 [directories]
40 astetcdir => /etc/asterisk
21 astetcdir => /etc/asterisk
41 astmoddir => ${cfg.package}/lib/asterisk/modules
22 astmoddir => ${cfg.package}/lib/asterisk/modules
@@ -48,43 +29,28 @@ let
48 astrundir => /run/asterisk
29 astrundir => /run/asterisk
49 astlogdir => /var/log/asterisk
30 astlogdir => /var/log/asterisk
50 astsbindir => ${cfg.package}/sbin
31 astsbindir => ${cfg.package}/sbin
52− extraConf = cfg.extraConfig;
54 # Loading all modules by default is considered sensible by the authors of
35 # Loading all modules by default is considered sensible by the authors of
55 # "Asterisk: The Definitive Guide". Secure sites will likely want to
36 # "Asterisk: The Definitive Guide". Secure sites will likely want to
56 # specify their own "modules.conf" in the confFiles option.
37 # specify their own "modules.conf" in the confFiles option.
57− modulesConf = ''
38+ "modules.conf".text = ''
59 autoload=yes
40 autoload=yes
62 # Use syslog for logging so logs can be viewed with journalctl
43 # Use syslog for logging so logs can be viewed with journalctl
63− loggerConf = ''
44+ "logger.conf".text = ''
66 [logfiles]
47 [logfiles]
67 syslog.local0 => notice,warning,error
48 syslog.local0 => notice,warning,error
51+ mapAttrs (name: text: { inherit text; }) cfg.confFiles //
52+ listToAttrs (map (x: nameValuePair x { source = cfg.package + "/etc/asterisk/" + x; }) defaultConfFiles);
73− # Create asterisk.conf, pointing astetcdir to the path of this derivation
74− echo "$asteriskConf" | sed "s|@out@|$out|g" > "$out"/asterisk.conf
75− echo "$extraConf" >> "$out"/asterisk.conf
77− echo "$modulesConf" > "$out"/modules.conf
79− echo "$loggerConf" > "$out"/logger.conf
81− # Config files specified in confFiles option override all other files
82− for i in $confFilesString; do
83− conf=$(echo "$i"_ | sed 's/\./_/g')
84− echo "''${!conf}" > "$out"/"$i"
@@ -209,7 +175,9 @@ in
209 config = mkIf cfg.enable {
175 config = mkIf cfg.enable {
210 environment.systemPackages = [ cfg.package ];
176 environment.systemPackages = [ cfg.package ];
212− environment.etc.asterisk.source = asteriskEtc;
178+ environment.etc = mapAttrs' (name: value:
179+ nameValuePair "asterisk/${name}" value
214 users.users.asterisk =
182 users.users.asterisk =
215 { name = asteriskUser;
183 { name = asteriskUser;
nixos/modules/services/networking/bird.nix+1−2
@@ -68,8 +68,7 @@ in
68 systemd.services.bird2 = {
68 systemd.services.bird2 = {
69 description = "BIRD Internet Routing Daemon";
69 description = "BIRD Internet Routing Daemon";
70 wantedBy = [ "multi-user.target" ];
70 wantedBy = [ "multi-user.target" ];
71− reloadIfChanged = true;
72− restartTriggers = [ config.environment.etc."bird/bird2.conf".source ];
71+ reloadTriggers = [ config.environment.etc."bird/bird2.conf".source ];
73 serviceConfig = {
72 serviceConfig = {
74 Type = "forking";
73 Type = "forking";
75 Restart = "on-failure";
74 Restart = "on-failure";
nixos/modules/services/networking/cloudflare-dyndns.nixnew file+93
@@ -0,0 +1,93 @@
1+{ config, pkgs, lib, ... }:
6+ cfg = config.services.cloudflare-dyndns;
10+ services.cloudflare-dyndns = {
11+ enable = mkEnableOption "Cloudflare Dynamic DNS Client";
13+ apiTokenFile = mkOption {
14+ type = types.nullOr types.str;
17+ The path to a file containing the CloudFlare API token.
19+ The file must have the form `CLOUDFLARE_API_TOKEN=...`
24+ type = types.listOf types.str;
27+ List of domain names to update records for.
35+ Whether this is a DNS-only record, or also being proxied through CloudFlare.
43+ Whether to enable setting IPv4 A records.
51+ Whether to enable setting IPv6 AAAA records.
55+ deleteMissing = mkOption {
59+ Whether to delete the record when no IP address is found.
65+ config = mkIf cfg.enable {
66+ systemd.services.cloudflare-dyndns = {
67+ description = "CloudFlare Dynamic DNS Client";
68+ after = [ "network.target" ];
69+ wantedBy = [ "multi-user.target" ];
73+ CLOUDFLARE_DOMAINS = toString cfg.domains;
79+ StateDirectory = "cloudflare-dyndns";
80+ EnvironmentFile = cfg.apiTokenFile;
83+ args = [ "--cache-file /var/lib/cloudflare-dyndns/ip.cache" ]
84+ ++ (if cfg.ipv4 then [ "-4" ] else [ "-no-4" ])
85+ ++ (if cfg.ipv6 then [ "-6" ] else [ "-no-6" ])
86+ ++ optional cfg.deleteMissing "--delete-missing"
87+ ++ optional cfg.proxied "--proxied";
89+ "${pkgs.cloudflare-dyndns}/bin/cloudflare-dyndns ${toString args}";
nixos/modules/services/networking/consul.nix+32−6
@@ -80,13 +80,21 @@ in
80 The name of the interface to pull the bind_addr from.
80 The name of the interface to pull the bind_addr from.
85+ forceAddrFamily = mkOption {
86+ type = types.enum [ "any" "ipv4" "ipv6" ];
89+ Whether to bind ipv4/ipv6 or both kind of addresses.
86 forceIpv4 = mkOption {
93 forceIpv4 = mkOption {
87− type = types.bool;
94+ type = types.nullOr types.bool;
88− default = false;
95+ default = null;
89 description = ''
96 description = ''
97+ Deprecated: Use consul.forceAddrFamily instead.
90 Whether we should force the interfaces to only pull ipv4 addresses.
98 Whether we should force the interfaces to only pull ipv4 addresses.
@@ -175,6 +183,13 @@ in
175 systemPackages = [ cfg.package ];
183 systemPackages = [ cfg.package ];
186+ warnings = lib.flatten [
187+ (lib.optional (cfg.forceIpv4 != null) ''
188+ The option consul.forceIpv4 is deprecated, please use
189+ consul.forceAddrFamily instead.
178 systemd.services.consul = {
193 systemd.services.consul = {
179 wantedBy = [ "multi-user.target" ];
194 wantedBy = [ "multi-user.target" ];
180 after = [ "network.target" ] ++ systemdDevices;
195 after = [ "network.target" ] ++ systemdDevices;
@@ -196,15 +211,21 @@ in
198 path = with pkgs; [ iproute2 gnugrep gawk consul ];
213 path = with pkgs; [ iproute2 gnugrep gawk consul ];
199− preStart = ''
214+ preStart = let
215+ family = if cfg.forceAddrFamily == "ipv6" then
217+ else if cfg.forceAddrFamily == "ipv4" then
200 mkdir -m 0700 -p ${dataDir}
222 mkdir -m 0700 -p ${dataDir}
201 chown -R consul ${dataDir}
223 chown -R consul ${dataDir}
203 # Determine interface addresses
225 # Determine interface addresses
204 getAddrOnce () {
226 getAddrOnce () {
205− ip addr show dev "$1" \
227+ ip ${family} addr show dev "$1" scope global \
206− | grep 'inet${optionalString (cfg.forceIpv4) " "}.*scope global' \
207− | awk -F '[ /\t]*' '{print $3}' | head -n 1
228+ | awk -F '[ /\t]*' '/inet/ {print $3}' | head -n 1
209 getAddr () {
230 getAddr () {
210 ADDR="$(getAddrOnce $1)"
231 ADDR="$(getAddrOnce $1)"
@@ -234,6 +255,11 @@ in
259+ (mkIf (cfg.forceIpv4 != null && cfg.forceIpv4) {
260+ services.consul.forceAddrFamily = "ipv4";
237 (mkIf (cfg.alerts.enable) {
263 (mkIf (cfg.alerts.enable) {
238 systemd.services.consul-alerts = {
264 systemd.services.consul-alerts = {
239 wantedBy = [ "multi-user.target" ];
265 wantedBy = [ "multi-user.target" ];
nixos/modules/services/networking/create_ap.nixnew file+50
@@ -0,0 +1,50 @@
1+{ config, lib, pkgs, ... }:
6+ cfg = config.services.create_ap;
7+ configFile = pkgs.writeText "create_ap.conf" (generators.toKeyValue { } cfg.settings);
10+ services.create_ap = {
11+ enable = mkEnableOption "setup wifi hotspots using create_ap";
12+ settings = mkOption {
13+ type = with types; attrsOf (oneOf [ int bool str ]);
16+ Configuration for <package>create_ap</package>.
17+ See <link xlink:href="https://raw.githubusercontent.com/lakinduakash/linux-wifi-hotspot/master/src/scripts/create_ap.conf">upstream example configuration</link>
18+ for supported values.
21+ INTERNET_IFACE = "eth0";
22+ WIFI_IFACE = "wlan0";
23+ SSID = "My Wifi Hotspot";
24+ PASSPHRASE = "12345678";
30+ config = mkIf cfg.enable {
33+ services.create_ap = {
34+ wantedBy = [ "multi-user.target" ];
35+ description = "Create AP Service";
36+ after = [ "network.target" ];
37+ restartTriggers = [ configFile ];
39+ ExecStart = "${pkgs.linux-wifi-hotspot}/bin/create_ap --config ${configFile}";
40+ KillSignal = "SIGINT";
41+ Restart = "on-failure";
48+ meta.maintainers = with lib.maintainers; [ onny ];
nixos/modules/services/networking/envoy.nixnew file+84
@@ -0,0 +1,84 @@
1+{ config, lib, pkgs, ... }:
6+ cfg = config.services.envoy;
7+ format = pkgs.formats.json { };
8+ conf = format.generate "envoy.json" cfg.settings;
9+ validateConfig = file:
10+ pkgs.runCommand "validate-envoy-conf" { } ''
11+ ${pkgs.envoy}/bin/envoy --log-level error --mode validate -c "${file}"
18+ options.services.envoy = {
19+ enable = mkEnableOption "Envoy reverse proxy";
21+ settings = mkOption {
24+ example = literalExpression ''
27+ access_log_path = "/dev/null";
31+ address = "127.0.0.1";
43+ Specify the configuration for Envoy in Nix.
48+ config = mkIf cfg.enable {
49+ environment.systemPackages = [ pkgs.envoy ];
50+ systemd.services.envoy = {
51+ description = "Envoy reverse proxy";
52+ after = [ "network-online.target" ];
53+ requires = [ "network-online.target" ];
54+ wantedBy = [ "multi-user.target" ];
56+ ExecStart = "${pkgs.envoy}/bin/envoy -c ${validateConfig conf}";
59+ CacheDirectory = "envoy";
60+ LogsDirectory = "envoy";
61+ AmbientCapabilities = "CAP_NET_BIND_SERVICE";
62+ CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
63+ RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK AF_XDP";
64+ SystemCallArchitectures = "native";
65+ LockPersonality = true;
66+ RestrictNamespaces = true;
67+ RestrictRealtime = true;
68+ PrivateUsers = false; # breaks CAP_NET_BIND_SERVICE
69+ PrivateDevices = true;
71+ ProtectControlGroups = true;
73+ ProtectKernelLogs = true;
74+ ProtectKernelModules = true;
75+ ProtectKernelTunables = true;
76+ ProtectProc = "ptraceable";
77+ ProtectHostname = true;
78+ ProtectSystem = "strict";
80+ SystemCallFilter = "~@clock @module @mount @reboot @swap @obsolete @cpu-emulation";
nixos/modules/services/networking/headscale.nix+1−1
@@ -479,7 +479,7 @@ in
479 NoNewPrivileges = true;
479 NoNewPrivileges = true;
480 LockPersonality = true;
480 LockPersonality = true;
481 RestrictRealtime = true;
481 RestrictRealtime = true;
482− SystemCallFilter = [ "@system-service" "~@priviledged" "@chown" ];
482+ SystemCallFilter = [ "@system-service" "~@privileged" "@chown" ];
483 SystemCallArchitectures = "native";
483 SystemCallArchitectures = "native";
484 RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX";
484 RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX";
nixos/modules/services/networking/kea.nix+74−8
@@ -9,20 +9,26 @@ with lib;
10 cfg = config.services.kea;
10 cfg = config.services.kea;
12+ xor = x: y: (!x && y) || (x && !y);
12 format = pkgs.formats.json {};
13 format = pkgs.formats.json {};
15+ chooseNotNull = x: y: if x != null then x else y;
14− ctrlAgentConfig = format.generate "kea-ctrl-agent.conf" {
17+ ctrlAgentConfig = chooseNotNull cfg.ctrl-agent.configFile (format.generate "kea-ctrl-agent.conf" {
15 Control-agent = cfg.ctrl-agent.settings;
18 Control-agent = cfg.ctrl-agent.settings;
17− dhcp4Config = format.generate "kea-dhcp4.conf" {
21+ dhcp4Config = chooseNotNull cfg.dhcp4.configFile (format.generate "kea-dhcp4.conf" {
18 Dhcp4 = cfg.dhcp4.settings;
22 Dhcp4 = cfg.dhcp4.settings;
20− dhcp6Config = format.generate "kea-dhcp6.conf" {
25+ dhcp6Config = chooseNotNull cfg.dhcp6.configFile (format.generate "kea-dhcp6.conf" {
21 Dhcp6 = cfg.dhcp6.settings;
26 Dhcp6 = cfg.dhcp6.settings;
23− dhcpDdnsConfig = format.generate "kea-dhcp-ddns.conf" {
29+ dhcpDdnsConfig = chooseNotNull cfg.dhcp-ddns.configFile (format.generate "kea-dhcp-ddns.conf" {
24 DhcpDdns = cfg.dhcp-ddns.settings;
30 DhcpDdns = cfg.dhcp-ddns.settings;
27 package = pkgs.kea;
33 package = pkgs.kea;
@@ -45,6 +51,17 @@ in
54+ configFile = mkOption {
58+ Kea Control Agent configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html"/>.
60+ Takes preference over <link linkend="opt-services.kea.ctrl-agent.settings">settings</link>.
61+ Most users should prefer using <link linkend="opt-services.kea.ctrl-agent.settings">settings</link> instead.
48 settings = mkOption {
65 settings = mkOption {
49 type = format.type;
66 type = format.type;
50 default = null;
67 default = null;
@@ -73,6 +90,17 @@ in
93+ configFile = mkOption {
97+ Kea DHCP4 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html"/>.
99+ Takes preference over <link linkend="opt-services.kea.dhcp4.settings">settings</link>.
100+ Most users should prefer using <link linkend="opt-services.kea.dhcp4.settings">settings</link> instead.
76 settings = mkOption {
104 settings = mkOption {
77 type = format.type;
105 type = format.type;
78 default = null;
106 default = null;
@@ -122,6 +150,17 @@ in
153+ configFile = mkOption {
157+ Kea DHCP6 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html"/>.
159+ Takes preference over <link linkend="opt-services.kea.dhcp6.settings">settings</link>.
160+ Most users should prefer using <link linkend="opt-services.kea.dhcp6.settings">settings</link> instead.
125 settings = mkOption {
164 settings = mkOption {
126 type = format.type;
165 type = format.type;
127 default = null;
166 default = null;
@@ -172,6 +211,17 @@ in
214+ configFile = mkOption {
218+ Kea DHCP-DDNS configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html"/>.
220+ Takes preference over <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link>.
221+ Most users should prefer using <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link> instead.
175 settings = mkOption {
225 settings = mkOption {
176 type = format.type;
226 type = format.type;
177 default = null;
227 default = null;
@@ -214,6 +264,10 @@ in
216 (mkIf cfg.ctrl-agent.enable {
266 (mkIf cfg.ctrl-agent.enable {
268+ assertion = xor (cfg.ctrl-agent.settings == null) (cfg.ctrl-agent.configFile == null);
269+ message = "Either services.kea.ctrl-agent.settings or services.kea.ctrl-agent.configFile must be set to a non-null value.";
218 environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig;
272 environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig;
@@ -252,6 +306,10 @@ in
254 (mkIf cfg.dhcp4.enable {
308 (mkIf cfg.dhcp4.enable {
310+ assertion = xor (cfg.dhcp4.settings == null) (cfg.dhcp4.configFile == null);
311+ message = "Either services.kea.dhcp4.settings or services.kea.dhcp4.configFile must be set to a non-null value.";
256 environment.etc."kea/dhcp4-server.conf".source = dhcp4Config;
314 environment.etc."kea/dhcp4-server.conf".source = dhcp4Config;
@@ -295,6 +353,10 @@ in
297 (mkIf cfg.dhcp6.enable {
355 (mkIf cfg.dhcp6.enable {
357+ assertion = xor (cfg.dhcp6.settings == null) (cfg.dhcp6.configFile == null);
358+ message = "Either services.kea.dhcp6.settings or services.kea.dhcp6.configFile must be set to a non-null value.";
299 environment.etc."kea/dhcp6-server.conf".source = dhcp6Config;
361 environment.etc."kea/dhcp6-server.conf".source = dhcp6Config;
@@ -336,6 +398,10 @@ in
338 (mkIf cfg.dhcp-ddns.enable {
400 (mkIf cfg.dhcp-ddns.enable {
402+ assertion = xor (cfg.dhcp-ddns.settings == null) (cfg.dhcp-ddns.configFile == null);
403+ message = "Either services.kea.dhcp-ddns.settings or services.kea.dhcp-ddns.configFile must be set to a non-null value.";
340 environment.etc."kea/dhcp-ddns.conf".source = dhcpDdnsConfig;
406 environment.etc."kea/dhcp-ddns.conf".source = dhcpDdnsConfig;
nixos/modules/services/networking/mozillavpn.nixnew file+19
@@ -0,0 +1,19 @@
1+{ config, lib, pkgs, ... }:
4+ options.services.mozillavpn.enable = lib.mkOption {
5+ type = lib.types.bool;
8+ Enable the Mozilla VPN daemon.
12+ config = lib.mkIf config.services.mozillavpn.enable {
13+ environment.systemPackages = [ pkgs.mozillavpn ];
14+ services.dbus.packages = [ pkgs.mozillavpn ];
15+ systemd.packages = [ pkgs.mozillavpn ];
18+ meta.maintainers = with lib.maintainers; [ andersk ];
nixos/modules/services/networking/nbd.nix+28−15
@@ -4,28 +4,34 @@ with lib;
6 cfg = config.services.nbd;
6 cfg = config.services.nbd;
7− configFormat = pkgs.formats.ini { };
8 iniFields = with types; attrsOf (oneOf [ bool int float str ]);
7 iniFields = with types; attrsOf (oneOf [ bool int float str ]);
9− serverConfig = configFormat.generate "nbd-server-config"
8+ # The `[generic]` section must come before all the others in the
10− ({
9+ # config file. This means we can't just dump an attrset to INI
11− generic =
10+ # because that sorts the sections by name. Instead, we serialize it
12− (cfg.server.extraOptions // {
13+ generic = (cfg.server.extraOptions // {
13− user = "root";
14+ user = "root";
14− group = "root";
15+ group = "root";
15− port = cfg.server.listenPort;
16+ port = cfg.server.listenPort;
16− } // (optionalAttrs (cfg.server.listenAddress != null) {
17+ } // (optionalAttrs (cfg.server.listenAddress != null) {
17− listenaddr = cfg.server.listenAddress;
18+ listenaddr = cfg.server.listenAddress;
20− // (mapAttrs
22+ mapAttrs
21 (_: { path, allowAddresses, extraOptions }:
23 (_: { path, allowAddresses, extraOptions }:
22 extraOptions // {
24 extraOptions // {
23 exportname = path;
25 exportname = path;
24 } // (optionalAttrs (allowAddresses != null) {
26 } // (optionalAttrs (allowAddresses != null) {
25 authfile = pkgs.writeText "authfile" (concatStringsSep "\n" allowAddresses);
27 authfile = pkgs.writeText "authfile" (concatStringsSep "\n" allowAddresses);
27− cfg.server.exports)
29+ cfg.server.exports;
31+ pkgs.writeText "nbd-server-config" ''
32+ ${lib.generators.toINI {} genericSection}
33+ ${lib.generators.toINI {} exportSections}
29 splitLists =
35 splitLists =
31 (path: hasPrefix "/dev/" path)
37 (path: hasPrefix "/dev/" path)
@@ -103,6 +109,13 @@ in
105 config = mkIf cfg.server.enable {
111 config = mkIf cfg.server.enable {
114+ assertion = !(cfg.server.exports ? "generic");
115+ message = "services.nbd.server exports must not be named 'generic'";
106 boot.kernelModules = [ "nbd" ];
119 boot.kernelModules = [ "nbd" ];
108 systemd.services.nbd-server = {
121 systemd.services.nbd-server = {
nixos/modules/services/networking/ncdns.nix+2−2
@@ -58,7 +58,7 @@ in
59 address = mkOption {
59 address = mkOption {
60 type = types.str;
60 type = types.str;
61− default = "127.0.0.1";
61+ default = "[::1]";
62 description = ''
62 description = ''
63 The IP address the ncdns resolver will bind to. Leave this unchanged
63 The IP address the ncdns resolver will bind to. Leave this unchanged
64 if you do not wish to directly expose the resolver.
64 if you do not wish to directly expose the resolver.
@@ -202,7 +202,7 @@ in
202 config = mkIf cfg.enable {
202 config = mkIf cfg.enable {
204 services.pdns-recursor = mkIf cfgs.pdns-recursor.resolveNamecoin {
204 services.pdns-recursor = mkIf cfgs.pdns-recursor.resolveNamecoin {
205− forwardZonesRecurse.bit = "127.0.0.1:${toString cfg.port}";
205+ forwardZonesRecurse.bit = "${cfg.address}:${toString cfg.port}";
206 luaConfig =
206 luaConfig =
207 if cfg.dnssec.enable
207 if cfg.dnssec.enable
208 then ''readTrustAnchorsFromFile("${cfg.dnssec.keys.public}")''
208 then ''readTrustAnchorsFromFile("${cfg.dnssec.keys.public}")''
nixos/modules/services/networking/networkmanager.nix+56−53
@@ -5,18 +5,6 @@ with lib;
6 cfg = config.networking.networkmanager;
6 cfg = config.networking.networkmanager;
8− basePackages = with pkgs; [
11− networkmanager-fortisslvpn
12− networkmanager-iodine
14− networkmanager-openconnect
15− networkmanager-openvpn
18− ] ++ optional (!delegateWireless && !enableIwd) wpa_supplicant;
20 delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != [];
8 delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != [];
22 enableIwd = cfg.wifi.backend == "iwd";
10 enableIwd = cfg.wifi.backend == "iwd";
@@ -145,6 +133,15 @@ let
141+ ++ lib.optionals (!delegateWireless && !enableIwd) [
@@ -227,17 +224,33 @@ in {
230− packages = mkOption {
227+ plugins = mkOption {
231− type = types.listOf types.package;
228+ type =
230+ networkManagerPluginPackage = types.package // {
231+ description = "NetworkManager plug-in";
235+ (types.package.check p
236+ && p ? networkManagerPlugin
237+ && lib.isString p.networkManagerPlugin)
239+ Package ‘${p.name}’, is not a NetworkManager plug-in.
240+ Those need to have a ‘networkManagerPlugin’ attribute.
244+ types.listOf networkManagerPluginPackage;
232 default = [ ];
245 default = [ ];
233 description = ''
246 description = ''
234− Extra packages that provide NetworkManager plugins.
247+ List of NetworkManager plug-ins to enable.
248+ Some plug-ins are enabled by the NetworkManager module by default.
236− apply = list: basePackages ++ list;
239 dhcp = mkOption {
252 dhcp = mkOption {
240− type = types.enum [ "dhclient" "dhcpcd" "internal" ];
253+ type = types.enum [ "dhcpcd" "internal" ];
241 default = "internal";
254 default = "internal";
242 description = ''
255 description = ''
243 Which program (or internal library) should be used for DHCP.
256 Which program (or internal library) should be used for DHCP.
@@ -380,7 +393,7 @@ in {
380 </para><para>
393 </para><para>
381 If you enable this option the
394 If you enable this option the
382 <literal>networkmanager_strongswan</literal> plugin will be added to
395 <literal>networkmanager_strongswan</literal> plugin will be added to
383− the <option>networking.networkmanager.packages</option> option
396+ the <option>networking.networkmanager.plugins</option> option
384 so you don't need to to that yourself.
397 so you don't need to to that yourself.
@@ -399,6 +412,9 @@ in {
401 imports = [
414 imports = [
415+ (mkRenamedOptionModule
416+ [ "networking" "networkmanager" "packages" ]
417+ [ "networking" "networkmanager" "plugins" ])
402 (mkRenamedOptionModule [ "networking" "networkmanager" "useDnsmasq" ] [ "networking" "networkmanager" "dns" ])
418 (mkRenamedOptionModule [ "networking" "networkmanager" "useDnsmasq" ] [ "networking" "networkmanager" "dns" ])
403 (mkRemovedOptionModule ["networking" "networkmanager" "dynamicHosts"] ''
419 (mkRemovedOptionModule ["networking" "networkmanager" "dynamicHosts"] ''
404 This option was removed because allowing (multiple) regular users to
420 This option was removed because allowing (multiple) regular users to
@@ -426,31 +442,12 @@ in {
427 hardware.wirelessRegulatoryDatabase = true;
443 hardware.wirelessRegulatoryDatabase = true;
429− environment.etc = with pkgs; {
445+ environment.etc = {
430− "NetworkManager/NetworkManager.conf".source = configFile;
446+ "NetworkManager/NetworkManager.conf".source = configFile;
432− "NetworkManager/VPN/nm-openvpn-service.name".source =
433− "${networkmanager-openvpn}/lib/NetworkManager/VPN/nm-openvpn-service.name";
435− "NetworkManager/VPN/nm-vpnc-service.name".source =
436− "${networkmanager-vpnc}/lib/NetworkManager/VPN/nm-vpnc-service.name";
438− "NetworkManager/VPN/nm-openconnect-service.name".source =
439− "${networkmanager-openconnect}/lib/NetworkManager/VPN/nm-openconnect-service.name";
441− "NetworkManager/VPN/nm-fortisslvpn-service.name".source =
442− "${networkmanager-fortisslvpn}/lib/NetworkManager/VPN/nm-fortisslvpn-service.name";
444− "NetworkManager/VPN/nm-l2tp-service.name".source =
445− "${networkmanager-l2tp}/lib/NetworkManager/VPN/nm-l2tp-service.name";
447− "NetworkManager/VPN/nm-iodine-service.name".source =
448− "${networkmanager-iodine}/lib/NetworkManager/VPN/nm-iodine-service.name";
450− "NetworkManager/VPN/nm-sstp-service.name".source =
451− "${networkmanager-sstp}/lib/NetworkManager/VPN/nm-sstp-service.name";
448+ // builtins.listToAttrs (map (pkg: nameValuePair "NetworkManager/${pkg.networkManagerPlugin}" {
449+ source = "${pkg}/lib/NetworkManager/${pkg.networkManagerPlugin}";
454 // optionalAttrs cfg.enableFccUnlock
451 // optionalAttrs cfg.enableFccUnlock
456 "ModemManager/fcc-unlock.d".source =
453 "ModemManager/fcc-unlock.d".source =
@@ -460,18 +457,13 @@ in {
461 "NetworkManager/dispatcher.d/02overridedns".source = overrideNameserversScript;
458 "NetworkManager/dispatcher.d/02overridedns".source = overrideNameserversScript;
463− // optionalAttrs cfg.enableStrongSwan
465− "NetworkManager/VPN/nm-strongswan-service.name".source =
466− "${pkgs.networkmanager_strongswan}/lib/NetworkManager/VPN/nm-strongswan-service.name";
468 // listToAttrs (lib.imap1 (i: s:
460 // listToAttrs (lib.imap1 (i: s:
470 name = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}";
462 name = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}";
471 value = { mode = "0544"; inherit (s) source; };
463 value = { mode = "0544"; inherit (s) source; };
472 }) cfg.dispatcherScripts);
464 }) cfg.dispatcherScripts);
474− environment.systemPackages = cfg.packages;
466+ environment.systemPackages = packages;
476 users.groups = {
468 users.groups = {
477 networkmanager.gid = config.ids.gids.networkmanager;
469 networkmanager.gid = config.ids.gids.networkmanager;
@@ -490,14 +482,13 @@ in {
493− systemd.packages = cfg.packages;
485+ systemd.packages = packages;
495 systemd.tmpfiles.rules = [
487 systemd.tmpfiles.rules = [
496 "d /etc/NetworkManager/system-connections 0700 root root -"
488 "d /etc/NetworkManager/system-connections 0700 root root -"
497 "d /etc/ipsec.d 0700 root root -"
489 "d /etc/ipsec.d 0700 root root -"
498 "d /var/lib/NetworkManager-fortisslvpn 0700 root root -"
490 "d /var/lib/NetworkManager-fortisslvpn 0700 root root -"
500− "d /var/lib/dhclient 0755 root root -"
501 "d /var/lib/misc 0755 root root -" # for dnsmasq.leases
492 "d /var/lib/misc 0755 root root -" # for dnsmasq.leases
@@ -534,8 +525,20 @@ in {
534 useDHCP = false;
525 useDHCP = false;
529+ networkmanager.plugins = with pkgs; [
530+ networkmanager-fortisslvpn
531+ networkmanager-iodine
533+ networkmanager-openconnect
534+ networkmanager-openvpn
537 (mkIf cfg.enableStrongSwan {
540 (mkIf cfg.enableStrongSwan {
538− networkmanager.packages = [ pkgs.networkmanager_strongswan ];
541+ networkmanager.plugins = [ pkgs.networkmanager_strongswan ];
541 (mkIf enableIwd {
544 (mkIf enableIwd {
@@ -559,10 +562,10 @@ in {
559 security.polkit.enable = true;
562 security.polkit.enable = true;
560 security.polkit.extraConfig = polkitConf;
563 security.polkit.extraConfig = polkitConf;
562− services.dbus.packages = cfg.packages
565+ services.dbus.packages = packages
563 ++ optional cfg.enableStrongSwan pkgs.strongswanNM
566 ++ optional cfg.enableStrongSwan pkgs.strongswanNM
564 ++ optional (cfg.dns == "dnsmasq") pkgs.dnsmasq;
567 ++ optional (cfg.dns == "dnsmasq") pkgs.dnsmasq;
566− services.udev.packages = cfg.packages;
569+ services.udev.packages = packages;
nixos/modules/services/networking/openconnect.nixnew file+137
@@ -0,0 +1,137 @@
1+{ config, lib, options, pkgs, ... }:
4+ cfg = config.networking.openconnect;
5+ openconnect = cfg.package;
6+ pkcs11 = types.strMatching "pkcs11:.+" // {
8+ description = "PKCS#11 URI";
13+ description = "Gateway server to connect to.";
14+ example = "gateway.example.com";
18+ protocol = mkOption {
19+ description = "Protocol to use.";
20+ example = "anyconnect";
22+ types.enum [ "anyconnect" "array" "nc" "pulse" "gp" "f5" "fortinet" ];
26+ description = "Username to authenticate with.";
27+ example = "example-user";
28+ type = types.nullOr types.str;
31+ # Note: It does not make sense to provide a way to declaratively
32+ # set an authentication cookie, because they have to be requested
33+ # for every new connection and would only work once.
34+ passwordFile = mkOption {
36+ File containing the password to authenticate with. This
37+ is passed to <code>openconnect</code> via the
38+ <code>--passwd-on-stdin</code> option.
41+ example = "/var/lib/secrets/openconnect-passwd";
42+ type = types.nullOr types.path;
45+ certificate = mkOption {
46+ description = "Certificate to authenticate with.";
48+ example = "/var/lib/secrets/openconnect_certificate.pem";
49+ type = with types; nullOr (either path pkcs11);
52+ privateKey = mkOption {
53+ description = "Private key to authenticate with.";
54+ example = "/var/lib/secrets/openconnect_private_key.pem";
56+ type = with types; nullOr (either path pkcs11);
59+ extraOptions = mkOption {
61+ Extra config to be appended to the interface config. It should
62+ contain long-format options as would be accepted on the command
63+ line by <code>openconnect</code>
64+ (see https://www.infradead.org/openconnect/manual.html).
65+ Non-key-value options like <code>deflate</code> can be used by
66+ declaring them as booleans, i. e. <code>deflate = true;</code>.
70+ compression = "stateless";
72+ no-http-keepalive = true;
75+ type = with types; attrsOf (either str bool);
79+ generateExtraConfig = extra_cfg:
80+ strings.concatStringsSep "\n" (attrsets.mapAttrsToList
81+ (name: value: if (value == true) then name else "${name}=${value}")
82+ (attrsets.filterAttrs (_: value: value != false) extra_cfg));
83+ generateConfig = name: icfg:
84+ pkgs.writeText "config" ''
86+ ${optionalString (icfg.user != null) "user=${icfg.user}"}
87+ ${optionalString (icfg.passwordFile != null) "passwd-on-stdin"}
88+ ${optionalString (icfg.certificate != null)
89+ "certificate=${icfg.certificate}"}
90+ ${optionalString (icfg.privateKey != null) "sslkey=${icfg.privateKey}"}
92+ ${generateExtraConfig icfg.extraOptions}
94+ generateUnit = name: icfg: {
95+ description = "OpenConnect Interface - ${name}";
96+ requires = [ "network-online.target" ];
97+ after = [ "network.target" "network-online.target" ];
98+ wantedBy = [ "multi-user.target" ];
102+ ExecStart = "${openconnect}/bin/openconnect --config=${
103+ generateConfig name icfg
105+ StandardInput = "file:${icfg.passwordFile}";
111+ options.networking.openconnect = {
112+ package = mkPackageOption pkgs "openconnect" { };
114+ interfaces = mkOption {
115+ description = "OpenConnect interfaces.";
119+ gateway = "gateway.example.com";
120+ protocol = "anyconnect";
121+ user = "example-user";
122+ passwordFile = "/var/lib/secrets/openconnect-passwd";
125+ type = with types; attrsOf (submodule interfaceOptions);
130+ systemd.services = mapAttrs' (name: value: {
131+ name = "openconnect-${name}";
132+ value = generateUnit name value;
136+ meta.maintainers = with maintainers; [ alyaeanyx ];
nixos/modules/services/networking/openfire.nixdeleted−56
@@ -1,56 +0,0 @@
1−{ config, lib, pkgs, ... }:
10− services.openfire = {
12− enable = mkEnableOption "OpenFire XMPP server";
14− usePostgreSQL = mkOption {
18− Whether you use PostgreSQL service for your storage back-end.
27− ###### implementation
29− config = mkIf config.services.openfire.enable {
31− assertions = singleton
32− { assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
33− message = "OpenFire configured to use PostgreSQL but services.postgresql.enable is not enabled.";
36− systemd.services.openfire = {
37− description = "OpenFire XMPP server";
38− wantedBy = [ "multi-user.target" ];
39− after = [ "networking.target" ] ++
40− optional config.services.openfire.usePostgreSQL "postgresql.service";
41− path = with pkgs; [ jre openfire coreutils which gnugrep gawk gnused ];
44− mkdir /var/log/openfire || true
45− mkdir /etc/openfire || true
46− for i in ${pkgs.openfire}/conf.inst/*; do
47− if ! test -f /etc/openfire/$(basename $i); then
nixos/modules/services/networking/pdns-recursor.nix+12−7
@@ -30,10 +30,10 @@ in {
30 enable = mkEnableOption "PowerDNS Recursor, a recursive DNS server";
30 enable = mkEnableOption "PowerDNS Recursor, a recursive DNS server";
32 dns.address = mkOption {
32 dns.address = mkOption {
33− type = types.str;
33+ type = oneOrMore types.str;
34− default = "0.0.0.0";
34+ default = [ "::" "0.0.0.0" ];
35 description = ''
35 description = ''
36− IP address Recursor DNS server will bind to.
36+ IP addresses Recursor DNS server will bind to.
@@ -47,8 +47,12 @@ in {
48 dns.allowFrom = mkOption {
48 dns.allowFrom = mkOption {
49 type = types.listOf types.str;
49 type = types.listOf types.str;
50− default = [ "10.0.0.0/8" "172.16.0.0/12" "192.168.0.0/16" ];
50+ default = [
51+ "127.0.0.0/8" "10.0.0.0/8" "100.64.0.0/10"
52+ "169.254.0.0/16" "192.168.0.0/16" "172.16.0.0/12"
53+ "::1/128" "fc00::/7" "fe80::/10"
51− example = [ "0.0.0.0/0" ];
55+ example = [ "0.0.0.0/0" "::/0" ];
52 description = ''
56 description = ''
53 IP address ranges of clients allowed to make DNS queries.
57 IP address ranges of clients allowed to make DNS queries.
@@ -72,7 +76,8 @@ in {
73 api.allowFrom = mkOption {
77 api.allowFrom = mkOption {
74 type = types.listOf types.str;
78 type = types.listOf types.str;
75− default = [ "0.0.0.0/0" ];
79+ default = [ "127.0.0.1" "::1" ];
80+ example = [ "0.0.0.0/0" "::/0" ];
76 description = ''
81 description = ''
77 IP address ranges of clients allowed to make API requests.
82 IP address ranges of clients allowed to make API requests.
@@ -96,7 +101,7 @@ in {
97 forwardZonesRecurse = mkOption {
102 forwardZonesRecurse = mkOption {
98 type = types.attrs;
103 type = types.attrs;
99− example = { eth = "127.0.0.1:5353"; };
104+ example = { eth = "[::1]:5353"; };
100 default = {};
105 default = {};
101 description = ''
106 description = ''
102 DNS zones to be forwarded to other recursive servers.
107 DNS zones to be forwarded to other recursive servers.
nixos/modules/services/networking/prosody.nix+1
@@ -820,6 +820,7 @@ in
820 '') cfg.muc}
820 '') cfg.muc}
822 ${ lib.optionalString (cfg.uploadHttp != null) ''
822 ${ lib.optionalString (cfg.uploadHttp != null) ''
823+ -- TODO: think about migrating this to mod-http_file_share instead.
823 Component ${toLua cfg.uploadHttp.domain} "http_upload"
824 Component ${toLua cfg.uploadHttp.domain} "http_upload"
824 http_upload_file_size_limit = ${cfg.uploadHttp.uploadFileSizeLimit}
825 http_upload_file_size_limit = ${cfg.uploadHttp.uploadFileSizeLimit}
825 http_upload_expire_after = ${cfg.uploadHttp.uploadExpireAfter}
826 http_upload_expire_after = ${cfg.uploadHttp.uploadExpireAfter}
nixos/modules/services/networking/shellhub-agent.nix+26−17
@@ -1,31 +1,37 @@
1{ config, lib, pkgs, ... }:
1{ config, lib, pkgs, ... }:
5 cfg = config.services.shellhub-agent;
6 cfg = config.services.shellhub-agent;
8 ###### interface
9 ###### interface
10 options = {
11 options = {
12 services.shellhub-agent = {
13 services.shellhub-agent = {
15+ enable = mkEnableOption "ShellHub Agent daemon";
17+ package = mkPackageOption pkgs "shellhub-agent" { };
14− enable = mkOption {
19+ preferredHostname = mkOption {
15− type = types.bool;
20+ type = types.str;
16− default = false;
21+ default = "";
17 description = ''
22 description = ''
18− Whether to enable the ShellHub Agent daemon, which allows
23+ Set the device preferred hostname. This provides a hint to
19− secure remote logins.
24+ the server to use this as hostname if it is available.
23− package = mkOption {
28+ keepAliveInterval = mkOption {
24− type = types.package;
29+ type = types.int;
25− default = pkgs.shellhub-agent;
30+ default = 30;
26− defaultText = literalExpression "pkgs.shellhub-agent";
27 description = ''
31 description = ''
28− Which ShellHub Agent package to use.
32+ Determine the interval to send the keep alive message to
33+ the server. This has a direct impact of the bandwidth
@@ -74,9 +80,13 @@ in {
74 "time-sync.target"
80 "time-sync.target"
77− environment.SERVER_ADDRESS = cfg.server;
83+ environment = {
78− environment.PRIVATE_KEY = cfg.privateKey;
84+ SHELLHUB_SERVER_ADDRESS = cfg.server;
79− environment.TENANT_ID = cfg.tenantId;
85+ SHELLHUB_PRIVATE_KEY = cfg.privateKey;
86+ SHELLHUB_TENANT_ID = cfg.tenantId;
87+ SHELLHUB_KEEPALIVE_INTERVAL = toString cfg.keepAliveInterval;
88+ SHELLHUB_PREFERRED_HOSTNAME = cfg.preferredHostname;
81 serviceConfig = {
91 serviceConfig = {
82 # The service starts sessions for different users.
92 # The service starts sessions for different users.
@@ -85,7 +95,6 @@ in {
85 ExecStart = "${cfg.package}/bin/agent";
95 ExecStart = "${cfg.package}/bin/agent";
89− environment.systemPackages = [ cfg.package ];
nixos/modules/services/networking/ssh/sshd.nix+1
@@ -441,6 +441,7 @@ in
442 ${flip concatMapStrings cfg.hostKeys (k: ''
442 ${flip concatMapStrings cfg.hostKeys (k: ''
443 if ! [ -s "${k.path}" ]; then
443 if ! [ -s "${k.path}" ]; then
444 ssh-keygen \
445 ssh-keygen \
445 -t "${k.type}" \
446 -t "${k.type}" \
446 ${if k ? bits then "-b ${toString k.bits}" else ""} \
447 ${if k ? bits then "-b ${toString k.bits}" else ""} \
nixos/modules/services/networking/supplicant.nix+1−1
@@ -43,7 +43,7 @@ let
43 path = [ pkgs.coreutils ];
43 path = [ pkgs.coreutils ];
45 preStart = ''
45 preStart = ''
46− ${optionalString (suppl.configFile.path!=null) ''
46+ ${optionalString (suppl.configFile.path!=null && suppl.configFile.writable) ''
47 (umask 077 && touch -a "${suppl.configFile.path}")
47 (umask 077 && touch -a "${suppl.configFile.path}")
49 ${optionalString suppl.userControlled.enable ''
49 ${optionalString suppl.userControlled.enable ''
nixos/modules/services/networking/syncplay.nix+1−1
@@ -89,7 +89,7 @@ in
89 ${lib.optionalString (cfg.passwordFile != null) ''
89 ${lib.optionalString (cfg.passwordFile != null) ''
90 export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
90 export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
92− exec ${pkgs.syncplay}/bin/syncplay-server ${escapeShellArgs cmdArgs}
92+ exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
nixos/modules/services/networking/tailscale.nix+9−1
@@ -21,6 +21,12 @@ in {
21 description = ''The interface name for tunnel traffic. Use "userspace-networking" (beta) to not use TUN.'';
21 description = ''The interface name for tunnel traffic. Use "userspace-networking" (beta) to not use TUN.'';
24+ permitCertUid = mkOption {
25+ type = types.nullOr types.nonEmptyStr;
27+ description = "Username or user ID of the user allowed to to fetch Tailscale TLS certificates for the node.";
24 package = mkOption {
30 package = mkOption {
25 type = types.package;
31 type = types.package;
26 default = pkgs.tailscale;
32 default = pkgs.tailscale;
@@ -38,7 +44,9 @@ in {
38 serviceConfig.Environment = [
44 serviceConfig.Environment = [
39 "PORT=${toString cfg.port}"
45 "PORT=${toString cfg.port}"
40 ''"FLAGS=--tun ${lib.escapeShellArg cfg.interfaceName}"''
46 ''"FLAGS=--tun ${lib.escapeShellArg cfg.interfaceName}"''
47+ ] ++ (lib.optionals (cfg.permitCertUid != null) [
48+ "TS_PERMIT_CERT_UID=${cfg.permitCertUid}"
nixos/modules/services/networking/zeronet.nix+1−1
@@ -90,5 +90,5 @@ in with lib; {
90 (mkRemovedOptionModule [ "services" "zeronet" "logDir" ] "Zeronet will log by default in /var/lib/zeronet")
90 (mkRemovedOptionModule [ "services" "zeronet" "logDir" ] "Zeronet will log by default in /var/lib/zeronet")
93− meta.maintainers = with maintainers; [ chiiruno ];
93+ meta.maintainers = with maintainers; [ Madouura ];
nixos/modules/services/system/nscd.nix+17−8
@@ -7,10 +7,6 @@ let
7 nssModulesPath = config.system.nssModules.path;
7 nssModulesPath = config.system.nssModules.path;
8 cfg = config.services.nscd;
8 cfg = config.services.nscd;
10− nscd = if pkgs.stdenv.hostPlatform.libc == "glibc"
11− then pkgs.stdenv.cc.libc.bin
@@ -37,6 +33,19 @@ in
37 description = "Configuration to use for Name Service Cache Daemon.";
33 description = "Configuration to use for Name Service Cache Daemon.";
37+ type = types.package;
38+ default = if pkgs.stdenv.hostPlatform.libc == "glibc"
39+ then pkgs.stdenv.cc.libc.bin
41+ defaultText = lib.literalExpression ''
42+ if pkgs.stdenv.hostPlatform.libc == "glibc"
43+ then pkgs.stdenv.cc.libc.bin
46+ description = "package containing the nscd binary to be used by the service";
@@ -69,16 +78,16 @@ in
69 # files. So prefix the ExecStart command with "!" to prevent systemd
78 # files. So prefix the ExecStart command with "!" to prevent systemd
70 # from dropping privileges early. See ExecStart in systemd.service(5).
79 # from dropping privileges early. See ExecStart in systemd.service(5).
71 serviceConfig =
80 serviceConfig =
72− { ExecStart = "!@${nscd}/sbin/nscd nscd";
81+ { ExecStart = "!@${cfg.package}/bin/nscd nscd";
73 Type = "forking";
82 Type = "forking";
74 DynamicUser = true;
83 DynamicUser = true;
75 RuntimeDirectory = "nscd";
84 RuntimeDirectory = "nscd";
76 PIDFile = "/run/nscd/nscd.pid";
85 PIDFile = "/run/nscd/nscd.pid";
77 Restart = "always";
86 Restart = "always";
78 ExecReload =
87 ExecReload =
79− [ "${nscd}/sbin/nscd --invalidate passwd"
88+ [ "${cfg.package}/bin/nscd --invalidate passwd"
80− "${nscd}/sbin/nscd --invalidate group"
89+ "${cfg.package}/bin/nscd --invalidate group"
81− "${nscd}/sbin/nscd --invalidate hosts"
90+ "${cfg.package}/bin/nscd --invalidate hosts"
nixos/modules/services/ttys/kmscon.nix+24−5
@@ -1,6 +1,6 @@
1{ config, pkgs, lib, ... }:
1{ config, pkgs, lib, ... }:
3− inherit (lib) mkOption types mkIf;
3+ inherit (lib) mapAttrs mkIf mkOption optional optionals types;
5 cfg = config.services.kmscon;
5 cfg = config.services.kmscon;
@@ -28,6 +28,19 @@ in {
28 default = false;
28 default = false;
32+ description = "Fonts used by kmscon, in order of priority.";
34+ example = lib.literalExpression ''[ { name = "Source Code Pro"; package = pkgs.source-code-pro; } ]'';
36+ let fontType = submodule {
38+ name = mkOption { type = str; description = "Font name, as used by fontconfig."; };
39+ package = mkOption { type = package; description = "Package providing the font."; };
41+ }; in nullOr (nonEmptyListOf fontType);
31 extraConfig = mkOption {
44 extraConfig = mkOption {
32 description = "Extra contents of the kmscon.conf file.";
45 description = "Extra contents of the kmscon.conf file.";
33 type = types.lines;
46 type = types.lines;
@@ -87,11 +100,17 @@ in {
88 systemd.services.systemd-vconsole-setup.enable = false;
101 systemd.services.systemd-vconsole-setup.enable = false;
90− services.kmscon.extraConfig = mkIf cfg.hwRender ''
103+ services.kmscon.extraConfig =
92− hwaccel
105+ render = optionals cfg.hwRender [ "drm" "hwaccel" ];
93− '';
106+ fonts = optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
107+ in lib.concatStringsSep "\n" (render ++ fonts);
95 hardware.opengl.enable = mkIf cfg.hwRender true;
109 hardware.opengl.enable = mkIf cfg.hwRender true;
111+ fonts = mkIf (cfg.fonts != null) {
112+ fontconfig.enable = true;
113+ fonts = map (f: f.package) cfg.fonts;
nixos/modules/services/web-apps/atlassian/jira.nix+1
@@ -151,6 +151,7 @@ in
151 users.users.${cfg.user} = {
151 users.users.${cfg.user} = {
152 isSystemUser = true;
152 isSystemUser = true;
153 group = cfg.group;
153 group = cfg.group;
156 users.groups.${cfg.group} = {};
157 users.groups.${cfg.group} = {};
nixos/modules/services/web-apps/discourse.nix+9−3
@@ -609,6 +609,7 @@ in
609 connection_reaper_interval = 30;
609 connection_reaper_interval = 30;
610 relative_url_root = null;
610 relative_url_root = null;
611 message_bus_max_backlog_size = 100;
611 message_bus_max_backlog_size = 100;
612+ message_bus_clear_every = 50;
612 secret_key_base = cfg.secretKeyBaseFile;
613 secret_key_base = cfg.secretKeyBaseFile;
613 fallback_assets_path = null;
614 fallback_assets_path = null;
@@ -655,7 +656,12 @@ in
655 long_polling_interval = null;
656 long_polling_interval = null;
659+ services.redis.servers.discourse =
658− services.redis.enable = lib.mkDefault (cfg.redis.host == "localhost");
660+ lib.mkIf (lib.elem cfg.redis.host [ "localhost" "127.0.0.1" ]) {
662+ bind = cfg.redis.host;
663+ port = cfg.backendSettings.redis_port;
660 services.postgresql = lib.mkIf databaseActuallyCreateLocally {
666 services.postgresql = lib.mkIf databaseActuallyCreateLocally {
661 enable = true;
667 enable = true;
@@ -696,12 +702,12 @@ in
696 systemd.services.discourse = {
702 systemd.services.discourse = {
697 wantedBy = [ "multi-user.target" ];
703 wantedBy = [ "multi-user.target" ];
698 after = [
704 after = [
699− "redis.service"
705+ "redis-discourse.service"
700 "postgresql.service"
706 "postgresql.service"
701 "discourse-postgresql.service"
707 "discourse-postgresql.service"
703 bindsTo = [
709 bindsTo = [
704− "redis.service"
710+ "redis-discourse.service"
705 ] ++ lib.optionals (cfg.database.host == null) [
711 ] ++ lib.optionals (cfg.database.host == null) [
706 "postgresql.service"
712 "postgresql.service"
707 "discourse-postgresql.service"
713 "discourse-postgresql.service"
nixos/modules/services/web-apps/galene.nix+29
@@ -164,6 +164,35 @@ in
164 optional (cfg.dataDir == defaultdataDir) "galene/data" ++
164 optional (cfg.dataDir == defaultdataDir) "galene/data" ++
165 optional (cfg.groupsDir == defaultgroupsDir) "galene/groups" ++
165 optional (cfg.groupsDir == defaultgroupsDir) "galene/groups" ++
166 optional (cfg.recordingsDir == defaultrecordingsDir) "galene/recordings";
166 optional (cfg.recordingsDir == defaultrecordingsDir) "galene/recordings";
169+ CapabilityBoundingSet = [ "" ];
170+ DeviceAllow = [ "" ];
171+ LockPersonality = true;
172+ MemoryDenyWriteExecute = true;
173+ NoNewPrivileges = true;
174+ PrivateDevices = true;
176+ PrivateUsers = true;
178+ ProtectClock = true;
179+ ProtectControlGroups = true;
181+ ProtectHostname = true;
182+ ProtectKernelLogs = true;
183+ ProtectKernelModules = true;
184+ ProtectKernelTunables = true;
185+ ProtectProc = "invisible";
186+ ProtectSystem = "strict";
187+ ReadWritePaths = cfg.recordingsDir;
189+ RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
190+ RestrictNamespaces = true;
191+ RestrictRealtime = true;
192+ RestrictSUIDSGID = true;
193+ SystemCallArchitectures = "native";
194+ SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
nixos/modules/services/web-apps/keycloak.nix+360−514
@@ -4,20 +4,94 @@ let
4 cfg = config.services.keycloak;
4 cfg = config.services.keycloak;
5 opt = options.services.keycloak;
5 opt = options.services.keycloak;
11+ mkChangedOptionModule
12+ mkRenamedOptionModule
13+ mkRemovedOptionModule
7− inherit (lib) types mkOption concatStringsSep mapAttrsToList
14+ concatStringsSep
8− escapeShellArg recursiveUpdate optionalAttrs boolToString mkOrder
15+ mapAttrsToList
9− sort filterAttrs concatMapStringsSep concatStrings mkIf
16+ escapeShellArg
10− optionalString optionals mkDefault literalExpression hasSuffix
21+ literalExpression
11− foldl' isAttrs filter attrNames elem literalDocBook
23+ literalDocBook
12− maintainers;
24+ maintainers
14− inherit (builtins) match typeOf;
30+ inherit (builtins)
39+ prefixUnlessEmpty = prefix: string: optionalString (string != "") "${prefix}${string}";
44+ (mkRenamedOptionModule
45+ [ "services" "keycloak" "bindAddress" ]
46+ [ "services" "keycloak" "settings" "http-host" ])
47+ (mkRenamedOptionModule
48+ [ "services" "keycloak" "forceBackendUrlToFrontendUrl"]
49+ [ "services" "keycloak" "settings" "hostname-strict-backchannel"])
50+ (mkChangedOptionModule
51+ [ "services" "keycloak" "httpPort" ]
52+ [ "services" "keycloak" "settings" "http-port" ]
54+ builtins.fromJSON config.services.keycloak.httpPort))
55+ (mkChangedOptionModule
56+ [ "services" "keycloak" "httpsPort" ]
57+ [ "services" "keycloak" "settings" "https-port" ]
59+ builtins.fromJSON config.services.keycloak.httpsPort))
60+ (mkRemovedOptionModule
61+ [ "services" "keycloak" "frontendUrl" ]
63+ Set `services.keycloak.settings.hostname' and `services.keycloak.settings.http-relative-path' instead.
64+ NOTE: You likely want to set 'http-relative-path' to '/auth' to keep compatibility with your clients.
65+ See its description for more information.
67+ (mkRemovedOptionModule
68+ [ "services" "keycloak" "extraConfig" ]
69+ "Use `services.keycloak.settings' instead.")
17 options.services.keycloak =
72 options.services.keycloak =
19− inherit (types) bool str nullOr attrsOf path enum anything
74+ inherit (types)
20− package port;
83+ package
86+ assertStringPath = optionName: value:
89+ services.keycloak.${optionName}:
91+ is a Nix path, but should be a string, since Nix
92+ paths are copied into the world-readable Nix store.
23 enable = mkOption {
97 enable = mkOption {
@@ -30,89 +104,14 @@ in
33− bindAddress = mkOption {
35− default = "\${jboss.bind.address:0.0.0.0}";
36− example = "127.0.0.1";
38− On which address Keycloak should accept new connections.
40− A special syntax can be used to allow command line Java system
41− properties to override the value: ''${property.name:value}
45− httpPort = mkOption {
47− default = "\${jboss.http.port:80}";
50− On which port Keycloak should listen for new HTTP connections.
52− A special syntax can be used to allow command line Java system
53− properties to override the value: ''${property.name:value}
57− httpsPort = mkOption {
59− default = "\${jboss.https.port:443}";
62− On which port Keycloak should listen for new HTTPS connections.
64− A special syntax can be used to allow command line Java system
65− properties to override the value: ''${property.name:value}
69− frontendUrl = mkOption {
72− if x == "" || hasSuffix "/" x then
76− example = "keycloak.example.com/auth";
78− The public URL used as base for all frontend requests. Should
79− normally include a trailing <literal>/auth</literal>.
81− See <link xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">the
82− Hostname section of the Keycloak server installation
83− manual</link> for more information.
87− forceBackendUrlToFrontendUrl = mkOption {
92− Whether Keycloak should force all requests to go through the
93− frontend URL configured in <xref
94− linkend="opt-services.keycloak.frontendUrl" />. By default,
95− Keycloak allows backend requests to instead use its local
96− hostname or IP address and may also advertise it to clients
97− through its OpenID Connect Discovery endpoint.
100− xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">the
101− Hostname section of the Keycloak server installation
102− manual</link> for more information.
106 sslCertificate = mkOption {
107 sslCertificate = mkOption {
107 type = nullOr path;
108 type = nullOr path;
108 default = null;
109 default = null;
109 example = "/run/keys/ssl_cert";
110 example = "/run/keys/ssl_cert";
111+ apply = assertStringPath "sslCertificate";
110 description = ''
112 description = ''
111 The path to a PEM formatted certificate to use for TLS/SSL
113 The path to a PEM formatted certificate to use for TLS/SSL
112 connections.
114 connections.
114− This should be a string, not a Nix path, since Nix paths are
115− copied into the world-readable Nix store.
@@ -120,28 +119,28 @@ in
120 type = nullOr path;
119 type = nullOr path;
121 default = null;
120 default = null;
122 example = "/run/keys/ssl_key";
121 example = "/run/keys/ssl_key";
122+ apply = assertStringPath "sslCertificateKey";
123 description = ''
123 description = ''
124 The path to a PEM formatted private key to use for TLS/SSL
124 The path to a PEM formatted private key to use for TLS/SSL
125 connections.
125 connections.
127− This should be a string, not a Nix path, since Nix paths are
128− copied into the world-readable Nix store.
132 plugins = lib.mkOption {
129 plugins = lib.mkOption {
133 type = lib.types.listOf lib.types.path;
130 type = lib.types.listOf lib.types.path;
134− default = [];
131+ default = [ ];
135 description = ''
132 description = ''
136− Keycloak plugin jar, ear files or derivations with them
133+ Keycloak plugin jar, ear files or derivations containing
134+ them. Packaged plugins are available through
135+ <literal>pkgs.keycloak.plugins</literal>.
140 database = {
139 database = {
141 type = mkOption {
140 type = mkOption {
142− type = enum [ "mysql" "postgresql" ];
141+ type = enum [ "mysql" "mariadb" "postgresql" ];
143 default = "postgresql";
142 default = "postgresql";
144− example = "mysql";
143+ example = "mariadb";
145 description = ''
144 description = ''
146 The type of database Keycloak should connect to.
145 The type of database Keycloak should connect to.
@@ -159,6 +158,7 @@ in
160 dbPorts = {
159 dbPorts = {
161 postgresql = 5432;
160 postgresql = 5432;
162 mysql = 3306;
162 mysql = 3306;
@@ -207,6 +207,21 @@ in
212+ default = "keycloak";
214+ Database name to use when connecting to an external or
215+ manually provisioned database; has no effect when a local
216+ database is automatically provisioned.
218+ To use this with a local database, set <xref
219+ linkend="opt-services.keycloak.database.createLocally" /> to
220+ <literal>false</literal> and create the database and user
210 username = mkOption {
225 username = mkOption {
211 type = str;
226 type = str;
212 default = "keycloak";
227 default = "keycloak";
@@ -218,19 +233,16 @@ in
218 To use this with a local database, set <xref
233 To use this with a local database, set <xref
219 linkend="opt-services.keycloak.database.createLocally" /> to
234 linkend="opt-services.keycloak.database.createLocally" /> to
220 <literal>false</literal> and create the database and user
235 <literal>false</literal> and create the database and user
221− manually. The database should be called
236+ manually.
222− <literal>keycloak</literal>.
226 passwordFile = mkOption {
240 passwordFile = mkOption {
227 type = path;
241 type = path;
228 example = "/run/keys/db_password";
242 example = "/run/keys/db_password";
243+ apply = assertStringPath "passwordFile";
229 description = ''
244 description = ''
230− File containing the database password.
245+ The path to a file containing the database password.
232− This should be a string, not a Nix path, since Nix paths are
233− copied into the world-readable Nix store.
@@ -268,67 +280,181 @@ in
271− extraConfig = mkOption {
283+ settings = mkOption {
272− type = attrsOf anything;
284+ type = lib.types.submodule {
285+ freeformType = attrsOf (nullOr (oneOf [ str int bool (attrsOf path) ]));
288+ http-host = mkOption {
273− default = { };
290+ default = "0.0.0.0";
291+ example = "127.0.0.1";
293+ On which address Keycloak should accept new connections.
297+ http-port = mkOption {
302+ On which port Keycloak should listen for new HTTP connections.
306+ https-port = mkOption {
311+ On which port Keycloak should listen for new HTTPS connections.
315+ http-relative-path = mkOption {
320+ The path relative to <literal>/</literal> for serving
325+ In versions of Keycloak using Wildfly (<17),
326+ this defaulted to <literal>/auth</literal>. If
327+ upgrading from the Wildfly version of Keycloak,
328+ i.e. a NixOS version before 22.05, you'll likely
329+ want to set this to <literal>/auth</literal> to
330+ keep compatibility with your clients.
333+ xlink:href="https://www.keycloak.org/migration/migrating-to-quarkus"
334+ /> for more information on migrating from Wildfly
341+ hostname = mkOption {
343+ example = "keycloak.example.com";
345+ The hostname part of the public URL used as base for
346+ all frontend requests.
348+ See <link xlink:href="https://www.keycloak.org/server/hostname" />
349+ for more information about hostname configuration.
353+ hostname-strict-backchannel = mkOption {
358+ Whether Keycloak should force all requests to go
359+ through the frontend URL. By default, Keycloak allows
360+ backend requests to instead use its local hostname or
361+ IP address and may also advertise it to clients
362+ through its OpenID Connect Discovery endpoint.
364+ See <link xlink:href="https://www.keycloak.org/server/hostname" />
365+ for more information about hostname configuration.
370+ type = enum [ "edge" "reencrypt" "passthrough" "none" ];
374+ The proxy address forwarding mode if the server is
375+ behind a reverse proxy.
382+ Enables communication through HTTP between the
388+ <term>reencrypt</term>
391+ Requires communication through HTTPS between the
397+ <term>passthrough</term>
400+ Enables communication through HTTP or HTTPS between
401+ the proxy and Keycloak.
408+ xlink:href="https://www.keycloak.org/server/reverseproxy"
409+ /> for more information.
274 example = literalExpression ''
415 example = literalExpression ''
276− "subsystem=keycloak-server" = {
278− "provider=default" = null;
279− "provider=fixed" = {
281− properties.hostname = "keycloak.example.com";
417+ hostname = "keycloak.example.com";
282− };
418+ proxy = "reencrypt";
283− default-provider = "fixed";
419+ https-key-store-file = "/path/to/file";
284− };
420+ https-key-store-password = { _secret = "/run/keys/store_password"; };
288 description = ''
424 description = ''
289− Additional Keycloak configuration options to set in
425+ Configuration options corresponding to parameters set in
290− <literal>standalone.xml</literal>.
426+ <filename>conf/keycloak.conf</filename>.
292− Options are expressed as a Nix attribute set which matches the
428+ Most available options are documented at <link
293− structure of the jboss-cli configuration. The configuration is
294− effectively overlayed on top of the default configuration
295− shipped with Keycloak. To remove existing nodes and undefine
296− attributes from the default configuration, set them to
297− <literal>null</literal>.
299− The example configuration does the equivalent of the following
300− script, which removes the hostname provider
301− <literal>default</literal>, adds the deprecated hostname
302− provider <literal>fixed</literal> and defines it the default:
305− /subsystem=keycloak-server/spi=hostname/provider=default:remove()
306− /subsystem=keycloak-server/spi=hostname/provider=fixed:add(enabled = true, properties = { hostname = "keycloak.example.com" })
307− /subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider, value="fixed")
310− You can discover available options by using the <link
311− xlink:href="http://docs.wildfly.org/21/Admin_Guide.html#Command_Line_Interface">jboss-cli.sh</link>
312− program and by referring to the <link
313− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html">Keycloak
429+ xlink:href="https://www.keycloak.org/server/all-config" />.
314− Server Installation and Configuration Guide</link>.
430+
431+ Options containing secret data should be set to an attribute
432+ set containing the attribute <literal>_secret</literal> - a
433+ string pointing to a file containing the value the option
434+ should be set to. See the example to get a better picture of
435+ this: in the resulting
436+ <filename>conf/keycloak.conf</filename> file, the
437+ <literal>https-key-store-password</literal> key will be set
438+ to the contents of the
439+ <filename>/run/keys/store_password</filename> file.
322− # We only want to create a database if we're actually going to connect to it.
446+ # We only want to create a database if we're actually going to
323 databaseActuallyCreateLocally = cfg.database.createLocally && cfg.database.host == "localhost";
448 databaseActuallyCreateLocally = cfg.database.createLocally && cfg.database.host == "localhost";
324 createLocalPostgreSQL = databaseActuallyCreateLocally && cfg.database.type == "postgresql";
449 createLocalPostgreSQL = databaseActuallyCreateLocally && cfg.database.type == "postgresql";
325− createLocalMySQL = databaseActuallyCreateLocally && cfg.database.type == "mysql";
450+ createLocalMySQL = databaseActuallyCreateLocally && elem cfg.database.type [ "mysql" "mariadb" ];
327 mySqlCaKeystore = pkgs.runCommand "mysql-ca-keystore" { } ''
452 mySqlCaKeystore = pkgs.runCommand "mysql-ca-keystore" { } ''
328 ${pkgs.jre}/bin/keytool -importcert -trustcacerts -alias MySQLCACert -file ${cfg.database.caCert} -keystore $out -storepass notsosecretpassword -noprompt
453 ${pkgs.jre}/bin/keytool -importcert -trustcacerts -alias MySQLCACert -file ${cfg.database.caCert} -keystore $out -storepass notsosecretpassword -noprompt
331− # Both theme and theme type directories need to be actual directories in one hierarchy to pass Keycloak checks.
456+ # Both theme and theme type directories need to be actual
457+ # directories in one hierarchy to pass Keycloak checks.
332 themesBundle = pkgs.runCommand "keycloak-themes" { } ''
458 themesBundle = pkgs.runCommand "keycloak-themes" { } ''
333 linkTheme() {
459 linkTheme() {
334 theme="$1"
460 theme="$1"
@@ -347,7 +473,7 @@ in
349 mkdir -p "$out"
475 mkdir -p "$out"
350− for theme in ${cfg.package}/themes/*; do
476+ for theme in ${keycloakBuild}/themes/*; do
351 if [ -d "$theme" ]; then
477 if [ -d "$theme" ]; then
352 linkTheme "$theme" "$(basename "$theme")"
478 linkTheme "$theme" "$(basename "$theme")"
@@ -356,329 +482,25 @@ in
356 ${concatStringsSep "\n" (mapAttrsToList (name: theme: "linkTheme ${theme} ${escapeShellArg name}") cfg.themes)}
482 ${concatStringsSep "\n" (mapAttrsToList (name: theme: "linkTheme ${theme} ${escapeShellArg name}") cfg.themes)}
359− keycloakConfig' = foldl' recursiveUpdate
485+ keycloakConfig = lib.generators.toKeyValue {
360− {
486+ mkKeyValue = lib.flip lib.generators.mkKeyValueDefault "=" {
361− "interface=public".inet-address = cfg.bindAddress;
487+ mkValueString = v: with builtins;
362− "socket-binding-group=standard-sockets"."socket-binding=http".port = cfg.httpPort;
488+ if isInt v then toString v
363− "subsystem=keycloak-server" = {
489+ else if isString v then v
364− "spi=hostname"."provider=default" = {
490+ else if true == v then "true"
365− enabled = true;
491+ else if false == v then "false"
366− properties = {
492+ else if isSecret v then hashString "sha256" v._secret
367− inherit (cfg) frontendUrl forceBackendUrlToFrontendUrl;
493+ else throw "unsupported type ${typeOf v}: ${(lib.generators.toPretty {}) v}";
370− "theme=defaults".dir = toString themesBundle;
372− "subsystem=datasources"."data-source=KeycloakDS" = {
373− max-pool-size = "20";
374− user-name = if databaseActuallyCreateLocally then "keycloak" else cfg.database.username;
375− password = "@db-password@";
378− (optionalAttrs (cfg.database.type == "postgresql") {
379− "subsystem=datasources" = {
380− "jdbc-driver=postgresql" = {
381− driver-module-name = "org.postgresql";
382− driver-name = "postgresql";
383− driver-xa-datasource-class-name = "org.postgresql.xa.PGXADataSource";
385− "data-source=KeycloakDS" = {
386− connection-url = "jdbc:postgresql://${cfg.database.host}:${toString cfg.database.port}/keycloak";
387− driver-name = "postgresql";
388− "connection-properties=ssl".value = boolToString cfg.database.useSSL;
389− } // (optionalAttrs (cfg.database.caCert != null) {
390− "connection-properties=sslrootcert".value = cfg.database.caCert;
391− "connection-properties=sslmode".value = "verify-ca";
395− (optionalAttrs (cfg.database.type == "mysql") {
396− "subsystem=datasources" = {
397− "jdbc-driver=mysql" = {
398− driver-module-name = "com.mysql";
399− driver-name = "mysql";
400− driver-class-name = "com.mysql.jdbc.Driver";
402− "data-source=KeycloakDS" = {
403− connection-url = "jdbc:mysql://${cfg.database.host}:${toString cfg.database.port}/keycloak";
404− driver-name = "mysql";
405− "connection-properties=useSSL".value = boolToString cfg.database.useSSL;
406− "connection-properties=requireSSL".value = boolToString cfg.database.useSSL;
407− "connection-properties=verifyServerCertificate".value = boolToString cfg.database.useSSL;
408− "connection-properties=characterEncoding".value = "UTF-8";
409− valid-connection-checker-class-name = "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker";
410− validate-on-match = true;
411− exception-sorter-class-name = "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter";
412− } // (optionalAttrs (cfg.database.caCert != null) {
413− "connection-properties=trustCertificateKeyStoreUrl".value = "file:${mySqlCaKeystore}";
414− "connection-properties=trustCertificateKeyStorePassword".value = "notsosecretpassword";
418− (optionalAttrs (cfg.sslCertificate != null && cfg.sslCertificateKey != null) {
419− "socket-binding-group=standard-sockets"."socket-binding=https".port = cfg.httpsPort;
420− "subsystem=elytron" = mkOrder 900 {
421− "key-store=httpsKS" = mkOrder 900 {
422− path = "/run/keycloak/ssl/certificate_private_key_bundle.p12";
423− credential-reference.clear-text = "notsosecretpassword";
426− "key-manager=httpsKM" = mkOrder 901 {
427− key-store = "httpsKS";
428− credential-reference.clear-text = "notsosecretpassword";
430− "server-ssl-context=httpsSSC" = mkOrder 902 {
431− key-manager = "httpsKM";
434− "subsystem=undertow" = mkOrder 901 {
435− "server=default-server"."https-listener=https".ssl-context = "httpsSSC";
442− /* Produces a JBoss CLI script that creates paths and sets
443− attributes matching those described by `attrs`. When the
444− script is run, the existing settings are effectively overlayed
445− by those from `attrs`. Existing attributes can be unset by
446− defining them `null`.
448− JBoss paths and attributes / maps are distinguished by their
449− name, where paths follow a `key=value` scheme.
453− "subsystem=keycloak-server"."spi=hostname" = {
454− "provider=fixed" = null;
455− "provider=default" = {
458− inherit frontendUrl;
459− forceBackendUrlToFrontendUrl = false;
465− if (outcome != success) of /:read-resource()
468− if (outcome != success) of /subsystem=keycloak-server:read-resource()
469− /subsystem=keycloak-server:add()
471− if (outcome != success) of /subsystem=keycloak-server/spi=hostname:read-resource()
472− /subsystem=keycloak-server/spi=hostname:add()
474− if (outcome != success) of /subsystem=keycloak-server/spi=hostname/provider=default:read-resource()
475− /subsystem=keycloak-server/spi=hostname/provider=default:add(enabled = true, properties = { forceBackendUrlToFrontendUrl = false, frontendUrl = "https://keycloak.example.com/auth" })
477− if (result != true) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="enabled")
478− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=enabled, value=true)
480− if (result != false) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.forceBackendUrlToFrontendUrl")
481− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.forceBackendUrlToFrontendUrl, value=false)
483− if (result != "https://keycloak.example.com/auth") of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.frontendUrl")
484− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl, value="https://keycloak.example.com/auth")
486− if (outcome != success) of /subsystem=keycloak-server/spi=hostname/provider=fixed:read-resource()
487− /subsystem=keycloak-server/spi=hostname/provider=fixed:remove()
491− mkJbossScript = attrs:
493− /* From a JBoss path and an attrset, produces a JBoss CLI
494− snippet that writes the corresponding attributes starting
495− at `path`. Recurses down into subattrsets as necessary,
496− producing the variable name from its full path in the
500− writeAttributes "/subsystem=keycloak-server/spi=hostname/provider=default" {
503− forceBackendUrlToFrontendUrl = false;
504− frontendUrl = "https://keycloak.example.com/auth";
508− if (result != true) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="enabled")
509− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=enabled, value=true)
511− if (result != false) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.forceBackendUrlToFrontendUrl")
512− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.forceBackendUrlToFrontendUrl, value=false)
514− if (result != "https://keycloak.example.com/auth") of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.frontendUrl")
515− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl, value="https://keycloak.example.com/auth")
519− writeAttributes = path: set:
521− # JBoss expressions like `${var}` need to be prefixed
522− # with `expression` to evaluate.
523− prefixExpression = string:
525− matchResult = match ''"\$\{.*}"'' string;
527− if matchResult != null then
528− "expression " + string
532− writeAttribute = attribute: value:
534− type = typeOf value;
536− if type == "set" then
538− names = attrNames value;
540− foldl' (text: name: text + (writeAttribute "${attribute}.${name}" value.${name})) "" names
541− else if value == null then ''
542− if (outcome == success) of ${path}:read-attribute(name="${attribute}")
543− ${path}:undefine-attribute(name="${attribute}")
546− else if elem type [ "string" "path" "bool" ] then
548− value' = if type == "bool" then boolToString value else ''"${value}"'';
551− if (result != ${prefixExpression value'}) of ${path}:read-attribute(name="${attribute}")
552− ${path}:write-attribute(name=${attribute}, value=${value'})
555− else throw "Unsupported type '${type}' for path '${path}'!";
559− (attribute: value: (writeAttribute attribute value))
563− /* Produces an argument list for the JBoss `add()` function,
564− which adds a JBoss path and takes as its arguments the
565− required subpaths and attributes.
571− forceBackendUrlToFrontendUrl = false;
572− frontendUrl = "https://keycloak.example.com/auth";
576− enabled = true, properties = { forceBackendUrlToFrontendUrl = false, frontendUrl = "https://keycloak.example.com/auth" }
581− makeArg = attribute: value:
583− type = typeOf value;
585− if type == "set" then
586− "${attribute} = { " + (makeArgList value) + " }"
587− else if elem type [ "string" "path" "bool" ] then
588− "${attribute} = ${if type == "bool" then boolToString value else ''"${value}"''}"
589− else if value == null then
592− throw "Unsupported type '${type}' for attribute '${attribute}'!";
595− concatStringsSep ", " (mapAttrsToList makeArg set);
598− /* Recurses into the `nodeValue` attrset. Only subattrsets that
599− are JBoss paths, i.e. follows the `key=value` format, are recursed
600− into - the rest are considered JBoss attributes / maps.
602− recurse = nodePath: nodeValue:
605− if isAttrs nodeValue && nodeValue._type or "" == "order" then
611− value = nodeContent.${name};
613− if (match ".*([=]).*" name) == [ "=" ] then
614− if isAttrs value || value == null then
617− throw "Parsing path '${concatStringsSep "." (nodePath ++ [ name ])}' failed: JBoss attributes cannot contain '='!"
620− jbossPath = "/" + concatStringsSep "/" nodePath;
621− children = if !isAttrs nodeContent then { } else nodeContent;
622− subPaths = filter isPath (attrNames children);
625− value = children.${name};
627− if value._type or "" == "order" then value.priority else 1000;
628− orderedSubPaths = sort (a: b: getPriority a < getPriority b) subPaths;
629− jbossAttrs = filterAttrs (name: _: !(isPath name)) children;
631− if nodeContent != null then
633− if (outcome != success) of ${jbossPath}:read-resource()
634− ${jbossPath}:add(${makeArgList jbossAttrs})
636− '' + writeAttributes jbossPath jbossAttrs
639− if (outcome == success) of ${jbossPath}:read-resource()
640− ${jbossPath}:remove()
644− text + concatMapStringsSep "\n" (name: recurse (nodePath ++ [ name ]) children.${name}) orderedSubPaths;
648− jbossCliScript = pkgs.writeText "jboss-cli-script" (mkJbossScript keycloakConfig');
650− keycloakConfig = pkgs.runCommand "keycloak-config"
652− nativeBuildInputs = [ cfg.package ];
655− export JBOSS_BASE_DIR="$(pwd -P)";
656− export JBOSS_MODULEPATH="${cfg.package}/modules";
657− export JBOSS_LOG_DIR="$JBOSS_BASE_DIR/log";
659− cp -r ${cfg.package}/standalone/configuration .
660− chmod -R u+rwX ./configuration
662− mkdir -p {deployments,ssl}
668− while ! jboss-cli.sh --connect ':read-attribute(name=server-state)'; do
669− if [[ "$attempt" == "$max_attempts" ]]; then
670− echo "ERROR: Could not connect to Keycloak after $attempt attempts! Failing.." >&2
673− echo "Keycloak not fully started yet, retrying.. ($attempt/$max_attempts)"
678− jboss-cli.sh --connect --file=${jbossCliScript} --echo-command
680− cp configuration/standalone.xml $out
497+ isSecret = v: isAttrs v && v ? _secret && isString v._secret;
498+ filteredConfig = lib.converge (lib.filterAttrsRecursive (_: v: ! elem v [{ } null])) cfg.settings;
499+ confFile = pkgs.writeText "keycloak.conf" (keycloakConfig filteredConfig);
500+ keycloakBuild = cfg.package.override {
502+ plugins = cfg.package.enabledPlugins ++ cfg.plugins;
683 mkIf cfg.enable
505 mkIf cfg.enable
@@ -689,7 +511,46 @@ in
692− environment.systemPackages = [ cfg.package ];
514+ environment.systemPackages = [ keycloakBuild ];
516+ services.keycloak.settings =
518+ postgresParams = concatStringsSep "&" (
519+ optionals cfg.database.useSSL [
521+ ] ++ optionals (cfg.database.caCert != null) [
522+ "sslrootcert=${cfg.database.caCert}"
526+ mariadbParams = concatStringsSep "&" ([
527+ "characterEncoding=UTF-8"
528+ ] ++ optionals cfg.database.useSSL [
531+ "verifyServerCertificate=true"
532+ ] ++ optionals (cfg.database.caCert != null) [
533+ "trustCertificateKeyStoreUrl=file:${mySqlCaKeystore}"
534+ "trustCertificateKeyStorePassword=notsosecretpassword"
536+ dbProps = if cfg.database.type == "postgresql" then postgresParams else mariadbParams;
540+ db = if cfg.database.type == "postgresql" then "postgres" else cfg.database.type;
541+ db-username = if databaseActuallyCreateLocally then "keycloak" else cfg.database.username;
542+ db-password._secret = cfg.database.passwordFile;
543+ db-url-host = cfg.database.host;
544+ db-url-port = toString cfg.database.port;
545+ db-url-database = if databaseActuallyCreateLocally then "keycloak" else cfg.database.name;
546+ db-url-properties = prefixUnlessEmpty "?" dbProps;
549+ (mkIf (cfg.sslCertificate != null && cfg.sslCertificateKey != null) {
550+ https-certificate-file = "/run/keycloak/ssl/ssl_cert";
551+ https-certificate-key-file = "/run/keycloak/ssl/ssl_key";
694 systemd.services.keycloakPostgreSQLInit = mkIf createLocalPostgreSQL {
555 systemd.services.keycloakPostgreSQLInit = mkIf createLocalPostgreSQL {
695 after = [ "postgresql.service" ];
556 after = [ "postgresql.service" ];
@@ -752,41 +613,37 @@ in
752 "mysql.service"
613 "mysql.service"
754 else [ ];
615 else [ ];
616+ secretPaths = catAttrs "_secret" (collect isSecret cfg.settings);
617+ mkSecretReplacement = file: ''
618+ replace-secret ${hashString "sha256" file} $CREDENTIALS_DIRECTORY/${baseNameOf file} /run/keycloak/conf/keycloak.conf
620+ secretReplacements = lib.concatMapStrings mkSecretReplacement secretPaths;
757 after = databaseServices;
623 after = databaseServices;
758 bindsTo = databaseServices;
624 bindsTo = databaseServices;
759 wantedBy = [ "multi-user.target" ];
625 wantedBy = [ "multi-user.target" ];
760 path = with pkgs; [
626 path = with pkgs; [
761− cfg.package
627+ keycloakBuild
763 replace-secret
629 replace-secret
765 environment = {
631 environment = {
766− JBOSS_LOG_DIR = "/var/log/keycloak";
632+ KC_HOME_DIR = "/run/keycloak";
767− JBOSS_BASE_DIR = "/run/keycloak";
633+ KC_CONF_DIR = "/run/keycloak/conf";
768− JBOSS_MODULEPATH = "${cfg.package}/modules";
770 serviceConfig = {
635 serviceConfig = {
771− LoadCredential = [
636+ LoadCredential =
772− "db_password:${cfg.database.passwordFile}"
637+ map (p: "${baseNameOf p}:${p}") secretPaths
773− ] ++ optionals (cfg.sslCertificate != null && cfg.sslCertificateKey != null) [
638+ ++ optionals (cfg.sslCertificate != null && cfg.sslCertificateKey != null) [
774− "ssl_cert:${cfg.sslCertificate}"
639+ "ssl_cert:${cfg.sslCertificate}"
775− "ssl_key:${cfg.sslCertificateKey}"
640+ "ssl_key:${cfg.sslCertificateKey}"
777 User = "keycloak";
642 User = "keycloak";
778 Group = "keycloak";
643 Group = "keycloak";
779 DynamicUser = true;
644 DynamicUser = true;
780− RuntimeDirectory = map (p: "keycloak/" + p) [
645+ RuntimeDirectory = "keycloak";
788 RuntimeDirectoryMode = 0700;
646 RuntimeDirectoryMode = 0700;
789− LogsDirectory = "keycloak";
790 AmbientCapabilities = "CAP_NET_BIND_SERVICE";
647 AmbientCapabilities = "CAP_NET_BIND_SERVICE";
792 script = ''
649 script = ''
@@ -795,41 +652,30 @@ in
796 umask u=rwx,g=,o=
653 umask u=rwx,g=,o=
798− install_plugin() {
655+ ln -s ${themesBundle} /run/keycloak/themes
799− if [ -d "$1" ]; then
656+ ln -s ${keycloakBuild}/providers /run/keycloak/
800− find "$1" -type f \( -iname \*.ear -o -iname \*.jar \) -exec install -m 0500 -o keycloak -g keycloak "{}" "/run/keycloak/deployments/" \;
657+
802− install -m 0500 -o keycloak -g keycloak "$1" "/run/keycloak/deployments/"
806− install -m 0600 ${cfg.package}/standalone/configuration/*.properties /run/keycloak/configuration
807− install -T -m 0600 ${keycloakConfig} /run/keycloak/configuration/standalone.xml
658+ install -D -m 0600 ${confFile} /run/keycloak/conf/keycloak.conf
809− replace-secret '@db-password@' "$CREDENTIALS_DIRECTORY/db_password" /run/keycloak/configuration/standalone.xml
660+ ${secretReplacements}
811− export JAVA_OPTS=-Djboss.server.config.user.dir=/run/keycloak/configuration
812− add-user-keycloak.sh -u admin -p '${cfg.initialAdminPassword}'
814− + lib.optionalString (cfg.plugins != []) (lib.concatStringsSep "\n" (map (pl: "install_plugin ${lib.escapeShellArg pl}") cfg.plugins)) + "\n"
815− + optionalString (cfg.sslCertificate != null && cfg.sslCertificateKey != null) ''
662+ '' + optionalString (cfg.sslCertificate != null && cfg.sslCertificateKey != null) ''
816− pushd /run/keycloak/ssl/
663+ mkdir -p /run/keycloak/ssl
817− cat "$CREDENTIALS_DIRECTORY/ssl_cert" <(echo) \
664+ cp $CREDENTIALS_DIRECTORY/ssl_{cert,key} /run/keycloak/ssl/
818− "$CREDENTIALS_DIRECTORY/ssl_key" <(echo) \
819− /etc/ssl/certs/ca-certificates.crt \
821− openssl pkcs12 -export -in "$CREDENTIALS_DIRECTORY/ssl_cert" -inkey "$CREDENTIALS_DIRECTORY/ssl_key" -chain \
822− -name "${cfg.frontendUrl}" -out certificate_private_key_bundle.p12 \
823− -CAfile allcerts.pem -passout pass:notsosecretpassword
826− ${cfg.package}/bin/standalone.sh
666+ export KEYCLOAK_ADMIN=admin
667+ export KEYCLOAK_ADMIN_PASSWORD=${cfg.initialAdminPassword}
830 services.postgresql.enable = mkDefault createLocalPostgreSQL;
672 services.postgresql.enable = mkDefault createLocalPostgreSQL;
831 services.mysql.enable = mkDefault createLocalMySQL;
673 services.mysql.enable = mkDefault createLocalMySQL;
832− services.mysql.package = mkIf createLocalMySQL pkgs.mariadb;
674+ services.mysql.package =
676+ dbPkg = if cfg.database.type == "mariadb" then pkgs.mariadb else pkgs.mysql80;
678+ mkIf createLocalMySQL (mkDefault dbPkg);
835 meta.doc = ./keycloak.xml;
681 meta.doc = ./keycloak.xml;
nixos/modules/services/web-apps/keycloak.xml+61−81
@@ -27,10 +27,10 @@
29 Refer to the <link
29 Refer to the <link
30− xlink:href="https://www.keycloak.org/docs/latest/server_admin/index.html#admin-console">Admin
30+ xlink:href="https://www.keycloak.org/docs/latest/server_admin/index.html">
31− Console section of the Keycloak Server Administration Guide</link> for
31+ Keycloak Server Administration Guide</link> for information on
32− information on how to administer your
33− <productname>Keycloak</productname> instance.
32+ how to administer your <productname>Keycloak</productname>
35 </section>
35 </section>
@@ -38,27 +38,28 @@
38 <title>Database access</title>
38 <title>Database access</title>
40 <productname>Keycloak</productname> can be used with either
40 <productname>Keycloak</productname> can be used with either
41− <productname>PostgreSQL</productname> or
41+ <productname>PostgreSQL</productname>,
42+ <productname>MariaDB</productname> or
42 <productname>MySQL</productname>. Which one is used can be
43 <productname>MySQL</productname>. Which one is used can be
43 configured in <xref
44 configured in <xref
44 linkend="opt-services.keycloak.database.type" />. The selected
45 linkend="opt-services.keycloak.database.type" />. The selected
45 database will automatically be enabled and a database and role
46 database will automatically be enabled and a database and role
46 created unless <xref
47 created unless <xref
47− linkend="opt-services.keycloak.database.host" /> is changed from
48+ linkend="opt-services.keycloak.database.host" /> is changed
48− its default of <literal>localhost</literal> or <xref
49+ from its default of <literal>localhost</literal> or <xref
49− linkend="opt-services.keycloak.database.createLocally" /> is set
50+ linkend="opt-services.keycloak.database.createLocally" /> is
50− to <literal>false</literal>.
51+ set to <literal>false</literal>.
54 External database access can also be configured by setting
55 External database access can also be configured by setting
55 <xref linkend="opt-services.keycloak.database.host" />, <xref
56 <xref linkend="opt-services.keycloak.database.host" />, <xref
57+ linkend="opt-services.keycloak.database.name" />, <xref
56 linkend="opt-services.keycloak.database.username" />, <xref
58 linkend="opt-services.keycloak.database.username" />, <xref
57 linkend="opt-services.keycloak.database.useSSL" /> and <xref
59 linkend="opt-services.keycloak.database.useSSL" /> and <xref
58 linkend="opt-services.keycloak.database.caCert" /> as
60 linkend="opt-services.keycloak.database.caCert" /> as
59− appropriate. Note that you need to manually create a database
61+ appropriate. Note that you need to manually create the database
60− called <literal>keycloak</literal> and allow the configured
61− database user full access to it.
62+ and allow the configured database user full access to it.
@@ -79,22 +80,27 @@
79 </warning>
80 </warning>
80 </section>
81 </section>
82− <section xml:id="module-services-keycloak-frontendurl">
83+ <section xml:id="module-services-keycloak-hostname">
83− <title>Frontend URL</title>
84+ <title>Hostname</title>
86+ The hostname is used to build the public URL used as base for
85− The frontend URL is used as base for all frontend requests and
87+ all frontend requests and must be configured through <xref
86− must be configured through <xref linkend="opt-services.keycloak.frontendUrl" />.
88+ linkend="opt-services.keycloak.settings.hostname" />.
87− It should normally include a trailing <literal>/auth</literal>
88− (the default web context). If you use a reverse proxy, you need
89− to set this option to <literal>""</literal>, so that frontend URL
90− is derived from HTTP headers. <literal>X-Forwarded-*</literal> headers
91− support also should be enabled, using <link
92− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html#identifying-client-ip-addresses">
93− respective guidelines</link>.
93+ If you're migrating an old Wildfly based Keycloak instance
94+ and want to keep compatibility with your current clients,
95+ you'll likely want to set <xref
96+ linkend="opt-services.keycloak.settings.http-relative-path"
97+ /> to <literal>/auth</literal>. See the option description
97− <xref linkend="opt-services.keycloak.forceBackendUrlToFrontendUrl" />
103+ <xref linkend="opt-services.keycloak.settings.hostname-strict-backchannel" />
98 determines whether Keycloak should force all requests to go
104 determines whether Keycloak should force all requests to go
99 through the frontend URL. By default,
105 through the frontend URL. By default,
100 <productname>Keycloak</productname> allows backend requests to
106 <productname>Keycloak</productname> allows backend requests to
@@ -104,10 +110,10 @@
107− See the <link
113+ For more information on hostname configuration, see the <link
108− xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">Hostname
114+ xlink:href="https://www.keycloak.org/server/hostname">Hostname
109− section of the Keycloak Server Installation and Configuration
115+ section of the Keycloak Server Installation and Configuration
110− Guide</link> for more information.
116+ Guide</link>.
112 </section>
118 </section>
@@ -139,68 +145,40 @@
139 <section xml:id="module-services-keycloak-themes">
145 <section xml:id="module-services-keycloak-themes">
140 <title>Themes</title>
146 <title>Themes</title>
142− You can package custom themes and make them visible to Keycloak via
148+ You can package custom themes and make them visible to
143− <xref linkend="opt-services.keycloak.themes" />
149+ Keycloak through <xref linkend="opt-services.keycloak.themes"
144− option. See the <link xlink:href="https://www.keycloak.org/docs/latest/server_development/#_themes">
151+ xlink:href="https://www.keycloak.org/docs/latest/server_development/#_themes">
145 Themes section of the Keycloak Server Development Guide</link>
152 Themes section of the Keycloak Server Development Guide</link>
153+ and the description of the aforementioned NixOS option for
146− and respective NixOS option description for more information.
154+ more information.
148 </section>
156 </section>
150− <section xml:id="module-services-keycloak-extra-config">
158+ <section xml:id="module-services-keycloak-settings">
151− <title>Additional configuration</title>
159+ <title>Configuration file settings</title>
153− Additional Keycloak configuration options, for which no
161+ Keycloak server configuration parameters can be set in <xref
154− explicit <productname>NixOS</productname> options are provided,
155− can be set in <xref linkend="opt-services.keycloak.extraConfig" />.
162+ linkend="opt-services.keycloak.settings" />. These correspond
163+ directly to options in
164+ <filename>conf/keycloak.conf</filename>. Some of the most
165+ important parameters are documented as suboptions, the rest can
166+ be found in the <link
167+ xlink:href="https://www.keycloak.org/server/all-config">All
168+ configuration section of the Keycloak Server Installation and
169+ Configuration Guide</link>.
159− Options are expressed as a Nix attribute set which matches the
173+ Options containing secret data should be set to an attribute
160− structure of the jboss-cli configuration. The configuration is
174+ set containing the attribute <literal>_secret</literal> - a
161− effectively overlayed on top of the default configuration
175+ string pointing to a file containing the value the option
162− shipped with Keycloak. To remove existing nodes and undefine
176+ should be set to. See the description of <xref
163− attributes from the default configuration, set them to
164− <literal>null</literal>.
167− For example, the following script, which removes the hostname
168− provider <literal>default</literal>, adds the deprecated
169− hostname provider <literal>fixed</literal> and defines it the
173−/subsystem=keycloak-server/spi=hostname/provider=default:remove()
174−/subsystem=keycloak-server/spi=hostname/provider=fixed:add(enabled = true, properties = { hostname = "keycloak.example.com" })
175−/subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider, value="fixed")
178− would be expressed as
181−services.keycloak.extraConfig = {
177+ linkend="opt-services.keycloak.settings" /> for an example.
182− "subsystem=keycloak-server" = {
184− "provider=default" = null;
185− "provider=fixed" = {
187− properties.hostname = "keycloak.example.com";
189− default-provider = "fixed";
196− You can discover available options by using the <link
197− xlink:href="http://docs.wildfly.org/21/Admin_Guide.html#Command_Line_Interface">jboss-cli.sh</link>
198− program and by referring to the <link
199− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html">Keycloak
200− Server Installation and Configuration Guide</link>.
202 </section>
179 </section>
204 <section xml:id="module-services-keycloak-example-config">
182 <section xml:id="module-services-keycloak-example-config">
205 <title>Example configuration</title>
183 <title>Example configuration</title>
@@ -208,9 +186,11 @@ services.keycloak.extraConfig = {
208<programlisting>
186<programlisting>
209services.keycloak = {
187services.keycloak = {
210 <link linkend="opt-services.keycloak.enable">enable</link> = true;
188 <link linkend="opt-services.keycloak.enable">enable</link> = true;
190+ <link linkend="opt-services.keycloak.settings.hostname">hostname</link> = "keycloak.example.com";
191+ <link linkend="opt-services.keycloak.settings.hostname-strict-backchannel">hostname-strict-backchannel</link> = true;
211 <link linkend="opt-services.keycloak.initialAdminPassword">initialAdminPassword</link> = "e6Wcm0RrtegMEHl"; # change on first login
193 <link linkend="opt-services.keycloak.initialAdminPassword">initialAdminPassword</link> = "e6Wcm0RrtegMEHl"; # change on first login
212− <link linkend="opt-services.keycloak.frontendUrl">frontendUrl</link> = "https://keycloak.example.com/auth";
213− <link linkend="opt-services.keycloak.forceBackendUrlToFrontendUrl">forceBackendUrlToFrontendUrl</link> = true;
214 <link linkend="opt-services.keycloak.sslCertificate">sslCertificate</link> = "/run/keys/ssl_cert";
194 <link linkend="opt-services.keycloak.sslCertificate">sslCertificate</link> = "/run/keys/ssl_cert";
215 <link linkend="opt-services.keycloak.sslCertificateKey">sslCertificateKey</link> = "/run/keys/ssl_key";
195 <link linkend="opt-services.keycloak.sslCertificateKey">sslCertificateKey</link> = "/run/keys/ssl_key";
216 <link linkend="opt-services.keycloak.database.passwordFile">database.passwordFile</link> = "/run/keys/db_password";
196 <link linkend="opt-services.keycloak.database.passwordFile">database.passwordFile</link> = "/run/keys/db_password";
nixos/modules/services/web-apps/nextcloud.nix+75
@@ -251,6 +251,23 @@ in {
256+ createLocally = mkOption {
260+ Create the database and database user locally. Only available for
262+ Note that this option will use the latest version of MariaDB which
263+ is not officially supported by Nextcloud. As for now a workaround
264+ is used to also support MariaDB version >= 10.6.
254 config = {
271 config = {
255 dbtype = mkOption {
272 dbtype = mkOption {
256 type = types.enum [ "sqlite" "pgsql" "mysql" ];
273 type = types.enum [ "sqlite" "pgsql" "mysql" ];
@@ -505,6 +522,29 @@ in {
505 The nextcloud-occ program preconfigured to target this Nextcloud instance.
522 The nextcloud-occ program preconfigured to target this Nextcloud instance.
525+ globalProfiles = mkEnableOption "global profiles" // {
527+ Makes user-profiles globally available under <literal>nextcloud.tld/u/user.name</literal>.
528+ Even though it's enabled by default in Nextcloud, it must be explicitly enabled
529+ here because it has the side-effect that personal information is even accessible to
530+ unauthenticated users by default.
532+ By default, the following properties are set to <quote>Show to everyone</quote>
533+ if this flag is enabled:
535+ <listitem><para>About</para></listitem>
536+ <listitem><para>Full name</para></listitem>
537+ <listitem><para>Headline</para></listitem>
538+ <listitem><para>Organisation</para></listitem>
539+ <listitem><para>Profile picture</para></listitem>
540+ <listitem><para>Role</para></listitem>
541+ <listitem><para>Twitter</para></listitem>
542+ <listitem><para>Website</para></listitem>
545+ Only has an effect in Nextcloud 23 and later.
509 nginx.recommendedHttpHeaders = mkOption {
549 nginx.recommendedHttpHeaders = mkOption {
510 type = types.bool;
550 type = types.bool;
@@ -583,6 +623,12 @@ in {
583 else pkgs.php80;
623 else pkgs.php80;
627+ { assertion = cfg.database.createLocally -> cfg.config.dbtype == "mysql";
628+ message = ''services.nextcloud.config.dbtype must be set to mysql if services.nextcloud.database.createLocally is set to true.'';
586 { systemd.timers.nextcloud-cron = {
632 { systemd.timers.nextcloud-cron = {
587 wantedBy = [ "timers.target" ];
633 wantedBy = [ "timers.target" ];
588 timerConfig.OnBootSec = "5m";
634 timerConfig.OnBootSec = "5m";
@@ -627,6 +673,8 @@ in {
627 if x == null then "false"
673 if x == null then "false"
628 else boolToString x;
674 else boolToString x;
676+ nextcloudGreaterOrEqualThan = req: versionAtLeast cfg.package.version req;
630 overrideConfig = pkgs.writeText "nextcloud-config.php" ''
678 overrideConfig = pkgs.writeText "nextcloud-config.php" ''
632 ${optionalString requiresReadSecretFunction ''
680 ${optionalString requiresReadSecretFunction ''
@@ -666,6 +714,7 @@ in {
666 'trusted_domains' => ${writePhpArrary ([ cfg.hostName ] ++ c.extraTrustedDomains)},
714 'trusted_domains' => ${writePhpArrary ([ cfg.hostName ] ++ c.extraTrustedDomains)},
667 'trusted_proxies' => ${writePhpArrary (c.trustedProxies)},
715 'trusted_proxies' => ${writePhpArrary (c.trustedProxies)},
668 ${optionalString (c.defaultPhoneRegion != null) "'default_phone_region' => '${c.defaultPhoneRegion}',"}
716 ${optionalString (c.defaultPhoneRegion != null) "'default_phone_region' => '${c.defaultPhoneRegion}',"}
717+ ${optionalString (nextcloudGreaterOrEqualThan "23") "'profile.enabled' => ${boolToString cfg.globalProfiles}"}
669 ${objectstoreConfig}
718 ${objectstoreConfig}
@@ -811,6 +860,32 @@ in {
812 environment.systemPackages = [ occ ];
861 environment.systemPackages = [ occ ];
863+ services.mysql = lib.mkIf cfg.database.createLocally {
865+ package = lib.mkDefault pkgs.mariadb;
866+ ensureDatabases = [ cfg.config.dbname ];
868+ name = cfg.config.dbuser;
869+ ensurePermissions = { "${cfg.config.dbname}.*" = "ALL PRIVILEGES"; };
871+ # FIXME(@Ma27) Nextcloud isn't compatible with mariadb 10.6,
872+ # this is a workaround.
873+ # See https://help.nextcloud.com/t/update-to-next-cloud-21-0-2-has-get-an-error/117028/22
876+ innodb_read_only_compressed = 0;
879+ initialScript = pkgs.writeText "mysql-init" ''
880+ CREATE USER '${cfg.config.dbname}'@'localhost' IDENTIFIED BY '${builtins.readFile( cfg.config.dbpassFile )}';
881+ CREATE DATABASE IF NOT EXISTS ${cfg.config.dbname};
882+ GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
883+ CREATE TEMPORARY TABLES ON ${cfg.config.dbname}.* TO '${cfg.config.dbuser}'@'localhost'
884+ IDENTIFIED BY '${builtins.readFile( cfg.config.dbpassFile )}';
814 services.nginx.enable = mkDefault true;
889 services.nginx.enable = mkDefault true;
816 services.nginx.virtualHosts.${cfg.hostName} = {
891 services.nginx.virtualHosts.${cfg.hostName} = {
nixos/modules/services/web-apps/nifi.nixnew file+318
@@ -0,0 +1,318 @@
1+{ lib, pkgs, config, options, ... }:
4+ cfg = config.services.nifi;
5+ opt = options.services.nifi;
8+ NIFI_OVERRIDE_NIFIENV = "true";
9+ NIFI_HOME = "/var/lib/nifi";
10+ NIFI_PID_DIR = "/run/nifi";
11+ NIFI_LOG_DIR = "/var/log/nifi";
14+ envFile = pkgs.writeText "nifi.env" (lib.concatMapStrings (s: s + "\n") (
15+ (lib.concatLists (lib.mapAttrsToList (name: value:
16+ if value != null then [
17+ "${name}=\"${toString value}\""
21+ nifiEnv = pkgs.writeShellScriptBin "nifi-env" ''
30+ enable = lib.mkEnableOption "Apache NiFi";
32+ package = lib.mkOption {
33+ type = lib.types.package;
35+ defaultText = lib.literalExpression "pkgs.nifi";
36+ description = "Apache NiFi package to use.";
39+ user = lib.mkOption {
40+ type = lib.types.str;
42+ description = "User account where Apache NiFi runs.";
45+ group = lib.mkOption {
46+ type = lib.types.str;
48+ description = "Group account where Apache NiFi runs.";
51+ enableHTTPS = lib.mkOption {
52+ type = lib.types.bool;
54+ description = "Enable HTTPS protocol. Don`t use in production.";
57+ listenHost = lib.mkOption {
58+ type = lib.types.str;
59+ default = if cfg.enableHTTPS then "0.0.0.0" else "127.0.0.1";
60+ defaultText = lib.literalExpression ''
61+ if config.${opt.enableHTTPS}
65+ description = "Bind to an ip for Apache NiFi web-ui.";
68+ listenPort = lib.mkOption {
69+ type = lib.types.int;
70+ default = if cfg.enableHTTPS then 8443 else 8080;
71+ defaultText = lib.literalExpression ''
72+ if config.${opt.enableHTTPS}
76+ description = "Bind to a port for Apache NiFi web-ui.";
79+ proxyHost = lib.mkOption {
80+ type = lib.types.nullOr lib.types.str;
81+ default = if cfg.enableHTTPS then "0.0.0.0" else null;
82+ defaultText = lib.literalExpression ''
83+ if config.${opt.enableHTTPS}
87+ description = "Allow requests from a specific host.";
90+ proxyPort = lib.mkOption {
91+ type = lib.types.nullOr lib.types.int;
92+ default = if cfg.enableHTTPS then 8443 else null;
93+ defaultText = lib.literalExpression ''
94+ if config.${opt.enableHTTPS}
98+ description = "Allow requests from a specific port.";
101+ initUser = lib.mkOption {
102+ type = lib.types.nullOr lib.types.str;
104+ description = "Initial user account for Apache NiFi. Username must be at least 4 characters.";
107+ initPasswordFile = lib.mkOption {
108+ type = lib.types.nullOr lib.types.path;
110+ example = "/run/keys/nifi/password-nifi";
111+ description = "nitial password for Apache NiFi. Password must be at least 12 characters.";
114+ initJavaHeapSize = lib.mkOption {
115+ type = lib.types.nullOr lib.types.int;
118+ description = "Set the initial heap size for the JVM in MB.";
121+ maxJavaHeapSize = lib.mkOption {
122+ type = lib.types.nullOr lib.types.int;
125+ description = "Set the initial heap size for the JVM in MB.";
130+ config = lib.mkIf cfg.enable {
132+ { assertion = cfg.initUser!=null || cfg.initPasswordFile==null;
134+ <option>services.nifi.initUser</option> needs to be set if <option>services.nifi.initPasswordFile</option> enabled.
137+ { assertion = cfg.initUser==null || cfg.initPasswordFile!=null;
139+ <option>services.nifi.initPasswordFile</option> needs to be set if <option>services.nifi.initUser</option> enabled.
142+ { assertion = cfg.proxyHost==null || cfg.proxyPort!=null;
144+ <option>services.nifi.proxyPort</option> needs to be set if <option>services.nifi.proxyHost</option> value specified.
147+ { assertion = cfg.proxyHost!=null || cfg.proxyPort==null;
149+ <option>services.nifi.proxyHost</option> needs to be set if <option>services.nifi.proxyPort</option> value specified.
152+ { assertion = cfg.initJavaHeapSize==null || cfg.maxJavaHeapSize!=null;
154+ <option>services.nifi.maxJavaHeapSize</option> needs to be set if <option>services.nifi.initJavaHeapSize</option> value specified.
157+ { assertion = cfg.initJavaHeapSize!=null || cfg.maxJavaHeapSize==null;
159+ <option>services.nifi.initJavaHeapSize</option> needs to be set if <option>services.nifi.maxJavaHeapSize</option> value specified.
164+ warnings = lib.optional (cfg.enableHTTPS==false) ''
165+ Please do not disable HTTPS mode in production. In this mode, access to the nifi is opened without authentication.
168+ systemd.tmpfiles.rules = [
169+ "d '/var/lib/nifi/conf' 0750 ${cfg.user} ${cfg.group}"
170+ "L+ '/var/lib/nifi/lib' - - - - ${cfg.package}/lib"
174+ systemd.services.nifi = {
175+ description = "Apache NiFi";
176+ after = [ "network.target" ];
177+ wantedBy = [ "multi-user.target" ];
180+ path = [ pkgs.gawk ];
184+ PIDFile = "/run/nifi/nifi.pid";
185+ ExecStartPre = pkgs.writeScript "nifi-pre-start.sh" ''
188+ test -f '/var/lib/nifi/conf/authorizers.xml' || (cp '${cfg.package}/share/nifi/conf/authorizers.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/authorizers.xml')
189+ test -f '/var/lib/nifi/conf/bootstrap.conf' || (cp '${cfg.package}/share/nifi/conf/bootstrap.conf' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap.conf')
190+ test -f '/var/lib/nifi/conf/bootstrap-hashicorp-vault.conf' || (cp '${cfg.package}/share/nifi/conf/bootstrap-hashicorp-vault.conf' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap-hashicorp-vault.conf')
191+ test -f '/var/lib/nifi/conf/bootstrap-notification-services.xml' || (cp '${cfg.package}/share/nifi/conf/bootstrap-notification-services.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap-notification-services.xml')
192+ test -f '/var/lib/nifi/conf/logback.xml' || (cp '${cfg.package}/share/nifi/conf/logback.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/logback.xml')
193+ test -f '/var/lib/nifi/conf/login-identity-providers.xml' || (cp '${cfg.package}/share/nifi/conf/login-identity-providers.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/login-identity-providers.xml')
194+ test -f '/var/lib/nifi/conf/nifi.properties' || (cp '${cfg.package}/share/nifi/conf/nifi.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/nifi.properties')
195+ test -f '/var/lib/nifi/conf/stateless-logback.xml' || (cp '${cfg.package}/share/nifi/conf/stateless-logback.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/stateless-logback.xml')
196+ test -f '/var/lib/nifi/conf/stateless.properties' || (cp '${cfg.package}/share/nifi/conf/stateless.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/stateless.properties')
197+ test -f '/var/lib/nifi/conf/state-management.xml' || (cp '${cfg.package}/share/nifi/conf/state-management.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/state-management.xml')
198+ test -f '/var/lib/nifi/conf/zookeeper.properties' || (cp '${cfg.package}/share/nifi/conf/zookeeper.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/zookeeper.properties')
199+ test -d '/var/lib/nifi/docs/html' || (mkdir -p /var/lib/nifi/docs && cp -r '${cfg.package}/share/nifi/docs/html' '/var/lib/nifi/docs/html')
200+ ${lib.optionalString ((cfg.initUser != null) && (cfg.initPasswordFile != null)) ''
201+ awk -F'[<|>]' '/property name="Username"/ {if ($3!="") f=1} END{exit !f}' /var/lib/nifi/conf/login-identity-providers.xml || ${cfg.package}/bin/nifi.sh set-single-user-credentials ${cfg.initUser} $(cat ${cfg.initPasswordFile})
203+ ${lib.optionalString (cfg.enableHTTPS == false) ''
204+ sed -i /var/lib/nifi/conf/nifi.properties \
205+ -e 's|nifi.remote.input.secure=.*|nifi.remote.input.secure=false|g' \
206+ -e 's|nifi.web.http.host=.*|nifi.web.http.host=${cfg.listenHost}|g' \
207+ -e 's|nifi.web.http.port=.*|nifi.web.http.port=${(toString cfg.listenPort)}|g' \
208+ -e 's|nifi.web.https.host=.*|nifi.web.https.host=|g' \
209+ -e 's|nifi.web.https.port=.*|nifi.web.https.port=|g' \
210+ -e 's|nifi.security.keystore=.*|nifi.security.keystore=|g' \
211+ -e 's|nifi.security.keystoreType=.*|nifi.security.keystoreType=|g' \
212+ -e 's|nifi.security.truststore=.*|nifi.security.truststore=|g' \
213+ -e 's|nifi.security.truststoreType=.*|nifi.security.truststoreType=|g' \
214+ -e '/nifi.security.keystorePasswd/s|^|#|' \
215+ -e '/nifi.security.keyPasswd/s|^|#|' \
216+ -e '/nifi.security.truststorePasswd/s|^|#|'
218+ ${lib.optionalString (cfg.enableHTTPS == true) ''
219+ sed -i /var/lib/nifi/conf/nifi.properties \
220+ -e 's|nifi.remote.input.secure=.*|nifi.remote.input.secure=true|g' \
221+ -e 's|nifi.web.http.host=.*|nifi.web.http.host=|g' \
222+ -e 's|nifi.web.http.port=.*|nifi.web.http.port=|g' \
223+ -e 's|nifi.web.https.host=.*|nifi.web.https.host=${cfg.listenHost}|g' \
224+ -e 's|nifi.web.https.port=.*|nifi.web.https.port=${(toString cfg.listenPort)}|g' \
225+ -e 's|nifi.security.keystore=.*|nifi.security.keystore=./conf/keystore.p12|g' \
226+ -e 's|nifi.security.keystoreType=.*|nifi.security.keystoreType=PKCS12|g' \
227+ -e 's|nifi.security.truststore=.*|nifi.security.truststore=./conf/truststore.p12|g' \
228+ -e 's|nifi.security.truststoreType=.*|nifi.security.truststoreType=PKCS12|g' \
229+ -e '/nifi.security.keystorePasswd/s|^#\+||' \
230+ -e '/nifi.security.keyPasswd/s|^#\+||' \
231+ -e '/nifi.security.truststorePasswd/s|^#\+||'
233+ ${lib.optionalString ((cfg.enableHTTPS == true) && (cfg.proxyHost != null) && (cfg.proxyPort != null)) ''
234+ sed -i /var/lib/nifi/conf/nifi.properties \
235+ -e 's|nifi.web.proxy.host=.*|nifi.web.proxy.host=${cfg.proxyHost}:${(toString cfg.proxyPort)}|g'
237+ ${lib.optionalString ((cfg.enableHTTPS == false) || (cfg.proxyHost == null) && (cfg.proxyPort == null)) ''
238+ sed -i /var/lib/nifi/conf/nifi.properties \
239+ -e 's|nifi.web.proxy.host=.*|nifi.web.proxy.host=|g'
241+ ${lib.optionalString ((cfg.initJavaHeapSize != null) && (cfg.maxJavaHeapSize != null))''
242+ sed -i /var/lib/nifi/conf/bootstrap.conf \
243+ -e 's|java.arg.2=.*|java.arg.2=-Xms${(toString cfg.initJavaHeapSize)}m|g' \
244+ -e 's|java.arg.3=.*|java.arg.3=-Xmx${(toString cfg.maxJavaHeapSize)}m|g'
246+ ${lib.optionalString ((cfg.initJavaHeapSize == null) && (cfg.maxJavaHeapSize == null))''
247+ sed -i /var/lib/nifi/conf/bootstrap.conf \
248+ -e 's|java.arg.2=.*|java.arg.2=-Xms512m|g' \
249+ -e 's|java.arg.3=.*|java.arg.3=-Xmx512m|g'
252+ ExecStart = "${cfg.package}/bin/nifi.sh start";
253+ ExecStop = "${cfg.package}/bin/nifi.sh stop";
257+ # Runtime directory and mode
258+ RuntimeDirectory = "nifi";
259+ RuntimeDirectoryMode = "0750";
260+ # State directory and mode
261+ StateDirectory = "nifi";
262+ StateDirectoryMode = "0750";
263+ # Logs directory and mode
264+ LogsDirectory = "nifi";
265+ LogsDirectoryMode = "0750";
268+ ProtectProc = "invisible";
269+ # Access write directories
270+ ReadWritePaths = [ cfg.initPasswordFile ];
273+ CapabilityBoundingSet = "";
275+ NoNewPrivileges = true;
277+ ProtectSystem = "strict";
280+ PrivateDevices = true;
282+ PrivateUsers = true;
283+ ProtectHostname = true;
284+ ProtectClock = true;
285+ ProtectKernelTunables = true;
286+ ProtectKernelModules = true;
287+ ProtectKernelLogs = true;
288+ ProtectControlGroups = true;
289+ RestrictAddressFamilies = [ "AF_INET AF_INET6" ];
290+ RestrictNamespaces = true;
291+ LockPersonality = true;
292+ MemoryDenyWriteExecute = false;
293+ RestrictRealtime = true;
294+ RestrictSUIDSGID = true;
296+ PrivateMounts = true;
297+ # System Call Filtering
298+ SystemCallArchitectures = "native";
299+ SystemCallFilter = [ "~@cpu-emulation @debug @keyring @memlock @mount @obsolete @resources @privileged @setuid" "@chown" ];
303+ users.users = lib.mkMerge [
304+ (lib.mkIf (cfg.user == "nifi") {
307+ isSystemUser = true;
311+ (lib.attrsets.setAttrByPath [ cfg.user "packages" ] [ cfg.package nifiEnv ])
314+ users.groups = lib.optionalAttrs (cfg.group == "nifi") {
nixos/modules/services/web-servers/hydron.nix+1−1
@@ -161,5 +161,5 @@ in with lib; {
161 (mkRenamedOptionModule [ "services" "hydron" "baseDir" ] [ "services" "hydron" "dataDir" ])
161 (mkRenamedOptionModule [ "services" "hydron" "baseDir" ] [ "services" "hydron" "dataDir" ])
164− meta.maintainers = with maintainers; [ chiiruno ];
164+ meta.maintainers = with maintainers; [ Madouura ];
nixos/modules/services/web-servers/nginx/default.nix+18−11
@@ -255,20 +255,22 @@ let
255 else defaultListen;
255 else defaultListen;
257 listenString = { addr, port, ssl, extraParameters ? [], ... }:
257 listenString = { addr, port, ssl, extraParameters ? [], ... }:
258+ (if ssl && vhost.http3 then "
259+ # UDP listener for **QUIC+HTTP/3
258− "listen ${addr}:${toString port} "
260+ listen ${addr}:${toString port} http3 "
261+ + optionalString vhost.default "default_server "
259− + optionalString ssl "ssl "
262+ + optionalString vhost.reuseport "reuseport "
263+ + optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
267+ listen ${addr}:${toString port} "
260 + optionalString (ssl && vhost.http2) "http2 "
268 + optionalString (ssl && vhost.http2) "http2 "
269+ + optionalString ssl "ssl "
261 + optionalString vhost.default "default_server "
270 + optionalString vhost.default "default_server "
271+ + optionalString vhost.reuseport "reuseport "
262 + optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
272 + optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
264− + (if ssl && vhost.http3 then ''
265− # UDP listener for **QUIC+HTTP/3
266− listen ${addr}:${toString port} http3 reuseport;
267− # Advertise that HTTP/3 is available
268− add_header Alt-Svc 'h3=":443"';
269− # Sent when QUIC was used
270− add_header QUIC-Status $quic;
273 redirectListen = filter (x: !x.ssl) defaultListen;
275 redirectListen = filter (x: !x.ssl) defaultListen;
@@ -321,6 +323,11 @@ let
321 ssl_conf_command Options KTLS;
323 ssl_conf_command Options KTLS;
326+ ${optionalString (hasSSL && vhost.http3) ''
327+ # Advertise that HTTP/3 is available
328+ add_header Alt-Svc 'h3=":443"; ma=86400' always;
324 ${mkBasicAuth vhostName vhost}
331 ${mkBasicAuth vhostName vhost}
326 ${mkLocations vhost.locations}
333 ${mkLocations vhost.locations}
nixos/modules/services/web-servers/nginx/vhost-options.nix+12−3
@@ -20,7 +20,7 @@ with lib;
20 serverAliases = mkOption {
20 serverAliases = mkOption {
21 type = types.listOf types.str;
21 type = types.listOf types.str;
22 default = [];
22 default = [];
23− example = ["www.example.org" "example.org"];
23+ example = [ "www.example.org" "example.org" ];
24 description = ''
24 description = ''
25 Additional names of virtual hosts served by this virtual host configuration.
25 Additional names of virtual hosts served by this virtual host configuration.
@@ -31,11 +31,11 @@ with lib;
31 addr = mkOption { type = str; description = "IP address."; };
31 addr = mkOption { type = str; description = "IP address."; };
32 port = mkOption { type = int; description = "Port number."; default = 80; };
32 port = mkOption { type = int; description = "Port number."; default = 80; };
33 ssl = mkOption { type = bool; description = "Enable SSL."; default = false; };
33 ssl = mkOption { type = bool; description = "Enable SSL."; default = false; };
34− extraParameters = mkOption { type = listOf str; description = "Extra parameters of this listen directive."; default = []; example = [ "reuseport" "deferred" ]; };
34+ extraParameters = mkOption { type = listOf str; description = "Extra parameters of this listen directive."; default = []; example = [ "backlog=1024" "deferred" ]; };
36 default = [];
36 default = [];
37 example = [
37 example = [
38− { addr = "195.154.1.1"; port = 443; ssl = true;}
38+ { addr = "195.154.1.1"; port = 443; ssl = true; }
39 { addr = "192.154.1.1"; port = 80; }
39 { addr = "192.154.1.1"; port = 80; }
41 description = ''
41 description = ''
@@ -207,6 +207,15 @@ with lib;
210+ reuseport = mkOption {
214+ Create an individual listening socket .
215+ It is required to specify only once on one of the hosts.
210 root = mkOption {
219 root = mkOption {
211 type = types.nullOr types.path;
220 type = types.nullOr types.path;
212 default = null;
221 default = null;
nixos/modules/services/x11/desktop-managers/cinnamon.nix+3−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
@@ -196,7 +196,7 @@ in
196 programs.evince.enable = mkDefault true;
196 programs.evince.enable = mkDefault true;
197 programs.file-roller.enable = mkDefault true;
197 programs.file-roller.enable = mkDefault true;
199− environment.systemPackages = (with pkgs // pkgs.gnome // pkgs.cinnamon; pkgs.gnome.removePackagesByName [
199+ environment.systemPackages = with pkgs // pkgs.gnome // pkgs.cinnamon; utils.removePackagesByName [
200 # cinnamon team apps
200 # cinnamon team apps
202 blueberry
202 blueberry
@@ -212,7 +212,7 @@ in
212 # external apps shipped with linux-mint
212 # external apps shipped with linux-mint
214 gnome-calculator
214 gnome-calculator
215− ] config.environment.cinnamon.excludePackages);
215+ ] config.environment.cinnamon.excludePackages;
nixos/modules/services/x11/desktop-managers/enlightenment.nix+5
@@ -16,6 +16,10 @@ let
20+ maintainers = teams.enlightenment.members;
19 imports = [
23 imports = [
20 (mkRenamedOptionModule [ "services" "xserver" "desktopManager" "e19" "enable" ] [ "services" "xserver" "desktopManager" "enlightenment" "enable" ])
24 (mkRenamedOptionModule [ "services" "xserver" "desktopManager" "e19" "enable" ] [ "services" "xserver" "desktopManager" "enlightenment" "enable" ])
@@ -92,6 +96,7 @@ in
93 services.udisks2.enable = true;
97 services.udisks2.enable = true;
94 services.upower.enable = config.powerManagement.enable;
98 services.upower.enable = config.powerManagement.enable;
99+ services.xserver.libinput.enable = mkDefault true;
96 services.dbus.packages = [ e.efl ];
101 services.dbus.packages = [ e.efl ];
nixos/modules/services/x11/desktop-managers/gnome.nix+33−10
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
@@ -22,6 +22,9 @@ let
22 favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ]
22 favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ]
25+ nixos-background-ligtht = pkgs.nixos-artwork.wallpapers.simple-blue;
26+ nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray;
25 nixos-gsettings-desktop-schemas = let
28 nixos-gsettings-desktop-schemas = let
26 defaultPackages = with pkgs; [ gsettings-desktop-schemas gnome.gnome-shell ];
29 defaultPackages = with pkgs; [ gsettings-desktop-schemas gnome.gnome-shell ];
@@ -42,10 +45,11 @@ let
42 chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
45 chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
43 cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
46 cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
44 [org.gnome.desktop.background]
47 [org.gnome.desktop.background]
45− picture-uri='file://${pkgs.nixos-artwork.wallpapers.simple-dark-gray.gnomeFilePath}'
48+ picture-uri='file://${nixos-background-ligtht.gnomeFilePath}'
49+ picture-uri-dark='file://${nixos-background-dark.gnomeFilePath}'
47 [org.gnome.desktop.screensaver]
51 [org.gnome.desktop.screensaver]
48− picture-uri='file://${pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath}'
52+ picture-uri='file://${nixos-background-dark.gnomeFilePath}'
50 ${cfg.favoriteAppsOverride}
54 ${cfg.favoriteAppsOverride}
@@ -55,6 +59,26 @@ let
55 ${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
59 ${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
62+ nixos-background-info = pkgs.writeTextFile rec {
63+ name = "nixos-background-info";
65+ <?xml version="1.0"?>
66+ <!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
68+ <wallpaper deleted="false">
70+ <filename>${nixos-background-ligtht.gnomeFilePath}</filename>
71+ <filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark>
72+ <options>zoom</options>
73+ <shade_type>solid</shade_type>
74+ <pcolor>#3a4ba0</pcolor>
75+ <scolor>#2f302f</scolor>
79+ destination = "/share/gnome-background-properties/nixos.xml";
58 flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;
82 flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;
59 flashbackWms = optional cfg.flashback.enableMetacity {
83 flashbackWms = optional cfg.flashback.enableMetacity {
60 wmName = "metacity";
84 wmName = "metacity";
@@ -430,6 +454,7 @@ in
430 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/blob/gnome-3-38/elements/core/meta-gnome-core-shell.bst
454 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/blob/gnome-3-38/elements/core/meta-gnome-core-shell.bst
431 environment.systemPackages = with pkgs.gnome; [
455 environment.systemPackages = with pkgs.gnome; [
432 adwaita-icon-theme
456 adwaita-icon-theme
457+ nixos-background-info
433 gnome-backgrounds
458 gnome-backgrounds
434 gnome-bluetooth
459 gnome-bluetooth
435 gnome-color-manager
460 gnome-color-manager
@@ -438,8 +463,6 @@ in
438 gnome-shell-extensions
463 gnome-shell-extensions
439 gnome-themes-extra
464 gnome-themes-extra
440 pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
465 pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
441− pkgs.nixos-artwork.wallpapers.simple-dark-gray
442− pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom
443 pkgs.gnome-user-docs
466 pkgs.gnome-user-docs
444 pkgs.orca
467 pkgs.orca
445 pkgs.glib # for gsettings
468 pkgs.glib # for gsettings
@@ -455,7 +478,7 @@ in
455 (mkIf serviceCfg.core-utilities.enable {
478 (mkIf serviceCfg.core-utilities.enable {
456 environment.systemPackages =
479 environment.systemPackages =
457 with pkgs.gnome;
480 with pkgs.gnome;
458− removePackagesByName
481+ utils.removePackagesByName
@@ -515,7 +538,7 @@ in
517 (mkIf serviceCfg.games.enable {
540 (mkIf serviceCfg.games.enable {
518− environment.systemPackages = (with pkgs.gnome; removePackagesByName [
541+ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
519 aisleriot
542 aisleriot
521 five-or-more
544 five-or-more
@@ -536,12 +559,12 @@ in
536 quadrapassel
559 quadrapassel
537 swell-foop
560 swell-foop
539− ] config.environment.gnome.excludePackages);
562+ ] config.environment.gnome.excludePackages;
542 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
565 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
543 (mkIf serviceCfg.core-developer-tools.enable {
566 (mkIf serviceCfg.core-developer-tools.enable {
544− environment.systemPackages = (with pkgs.gnome; removePackagesByName [
567+ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
545 dconf-editor
568 dconf-editor
547 pkgs.gnome-builder
570 pkgs.gnome-builder
@@ -550,7 +573,7 @@ in
550 # in default configurations.
573 # in default configurations.
551 # https://github.com/NixOS/nixpkgs/issues/60908
574 # https://github.com/NixOS/nixpkgs/issues/60908
552 /* gnome-boxes */
575 /* gnome-boxes */
553− ] config.environment.gnome.excludePackages);
576+ ] config.environment.gnome.excludePackages;
555 services.sysprof.enable = notExcluded pkgs.sysprof;
578 services.sysprof.enable = notExcluded pkgs.sysprof;
nixos/modules/services/x11/desktop-managers/lumina.nix+4
@@ -10,6 +10,10 @@ let
14+ maintainers = teams.lumina.members;
13 options = {
17 options = {
15 services.xserver.desktopManager.lumina.enable = mkOption {
19 services.xserver.desktopManager.lumina.enable = mkOption {
nixos/modules/services/x11/desktop-managers/lxqt.nix+11−2
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
@@ -9,6 +9,10 @@ let
13+ maintainers = teams.lxqt.members;
12 options = {
16 options = {
14 services.xserver.desktopManager.lxqt.enable = mkOption {
18 services.xserver.desktopManager.lxqt.enable = mkOption {
@@ -51,7 +55,7 @@ in
51 environment.systemPackages =
55 environment.systemPackages =
52 pkgs.lxqt.preRequisitePackages ++
56 pkgs.lxqt.preRequisitePackages ++
53 pkgs.lxqt.corePackages ++
57 pkgs.lxqt.corePackages ++
54− (pkgs.gnome.removePackagesByName
58+ (utils.removePackagesByName
55 pkgs.lxqt.optionalPackages
59 pkgs.lxqt.optionalPackages
56 config.environment.lxqt.excludePackages);
60 config.environment.lxqt.excludePackages);
@@ -62,6 +66,11 @@ in
62 services.gvfs.enable = true;
66 services.gvfs.enable = true;
64 services.upower.enable = config.powerManagement.enable;
68 services.upower.enable = config.powerManagement.enable;
70+ services.xserver.libinput.enable = mkDefault true;
72+ xdg.portal.enable = true;
73+ xdg.portal.extraPortals = [ pkgs.lxqt.xdg-desktop-portal-lxqt ];
nixos/modules/services/x11/desktop-managers/mate.nix+5−32
@@ -1,20 +1,9 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
8− if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
9− export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
12− if [ -d "${p}/lib/girepository-1.0" ]; then
13− export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
14− export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
18 xcfg = config.services.xserver;
7 xcfg = config.services.xserver;
19 cfg = xcfg.desktopManager.mate;
8 cfg = xcfg.desktopManager.mate;
@@ -48,24 +37,8 @@ in
48 pkgs.mate.mate-session-manager
37 pkgs.mate.mate-session-manager
51− services.xserver.displayManager.sessionCommands = ''
52− if test "$XDG_CURRENT_DESKTOP" = "MATE"; then
53− export XDG_MENU_PREFIX=mate-
55− # Let caja find extensions
40+ # Let caja find extensions
56− export CAJA_EXTENSION_DIRS=$CAJA_EXTENSION_DIRS''${CAJA_EXTENSION_DIRS:+:}${config.system.path}/lib/caja/extensions-2.0
41+ environment.sessionVariables.CAJA_EXTENSION_DIRS = [ "${config.system.path}/lib/caja/extensions-2.0" ];
58− # Let caja extensions find gsettings schemas
59− ${concatMapStrings (p: ''
60− if [ -d "${p}/lib/caja/extensions-2.0" ]; then
63− '') config.environment.systemPackages}
65− # Add mate-control-center paths to some XDG variables because its schemas are needed by mate-settings-daemon, and mate-settings-daemon is a dependency for mate-control-center (that is, they are mutually recursive)
66− ${addToXDGDirs pkgs.mate.mate-control-center}
70 # Let mate-panel find applets
43 # Let mate-panel find applets
71 environment.sessionVariables."MATE_PANEL_APPLETS_DIR" = "${config.system.path}/share/mate-panel/applets";
44 environment.sessionVariables."MATE_PANEL_APPLETS_DIR" = "${config.system.path}/share/mate-panel/applets";
@@ -74,7 +47,7 @@ in
74 # Debugging
47 # Debugging
75 environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1";
48 environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1";
77− environment.systemPackages = pkgs.gnome.removePackagesByName
50+ environment.systemPackages = utils.removePackagesByName
78 (pkgs.mate.basePackages ++
51 (pkgs.mate.basePackages ++
79 pkgs.mate.extraPackages ++
52 pkgs.mate.extraPackages ++
@@ -83,7 +56,6 @@ in
83 pkgs.gtk3.out
56 pkgs.gtk3.out
84 pkgs.shared-mime-info
57 pkgs.shared-mime-info
85 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
58 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
86− pkgs.mate.mate-settings-daemon
87 pkgs.yelp # for 'Contents' in 'Help' menus
59 pkgs.yelp # for 'Contents' in 'Help' menus
89 config.environment.mate.excludePackages;
61 config.environment.mate.excludePackages;
@@ -101,6 +73,7 @@ in
101 services.udev.packages = [ pkgs.mate.mate-settings-daemon ];
73 services.udev.packages = [ pkgs.mate.mate-settings-daemon ];
102 services.gvfs.enable = true;
74 services.gvfs.enable = true;
103 services.upower.enable = config.powerManagement.enable;
75 services.upower.enable = config.powerManagement.enable;
76+ services.xserver.libinput.enable = mkDefault true;
105 security.pam.services.mate-screensaver.unixAuth = true;
78 security.pam.services.mate-screensaver.unixAuth = true;
nixos/modules/services/x11/desktop-managers/none.nix+44−5
@@ -1,7 +1,46 @@
1+{ config, lib, pkgs, ... }:
4+ runXdgAutostart = config.services.xserver.desktopManager.runXdgAutostartIfNone;
2− services.xserver.desktopManager.session =
8+ services.xserver.desktopManager.runXdgAutostartIfNone = mkOption {
12+ Whether to run XDG autostart files for sessions without a desktop manager
13+ (with only a window manager), these sessions usually don't handle XDG
14+ autostart files by default.
16+ Some services like <option>i18n.inputMethod</option> and
17+ <option>service.earlyoom</option> use XDG autostart files to start.
18+ If this option is not set to <literal>true</literal> and you are using
19+ a window manager without a desktop manager, you need to manually start
20+ them or running <package>dex</package> somewhere.
27+ services.xserver.desktopManager.session = [
3− [ { name = "none";
29+ name = "none";
4− start = "";
30+ start = optionalString runXdgAutostart ''
31+ /run/current-system/systemd/bin/systemctl --user start xdg-autostart-if-no-desktop-manager.target
36+ (mkIf runXdgAutostart {
37+ systemd.user.targets.xdg-autostart-if-no-desktop-manager = {
38+ description = "Run XDG autostart files";
39+ # From `plasma-workspace`, `share/systemd/user/plasma-workspace@.target`.
40+ requires = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
41+ before = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
42+ bindsTo = [ "graphical-session.target" ];
nixos/modules/services/x11/desktop-managers/pantheon.nix+3−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, utils, pkgs, ... }:
@@ -214,7 +214,7 @@ in
214 elementary-settings-daemon
214 elementary-settings-daemon
215 pantheon-agent-geoclue2
215 pantheon-agent-geoclue2
216 pantheon-agent-polkit
216 pantheon-agent-polkit
217− ]) ++ (gnome.removePackagesByName [
217+ ]) ++ (utils.removePackagesByName [
218 gnome.gnome-font-viewer
218 gnome.gnome-font-viewer
219 gnome.gnome-settings-daemon338
219 gnome.gnome-settings-daemon338
220 ] config.environment.pantheon.excludePackages);
220 ] config.environment.pantheon.excludePackages);
@@ -272,7 +272,7 @@ in
274 (mkIf serviceCfg.apps.enable {
274 (mkIf serviceCfg.apps.enable {
275− environment.systemPackages = with pkgs.pantheon; pkgs.gnome.removePackagesByName ([
275+ environment.systemPackages = with pkgs.pantheon; utils.removePackagesByName ([
276 elementary-calculator
276 elementary-calculator
277 elementary-calendar
277 elementary-calendar
278 elementary-camera
278 elementary-camera
nixos/modules/services/x11/desktop-managers/pantheon.xml+3−3
@@ -3,7 +3,7 @@
3 xml:id="chap-pantheon">
3 xml:id="chap-pantheon">
4 <title>Pantheon Desktop</title>
4 <title>Pantheon Desktop</title>
6− Pantheon is the desktop environment created for the elementary OS distribution. It is written from scratch in Vala, utilizing GNOME technologies with GTK 3 and Granite.
6+ Pantheon is the desktop environment created for the elementary OS distribution. It is written from scratch in Vala, utilizing GNOME technologies with GTK and Granite.
8 <section xml:id="sec-pantheon-enable">
8 <section xml:id="sec-pantheon-enable">
9 <title>Enabling Pantheon</title>
9 <title>Enabling Pantheon</title>
@@ -89,9 +89,9 @@ switchboard-with-plugs.override {
90 </listitem>
90 </listitem>
91 </varlistentry>
91 </varlistentry>
92− <varlistentry xml:id="sec-pantheon-faq-gnome3-and-pantheon">
92+ <varlistentry xml:id="sec-pantheon-faq-gnome-and-pantheon">
94− I cannot enable both GNOME 3 and Pantheon.
94+ I cannot enable both GNOME and Pantheon.
96 <listitem>
96 <listitem>
nixos/modules/services/x11/desktop-managers/xfce.nix+8−1
@@ -66,6 +66,12 @@ in
66 default = true;
66 default = true;
67 description = "Enable the XFWM (default) window manager.";
67 description = "Enable the XFWM (default) window manager.";
70+ enableScreensaver = mkOption {
73+ description = "Enable the XFCE screensaver.";
@@ -122,7 +128,7 @@ in
122 ] ++ optionals (!cfg.noDesktop) [
128 ] ++ optionals (!cfg.noDesktop) [
123 xfce4-panel
129 xfce4-panel
124 xfdesktop
130 xfdesktop
125− ];
131+ ] ++ optional cfg.enableScreensaver xfce4-screensaver;
127 environment.pathsToLink = [
133 environment.pathsToLink = [
128 "/share/xfce4"
134 "/share/xfce4"
@@ -168,5 +174,6 @@ in
168 xfce4-notifyd
174 xfce4-notifyd
177+ security.pam.services.xfce4-screensaver.unixAuth = cfg.enableScreensaver;
nixos/modules/services/x11/window-managers/qtile.nix+11−4
@@ -7,19 +7,26 @@ let
11− services.xserver.windowManager.qtile.enable = mkEnableOption "qtile";
10+ options.services.xserver.windowManager.qtile = {
11+ enable = mkEnableOption "qtile";
13+ package = mkPackageOption pkgs "qtile" { };
14 config = mkIf cfg.enable {
16 config = mkIf cfg.enable {
15 services.xserver.windowManager.session = [{
17 services.xserver.windowManager.session = [{
16 name = "qtile";
18 name = "qtile";
17 start = ''
19 start = ''
18− ${pkgs.qtile}/bin/qtile start &
20+ ${cfg.package}/bin/qtile start &
19 waitPID=$!
21 waitPID=$!
23− environment.systemPackages = [ pkgs.qtile ];
25+ environment.systemPackages = [
26+ # pkgs.qtile is currently a buildenv of qtile and its dependencies.
27+ # For userland commands, we want the underlying package so that
28+ # packages such as python don't bleed into userland and overwrite intended behavior.
29+ (cfg.package.unwrapped or cfg.package)
nixos/modules/services/x11/xserver.nix+10−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, utils, pkgs, ... }:
@@ -181,6 +181,13 @@ in
184+ excludePackages = mkOption {
186+ example = literalExpression "[ pkgs.xterm ]";
187+ type = types.listOf types.package;
188+ description = "Which X11 packages to exclude from the default environment";
184 exportConfiguration = mkOption {
191 exportConfiguration = mkOption {
185 type = types.bool;
192 type = types.bool;
186 default = false;
193 default = false;
@@ -655,7 +662,7 @@ in
655 ${cfgPath}.source = xorg.xf86inputevdev.out + "/share" + cfgPath;
662 ${cfgPath}.source = xorg.xf86inputevdev.out + "/share" + cfgPath;
658− environment.systemPackages =
665+ environment.systemPackages = utils.removePackagesByName
659 [ xorg.xorgserver.out
666 [ xorg.xorgserver.out
660 xorg.xrandr
667 xorg.xrandr
661 xorg.xrdb
668 xorg.xrdb
@@ -671,7 +678,7 @@ in
671 pkgs.xdg-utils
678 pkgs.xdg-utils
672 xorg.xf86inputevdev.out # get evdev.4 man page
679 xorg.xf86inputevdev.out # get evdev.4 man page
673 pkgs.nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
680 pkgs.nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
674− ]
681+ ] config.services.xserver.excludePackages
675 ++ optional (elem "virtualbox" cfg.videoDrivers) xorg.xrefresh;
682 ++ optional (elem "virtualbox" cfg.videoDrivers) xorg.xrefresh;
677 environment.pathsToLink = [ "/share/X11" ];
684 environment.pathsToLink = [ "/share/X11" ];
nixos/modules/system/activation/switch-to-configuration.pl+12
@@ -1,5 +1,17 @@
1#! @perl@/bin/perl
1#! @perl@/bin/perl
3+# Issue #166838 uncovered a situation in which a configuration not suitable
4+# for the target architecture caused a cryptic error message instead of
5+# a clean failure. Due to this mismatch, the perl interpreter in the shebang
6+# line wasn't able to be executed, causing this script to be misinterpreted
9+# Let's detect this situation to give a more meaningful error
10+# message. The following two lines are carefully written to be both valid Perl
12+printf "Perl script erroneously interpreted as shell script,\ndoes target platform match nixpkgs.crossSystem platform?\n" && exit 1
3use strict;
15use strict;
4use warnings;
16use warnings;
5use Config::IniFiles;
17use Config::IniFiles;
nixos/modules/system/activation/top-level.nix+12−5
@@ -55,11 +55,18 @@ let
55 substituteInPlace $out/dry-activate --subst-var out
55 substituteInPlace $out/dry-activate --subst-var out
56 chmod u+x $out/activate $out/dry-activate
56 chmod u+x $out/activate $out/dry-activate
57 unset activationScript dryActivationScript
57 unset activationScript dryActivationScript
58− ${pkgs.stdenv.shellDryRun} $out/activate
59− ${pkgs.stdenv.shellDryRun} $out/dry-activate
59+ ${if config.boot.initrd.systemd.enable then ''
61− cp ${config.system.build.bootStage2} $out/init
60+ cp ${config.system.build.bootStage2} $out/prepare-root
61+ substituteInPlace $out/prepare-root --subst-var-by systemConfig $out
62+ # This must not be a symlink or the abs_path of the grub builder for the tests
63+ # will resolve the symlink and we end up with a path that doesn't point to a
65+ cp "$systemd/lib/systemd/systemd" $out/init
67+ cp ${config.system.build.bootStage2} $out/init
62− substituteInPlace $out/init --subst-var-by systemConfig $out
68+ substituteInPlace $out/init --subst-var-by systemConfig $out
64 ln -s ${config.system.build.etc}/etc $out/etc
71 ln -s ${config.system.build.etc}/etc $out/etc
65 ln -s ${config.system.path} $out/sw
72 ln -s ${config.system.path} $out/sw
@@ -156,7 +163,7 @@ in
157 specialisation = mkOption {
164 specialisation = mkOption {
158 default = {};
165 default = {};
159− example = lib.literalExpression "{ fewJobsManyCores.configuration = { nix.settings = { core = 0; max-jobs = 1; }; }";
166+ example = lib.literalExpression "{ fewJobsManyCores.configuration = { nix.settings = { core = 0; max-jobs = 1; }; }; }";
160 description = ''
167 description = ''
161 Additional configurations to build. If
168 Additional configurations to build. If
162 <literal>inheritParentConfig</literal> is true, the system
169 <literal>inheritParentConfig</literal> is true, the system
nixos/modules/system/boot/loader/grub/grub.nix+26
@@ -44,6 +44,8 @@ let
44 { splashImage = f cfg.splashImage;
44 { splashImage = f cfg.splashImage;
45 splashMode = f cfg.splashMode;
45 splashMode = f cfg.splashMode;
46 backgroundColor = f cfg.backgroundColor;
46 backgroundColor = f cfg.backgroundColor;
47+ entryOptions = f cfg.entryOptions;
48+ subEntryOptions = f cfg.subEntryOptions;
47 grub = f grub;
49 grub = f grub;
48 grubTarget = f (grub.grubTarget or "");
50 grubTarget = f (grub.grubTarget or "");
49 shell = "${pkgs.runtimeShell}";
51 shell = "${pkgs.runtimeShell}";
@@ -448,6 +450,30 @@ in
453+ entryOptions = mkOption {
454+ default = "--class nixos --unrestricted";
455+ type = types.nullOr types.str;
457+ Options applied to the primary NixOS menu entry.
460+ This options has no effect for GRUB 1.
465+ subEntryOptions = mkOption {
466+ default = "--class nixos";
467+ type = types.nullOr types.str;
469+ Options applied to the secondary NixOS submenu entry.
472+ This options has no effect for GRUB 1.
451 theme = mkOption {
477 theme = mkOption {
452 type = types.nullOr types.path;
478 type = types.nullOr types.path;
453 example = literalExpression "pkgs.nixos-grub2-theme";
479 example = literalExpression "pkgs.nixos-grub2-theme";
nixos/modules/system/boot/loader/grub/install-grub.pl+5−3
@@ -64,6 +64,8 @@ my $extraEntries = get("extraEntries");
64my $extraEntriesBeforeNixOS = get("extraEntriesBeforeNixOS") eq "true";
64my $extraEntriesBeforeNixOS = get("extraEntriesBeforeNixOS") eq "true";
65my $splashImage = get("splashImage");
65my $splashImage = get("splashImage");
66my $splashMode = get("splashMode");
66my $splashMode = get("splashMode");
67+my $entryOptions = get("entryOptions");
68+my $subEntryOptions = get("subEntryOptions");
67my $backgroundColor = get("backgroundColor");
69my $backgroundColor = get("backgroundColor");
68my $configurationLimit = int(get("configurationLimit"));
70my $configurationLimit = int(get("configurationLimit"));
69my $copyKernels = get("copyKernels") eq "true";
71my $copyKernels = get("copyKernels") eq "true";
@@ -509,7 +511,7 @@ sub addEntry {
509# Add default entries.
511# Add default entries.
510$conf .= "$extraEntries\n" if $extraEntriesBeforeNixOS;
512$conf .= "$extraEntries\n" if $extraEntriesBeforeNixOS;
512−addEntry("NixOS - Default", $defaultConfig, "--unrestricted");
514+addEntry("NixOS - Default", $defaultConfig, $entryOptions);
514$conf .= "$extraEntries\n" unless $extraEntriesBeforeNixOS;
516$conf .= "$extraEntries\n" unless $extraEntriesBeforeNixOS;
@@ -546,7 +548,7 @@ sub addProfile {
546 my ($profile, $description) = @_;
548 my ($profile, $description) = @_;
548 # Add entries for all generations of this profile.
550 # Add entries for all generations of this profile.
549− $conf .= "submenu \"$description\" {\n" if $grubVersion == 2;
551+ $conf .= "submenu \"$description\" --class submenu {\n" if $grubVersion == 2;
551 sub nrFromGen { my ($x) = @_; $x =~ /\/\w+-(\d+)-link/; return $1; }
553 sub nrFromGen { my ($x) = @_; $x =~ /\/\w+-(\d+)-link/; return $1; }
@@ -566,7 +568,7 @@ sub addProfile {
566 -e "$link/nixos-version"
568 -e "$link/nixos-version"
567 ? readFile("$link/nixos-version")
569 ? readFile("$link/nixos-version")
568 : basename((glob(dirname(Cwd::abs_path("$link/kernel")) . "/lib/modules/*"))[0]);
570 : basename((glob(dirname(Cwd::abs_path("$link/kernel")) . "/lib/modules/*"))[0]);
569− addEntry("NixOS - Configuration " . nrFromGen($link) . " ($date - $version)", $link);
571+ addEntry("NixOS - Configuration " . nrFromGen($link) . " ($date - $version)", $link, $subEntryOptions);
572 $conf .= "}\n" if $grubVersion == 2;
574 $conf .= "}\n" if $grubVersion == 2;
nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+1−1
@@ -33,7 +33,7 @@ let
33 netbootxyz = if cfg.netbootxyz.enable then pkgs.netbootxyz-efi else "";
33 netbootxyz = if cfg.netbootxyz.enable then pkgs.netbootxyz-efi else "";
35 copyExtraFiles = pkgs.writeShellScript "copy-extra-files" ''
35 copyExtraFiles = pkgs.writeShellScript "copy-extra-files" ''
36− empty_file=$(mktemp)
36+ empty_file=$(${pkgs.coreutils}/bin/mktemp)
38 ${concatStrings (mapAttrsToList (n: v: ''
38 ${concatStrings (mapAttrsToList (n: v: ''
39 ${pkgs.coreutils}/bin/install -Dp "${v}" "${efi.efiSysMountPoint}/"${escapeShellArg n}
39 ${pkgs.coreutils}/bin/install -Dp "${v}" "${efi.efiSysMountPoint}/"${escapeShellArg n}
nixos/modules/system/boot/luksroot.nix+73−6
@@ -1,10 +1,11 @@
1−{ config, lib, pkgs, ... }:
1+{ config, options, lib, pkgs, ... }:
6 luks = config.boot.initrd.luks;
6 luks = config.boot.initrd.luks;
7 kernelPackages = config.boot.kernelPackages;
7 kernelPackages = config.boot.kernelPackages;
8+ defaultPrio = (mkOptionDefault {}).priority;
9 commonFunctions = ''
10 commonFunctions = ''
@@ -474,6 +475,16 @@ let
474 preLVM = filterAttrs (n: v: v.preLVM) luks.devices;
475 preLVM = filterAttrs (n: v: v.preLVM) luks.devices;
475 postLVM = filterAttrs (n: v: !v.preLVM) luks.devices;
476 postLVM = filterAttrs (n: v: !v.preLVM) luks.devices;
478+ stage1Crypttab = pkgs.writeText "initrd-crypttab" (lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: let
479+ opts = v.crypttabExtraOpts
480+ ++ optional v.allowDiscards "discard"
481+ ++ optionals v.bypassWorkqueues [ "no-read-workqueue" "no-write-workqueue" ]
482+ ++ optional (v.header != null) "header=${v.header}"
483+ ++ optional (v.keyFileOffset != null) "keyfile-offset=${v.keyFileOffset}"
484+ ++ optional (v.keyFileSize != null) "keyfile-size=${v.keyFileSize}"
486+ in "${n} ${v.device} ${if v.keyFile == null then "-" else v.keyFile} ${lib.concatStringsSep "," opts}") luks.devices));
479 imports = [
490 imports = [
@@ -802,6 +813,18 @@ in
802 Commands that should be run right after we have mounted our LUKS device.
813 Commands that should be run right after we have mounted our LUKS device.
817+ crypttabExtraOpts = mkOption {
818+ type = with types; listOf singleLineStr;
820+ example = [ "_netdev" ];
823+ Only used with systemd stage 1.
825+ Extra options to append to the last column of the generated crypttab file.
@@ -853,6 +876,31 @@ in
853 -> versionAtLeast kernelPackages.kernel.version "5.9";
876 -> versionAtLeast kernelPackages.kernel.version "5.9";
854 message = "boot.initrd.luks.devices.<name>.bypassWorkqueues is not supported for kernels older than 5.9";
877 message = "boot.initrd.luks.devices.<name>.bypassWorkqueues is not supported for kernels older than 5.9";
880+ { assertion = config.boot.initrd.systemd.enable -> all (dev: !dev.fallbackToPassword) (attrValues luks.devices);
881+ message = "boot.initrd.luks.devices.<name>.fallbackToPassword is implied by systemd stage 1.";
883+ { assertion = config.boot.initrd.systemd.enable -> all (dev: dev.preLVM) (attrValues luks.devices);
884+ message = "boot.initrd.luks.devices.<name>.preLVM is not used by systemd stage 1.";
886+ { assertion = config.boot.initrd.systemd.enable -> options.boot.initrd.luks.reusePassphrases.highestPrio == defaultPrio;
887+ message = "boot.initrd.luks.reusePassphrases has no effect with systemd stage 1.";
889+ { assertion = config.boot.initrd.systemd.enable -> all (dev: dev.preOpenCommands == "" && dev.postOpenCommands == "") (attrValues luks.devices);
890+ message = "boot.initrd.luks.devices.<name>.preOpenCommands and postOpenCommands is not supported by systemd stage 1. Please bind a service to cryptsetup.target or cryptsetup-pre.target instead.";
893+ { assertion = config.boot.initrd.systemd.enable -> !luks.gpgSupport;
894+ message = "systemd stage 1 does not support GPG smartcards yet.";
897+ { assertion = config.boot.initrd.systemd.enable -> !luks.fido2Support;
898+ message = "systemd stage 1 does not support FIDO2 yet.";
901+ { assertion = config.boot.initrd.systemd.enable -> !luks.yubikeySupport;
902+ message = "systemd stage 1 does not support Yubikeys yet.";
858 # actually, sbp2 driver is the one enabling the DMA attack, but this needs to be tested
906 # actually, sbp2 driver is the one enabling the DMA attack, but this needs to be tested
@@ -867,7 +915,7 @@ in
867 ++ (if builtins.elem "xts" luks.cryptoModules then ["ecb"] else []);
915 ++ (if builtins.elem "xts" luks.cryptoModules then ["ecb"] else []);
869 # copy the cryptsetup binary and it's dependencies
917 # copy the cryptsetup binary and it's dependencies
870− boot.initrd.extraUtilsCommands = ''
918+ boot.initrd.extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
871 copy_bin_and_libs ${pkgs.cryptsetup}/bin/cryptsetup
919 copy_bin_and_libs ${pkgs.cryptsetup}/bin/cryptsetup
872 copy_bin_and_libs ${askPass}/bin/cryptsetup-askpass
920 copy_bin_and_libs ${askPass}/bin/cryptsetup-askpass
873 sed -i s,/bin/sh,$out/bin/sh, $out/bin/cryptsetup-askpass
921 sed -i s,/bin/sh,$out/bin/sh, $out/bin/cryptsetup-askpass
@@ -915,7 +963,7 @@ in
918− boot.initrd.extraUtilsCommandsTest = ''
966+ boot.initrd.extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable) ''
919 $out/bin/cryptsetup --version
967 $out/bin/cryptsetup --version
920 ${optionalString luks.yubikeySupport ''
968 ${optionalString luks.yubikeySupport ''
921 $out/bin/ykchalresp -V
969 $out/bin/ykchalresp -V
@@ -932,9 +980,28 @@ in
983+ boot.initrd.systemd = {
984+ contents."/etc/crypttab".source = stage1Crypttab;
986+ extraBin.systemd-cryptsetup = "${config.boot.initrd.systemd.package}/lib/systemd/systemd-cryptsetup";
988+ additionalUpstreamUnits = [
989+ "cryptsetup-pre.target"
991+ "remote-cryptsetup.target"
994+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-cryptsetup"
995+ "${config.boot.initrd.systemd.package}/lib/systemd/system-generators/systemd-cryptsetup-generator"
999+ # We do this because we need the udev rules from the package
1000+ boot.initrd.services.lvm.enable = true;
935− boot.initrd.preFailCommands = postCommands;
1002+ boot.initrd.preFailCommands = mkIf (!config.boot.initrd.systemd.enable) postCommands;
936− boot.initrd.preLVMCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands;
1003+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands);
937− boot.initrd.postDeviceCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands;
1004+ boot.initrd.postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands);
939 environment.systemPackages = [ pkgs.cryptsetup ];
1006 environment.systemPackages = [ pkgs.cryptsetup ];
nixos/modules/system/boot/networkd.nix+139−1
@@ -10,6 +10,36 @@ let
14+ sectionNetwork = checkUnitConfig "Network" [
17+ "SpeedMeterIntervalSec"
18+ "ManageForeignRoutingPolicyRules"
19+ "ManageForeignRoutes"
22+ (assertValueOneOf "SpeedMeter" boolValues)
23+ (assertInt "SpeedMeterIntervalSec")
24+ (assertValueOneOf "ManageForeignRoutingPolicyRules" boolValues)
25+ (assertValueOneOf "ManageForeignRoutes" boolValues)
28+ sectionDHCPv4 = checkUnitConfig "DHCPv4" [
35+ sectionDHCPv6 = checkUnitConfig "DHCPv6" [
15 sectionLink = checkUnitConfig "Link" [
45 sectionLink = checkUnitConfig "Link" [
@@ -281,6 +311,8 @@ let
281 "PrivateKeyFile"
311 "PrivateKeyFile"
282 "ListenPort"
312 "ListenPort"
283 "FirewallMark"
313 "FirewallMark"
285 (assertInt "FirewallMark")
317 (assertInt "FirewallMark")
286 (assertRange "FirewallMark" 1 4294967295)
318 (assertRange "FirewallMark" 1 4294967295)
@@ -296,6 +328,8 @@ let
296 "AllowedIPs"
328 "AllowedIPs"
297 "Endpoint"
329 "Endpoint"
298 "PersistentKeepalive"
330 "PersistentKeepalive"
300 (assertInt "PersistentKeepalive")
334 (assertInt "PersistentKeepalive")
301 (assertRange "PersistentKeepalive" 0 65535)
335 (assertRange "PersistentKeepalive" 0 65535)
@@ -867,6 +901,44 @@ let
905+ networkConfig = mkOption {
907+ example = { SpeedMeter = true; ManageForeignRoutingPolicyRules = false; };
908+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionNetwork;
910+ Each attribute in this set specifies an option in the
911+ <literal>[Network]</literal> section of the networkd config.
912+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
913+ <manvolnum>5</manvolnum></citerefentry> for details.
917+ dhcpV4Config = mkOption {
919+ example = { DUIDType = "vendor"; };
920+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionDHCPv4;
922+ Each attribute in this set specifies an option in the
923+ <literal>[DHCPv4]</literal> section of the networkd config.
924+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
925+ <manvolnum>5</manvolnum></citerefentry> for details.
929+ dhcpV6Config = mkOption {
931+ example = { DUIDType = "vendor"; };
932+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionDHCPv6;
934+ Each attribute in this set specifies an option in the
935+ <literal>[DHCPv6]</literal> section of the networkd config.
936+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
937+ <manvolnum>5</manvolnum></citerefentry> for details.
870 linkOptions = commonNetworkOptions // {
942 linkOptions = commonNetworkOptions // {
871 # overwrite enable option from above
943 # overwrite enable option from above
872 enable = mkOption {
944 enable = mkOption {
@@ -1515,6 +1587,39 @@ let
1590+ networkdConfig = { config, ... }: {
1592+ routeTables = mkOption {
1594+ example = { foo = 27; };
1595+ type = with types; attrsOf int;
1597+ Defines route table names as an attrset of name to number.
1598+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
1599+ <manvolnum>5</manvolnum></citerefentry> for details.
1603+ addRouteTablesToIPRoute2 = mkOption {
1608+ If true and routeTables are set, then the specified route tables
1609+ will also be installed into /etc/iproute2/rt_tables.
1615+ networkConfig = optionalAttrs (config.routeTables != { }) {
1616+ RouteTable = mapAttrsToList
1617+ (name: number: "${name}:${toString number}")
1618+ config.routeTables;
1518 commonMatchText = def: optionalString (def.matchConfig != { }) ''
1623 commonMatchText = def: optionalString (def.matchConfig != { }) ''
1520 ${attrsToSection def.matchConfig}
1625 ${attrsToSection def.matchConfig}
@@ -1596,6 +1701,20 @@ let
1596 + def.extraConfig;
1701 + def.extraConfig;
1704+ renderConfig = def:
1707+ ${attrsToSection def.networkConfig}
1709+ + optionalString (def.dhcpV4Config != { }) ''
1711+ ${attrsToSection def.dhcpV4Config}
1713+ + optionalString (def.dhcpV6Config != { }) ''
1715+ ${attrsToSection def.dhcpV6Config}
1599 networkToUnit = name: def:
1718 networkToUnit = name: def:
1600 { inherit (def) enable;
1719 { inherit (def) enable;
1601 text = commonMatchText def
1720 text = commonMatchText def
@@ -1728,6 +1847,12 @@ in
1728 description = "Definition of systemd networks.";
1847 description = "Definition of systemd networks.";
1850+ systemd.network.config = mkOption {
1852+ type = with types; submodule [ { options = networkdOptions; } networkdConfig ];
1853+ description = "Definition of global systemd network config.";
1731 systemd.network.units = mkOption {
1856 systemd.network.units = mkOption {
1732 description = "Definition of networkd units.";
1857 description = "Definition of networkd units.";
1733 default = {};
1858 default = {};
@@ -1819,7 +1944,9 @@ in
1819 systemd.services.systemd-networkd = {
1944 systemd.services.systemd-networkd = {
1820 wantedBy = [ "multi-user.target" ];
1945 wantedBy = [ "multi-user.target" ];
1821 aliases = [ "dbus-org.freedesktop.network1.service" ];
1946 aliases = [ "dbus-org.freedesktop.network1.service" ];
1822− restartTriggers = map (x: x.source) (attrValues unitFiles);
1947+ restartTriggers = map (x: x.source) (attrValues unitFiles) ++ [
1948+ config.environment.etc."systemd/networkd.conf".source
1825 systemd.services.systemd-networkd-wait-online = {
1952 systemd.services.systemd-networkd-wait-online = {
@@ -1842,6 +1969,17 @@ in
1972+ environment.etc."systemd/networkd.conf" = renderConfig cfg.config;
1974+ networking.iproute2 = mkIf (cfg.config.addRouteTablesToIPRoute2 && cfg.config.routeTables != { }) {
1975+ enable = mkDefault true;
1976+ rttablesExtraConfig = ''
1978+ # Extra tables defined in NixOS systemd.networkd.config.routeTables.
1979+ ${concatStringsSep "\n" (mapAttrsToList (name: number: "${toString number} ${name}") cfg.config.routeTables)}
1845 services.resolved.enable = mkDefault true;
1983 services.resolved.enable = mkDefault true;
nixos/modules/system/boot/stage-1-init.sh+3−6
@@ -232,7 +232,8 @@ done
232mkdir -p /lib
232mkdir -p /lib
233ln -s @modulesClosure@/lib/modules /lib/modules
233ln -s @modulesClosure@/lib/modules /lib/modules
234ln -s @modulesClosure@/lib/firmware /lib/firmware
234ln -s @modulesClosure@/lib/firmware /lib/firmware
235+# see comment in stage-1.nix for explanation
235−echo @extraUtils@/bin/modprobe > /proc/sys/kernel/modprobe
236+echo @extraUtils@/bin/modprobe-kernel > /proc/sys/kernel/modprobe
236for i in @kernelModules@; do
237for i in @kernelModules@; do
237 info "loading module $(basename $i)..."
238 info "loading module $(basename $i)..."
238 modprobe $i
239 modprobe $i
@@ -317,11 +318,7 @@ checkFS() {
318 echo "checking $device..."
319 echo "checking $device..."
320− fsckFlags=
321+ fsck -V -a "$device"
321− if test "$fsType" != "btrfs"; then
324− fsck $fsckFlags "$device"
325 fsckResult=$?
322 fsckResult=$?
327 if test $(($fsckResult | 2)) = $fsckResult; then
324 if test $(($fsckResult | 2)) = $fsckResult; then
nixos/modules/system/boot/stage-1.nix+33−14
@@ -131,6 +131,26 @@ let
131 copy_bin_and_libs ${pkgs.kmod}/bin/kmod
131 copy_bin_and_libs ${pkgs.kmod}/bin/kmod
132 ln -sf kmod $out/bin/modprobe
132 ln -sf kmod $out/bin/modprobe
134+ # Dirty hack to make sure the kernel properly loads modules
135+ # such as ext4 on demand (e.g. on a `mount(2)` syscall). This is necessary
136+ # because `kmod` isn't linked against `libpthread.so.0` anymore (since
137+ # it was merged into `libc.so.6` since version `2.34`), but still needs
138+ # to access it for some reason. This is not an issue in stage-1 itself
139+ # because of the `LD_LIBRARY_PATH`-variable and anytime later because the rpath of
140+ # kmod/modprobe points to glibc's `$out/lib` where `libpthread.so.6` exists.
141+ # However, this is a problem when the kernel calls `modprobe` inside
142+ # the initial ramdisk because it doesn't know about the
143+ # `LD_LIBRARY_PATH` and the rpath was nuked.
145+ # Also, we can't use `makeWrapper` here because `kmod` only does
146+ # `modprobe` functionality if `argv[0] == "modprobe"`.
147+ cat >$out/bin/modprobe-kernel <<EOF
149+ export LD_LIBRARY_PATH=$out/lib
150+ exec $out/bin/modprobe "\$@"
152+ chmod +x $out/bin/modprobe-kernel
134 # Copy resize2fs if any ext* filesystems are to be resized
154 # Copy resize2fs if any ext* filesystems are to be resized
135 ${optionalString (any (fs: fs.autoResize && (lib.hasPrefix "ext" fs.fsType)) fileSystems) ''
155 ${optionalString (any (fs: fs.autoResize && (lib.hasPrefix "ext" fs.fsType)) fileSystems) ''
136 # We need mke2fs in the initrd.
156 # We need mke2fs in the initrd.
@@ -335,7 +355,7 @@ let
335 [ { object = bootStage1;
355 [ { object = bootStage1;
336 symlink = "/init";
356 symlink = "/init";
338− { object = pkgs.writeText "mdadm.conf" config.boot.initrd.mdadmConf;
358+ { object = pkgs.writeText "mdadm.conf" config.boot.initrd.services.swraid.mdadmConf;
339 symlink = "/etc/mdadm.conf";
359 symlink = "/etc/mdadm.conf";
341 { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
361 { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
@@ -400,7 +420,7 @@ let
400 ${lib.optionalString (config.boot.initrd.secrets == {})
420 ${lib.optionalString (config.boot.initrd.secrets == {})
401 "exit 0"}
421 "exit 0"}
403− export PATH=${pkgs.coreutils}/bin:${pkgs.cpio}/bin:${pkgs.gzip}/bin:${pkgs.findutils}/bin
423+ export PATH=${pkgs.coreutils}/bin:${pkgs.libarchive}/bin:${pkgs.gzip}/bin:${pkgs.findutils}/bin
405 function cleanup {
425 function cleanup {
406 if [ -n "$tmp" -a -d "$tmp" ]; then
426 if [ -n "$tmp" -a -d "$tmp" ]; then
@@ -420,7 +440,7 @@ let
420 ) config.boot.initrd.secrets)
440 ) config.boot.initrd.secrets)
423− (cd "$tmp" && find . -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null) | \
443+ (cd "$tmp" && find . -print0 | sort -z | bsdtar --uid 0 --gid 0 -cnf - -T - | bsdtar --null -cf - --format=newc @-) | \
424 ${compressorExe} ${lib.escapeShellArgs initialRamdisk.compressorArgs} >> "$1"
444 ${compressorExe} ${lib.escapeShellArgs initialRamdisk.compressorArgs} >> "$1"
@@ -485,14 +505,6 @@ in
488− boot.initrd.mdadmConf = mkOption {
492− Contents of <filename>/etc/mdadm.conf</filename> in stage 1.
496 boot.initrd.preLVMCommands = mkOption {
508 boot.initrd.preLVMCommands = mkOption {
497 default = "";
509 default = "";
498 type = types.lines;
510 type = types.lines;
@@ -703,8 +715,12 @@ in
706− system.build =
718+ system.build = mkMerge [
707− { inherit bootStage1 initialRamdisk initialRamdiskSecretAppender extraUtils; };
719+ { inherit bootStage1 initialRamdiskSecretAppender extraUtils; }
721+ # generated in nixos/modules/system/boot/systemd/initrd.nix
722+ (mkIf (!config.boot.initrd.systemd.enable) { inherit initialRamdisk; })
709 system.requiredKernelConfig = with config.lib.kernelConfig; [
725 system.requiredKernelConfig = with config.lib.kernelConfig; [
710 (isYes "TMPFS")
726 (isYes "TMPFS")
@@ -712,6 +728,9 @@ in
714 boot.initrd.supportedFilesystems = map (fs: fs.fsType) fileSystems;
730 boot.initrd.supportedFilesystems = map (fs: fs.fsType) fileSystems;
734+ (mkRenamedOptionModule [ "boot" "initrd" "mdadmConf" ] [ "boot" "initrd" "services" "swraid" "mdadmConf" ])
nixos/modules/system/boot/stage-2-init.sh+66−94
@@ -5,32 +5,30 @@ systemConfig=@systemConfig@
5export HOME=/root PATH="@path@"
5export HOME=/root PATH="@path@"
8+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
8−# Process the kernel command line.
9+ # Process the kernel command line.
9−for o in $(</proc/cmdline); do
10+ for o in $(</proc/cmdline); do
10− case $o in
11+ case $o in
11− boot.debugtrace)
12+ boot.debugtrace)
12− # Show each command.
13+ # Show each command.
16− set -- $(IFS==; echo $o)
23−# Print a greeting.
20+ # Print a greeting.
25−echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
22+ echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
29−# Normally, stage 1 mounts the root filesystem read/writable.
26+ # Normally, stage 1 mounts the root filesystem read/writable.
30−# However, in some environments, stage 2 is executed directly, and the
27+ # However, in some environments, stage 2 is executed directly, and the
31−# root is read-only. So make it writable here.
28+ # root is read-only. So make it writable here.
32−if [ -z "$container" ]; then
29+ if [ -z "$container" ]; then
33− mount -n -o remount,rw none /
30+ mount -n -o remount,rw none /
@@ -43,6 +41,12 @@ if [ ! -e /proc/1 ]; then
43 local options="$3"
41 local options="$3"
44 local fsType="$4"
42 local fsType="$4"
44+ # We must not overwrite this mount because it's bind-mounted
45+ # from stage 1's /run
46+ if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" = true ] && [ "${mountPoint}" = /run ]; then
46 install -m 0755 -d "$mountPoint"
50 install -m 0755 -d "$mountPoint"
47 mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
51 mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
@@ -50,7 +54,11 @@ if [ ! -e /proc/1 ]; then
57+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" = true ]; then
58+ echo "booting system configuration ${systemConfig}"
53−echo "booting system configuration $systemConfig" > /dev/kmsg
60+ echo "booting system configuration $systemConfig" > /dev/kmsg
56# Make /nix/store a read-only bind mount to enforce immutability of
64# Make /nix/store a read-only bind mount to enforce immutability of
@@ -72,59 +80,32 @@ if [ -n "@readOnlyStore@" ]; then
75−# Provide a /etc/mtab.
83+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
76−install -m 0755 -d /etc
84+ # Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
77−test -e /etc/fstab || touch /etc/fstab # to shut up mount
85+ if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
78−rm -f /etc/mtab* # not that we care about stale locks
86+ resolvconf -m 1000 -a host </etc/resolv.conf
79−ln -s /proc/mounts /etc/mtab
87+ fi
82−# More special file systems, initialise required directories.
83−[ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default
84−install -m 01777 -d /tmp
85−install -m 0755 -d /var/{log,lib,db} /nix/var /etc/nixos/ \
86− /run/lock /home /bin # for the /bin/sh symlink
89−# Miscellaneous boot time cleanup.
90−rm -rf /var/run /var/lock
91−rm -f /etc/{group,passwd,shadow}.lock
94−# Also get rid of temporary GC roots.
95−rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
98−# For backwards compatibility, symlink /var/run to /run, and /var/lock
101−ln -s /run/lock /var/lock
104−# Clear the resume device.
90+ # Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
91+ # Only at this point are all the necessary prerequisites ready for these commands.
92+ exec {logOutFd}>&1 {logErrFd}>&2
93+ if test -w /dev/kmsg; then
94+ exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
105−if test -n "$resumeDevice"; then
95+ if test -n "$line"; then
106− mkswap "$resumeDevice" || echo 'Failed to clear saved image.'
96+ echo "<7>stage-2-init: $line" > /dev/kmsg
101+ exec > >(tee -i /run/log/stage-2-init.log) 2>&1
110−# Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
106+# Required by the activation script
111−if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
107+install -m 0755 -d /etc /etc/nixos
112− resolvconf -m 1000 -a host </etc/resolv.conf
108+install -m 01777 -d /tmp
115−# Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
116−# Only at this point are all the necessary prerequisites ready for these commands.
117−exec {logOutFd}>&1 {logErrFd}>&2
118−if test -w /dev/kmsg; then
119− exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
120− if test -n "$line"; then
121− echo "<7>stage-2-init: $line" > /dev/kmsg
126− exec > >(tee -i /run/log/stage-2-init.log) 2>&1
130# Run the script that performs all configuration activation that does
111# Run the script that performs all configuration activation that does
@@ -133,22 +114,9 @@ echo "running activation script..."
133$systemConfig/activate
114$systemConfig/activate
136−# Restore the system time from the hardware clock. We do this after
137−# running the activation script to be sure that /etc/localtime points
138−# at the current time zone.
139−if [ -e /dev/rtc ]; then
144# Record the boot configuration.
117# Record the boot configuration.
145ln -sfn "$systemConfig" /run/booted-system
118ln -sfn "$systemConfig" /run/booted-system
147−# Prevent the booted system from being garbage-collected. If it weren't
148−# a gcroot, if we were running a different kernel, switched system,
149−# and garbage collected all, we could not load kernel modules anymore.
150−ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
153# Run any user-specified commands.
121# Run any user-specified commands.
154@shell@ @postBootCommands@
122@shell@ @postBootCommands@
@@ -162,11 +130,15 @@ ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
162: >> /etc/machine-id
130: >> /etc/machine-id
133+# No need to restore the stdout/stderr streams we never redirected and
134+# especially no need to start systemd
135+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
165−# Reset the logging file descriptors.
136+ # Reset the logging file descriptors.
166−exec 1>&$logOutFd 2>&$logErrFd
137+ exec 1>&$logOutFd 2>&$logErrFd
167−exec {logOutFd}>&- {logErrFd}>&-
138+ exec {logOutFd}>&- {logErrFd}>&-
170−# Start systemd in a clean environment.
141+ # Start systemd in a clean environment.
171−echo "starting systemd..."
142+ echo "starting systemd..."
172−exec env - @systemdExecutable@ "$@"
143+ exec @systemdExecutable@ "$@"
nixos/modules/system/boot/systemd.nix+18−33
@@ -11,14 +11,7 @@ let
11 systemd = cfg.package;
11 systemd = cfg.package;
13 inherit (systemdUtils.lib)
13 inherit (systemdUtils.lib)
15 generateUnits
14 generateUnits
22 targetToUnit
15 targetToUnit
23 serviceToUnit
16 serviceToUnit
24 socketToUnit
17 socketToUnit
@@ -185,13 +178,7 @@ in
185 systemd.units = mkOption {
178 systemd.units = mkOption {
186 description = "Definition of systemd units.";
179 description = "Definition of systemd units.";
187 default = {};
180 default = {};
188− type = with types; attrsOf (submodule (
181+ type = systemdUtils.types.units;
189− { name, config, ... }:
190− { options = concreteUnitOptions;
192− unit = mkDefault (makeUnit name config);
197 systemd.packages = mkOption {
184 systemd.packages = mkOption {
@@ -203,37 +190,37 @@ in
204 systemd.targets = mkOption {
191 systemd.targets = mkOption {
205 default = {};
192 default = {};
206− type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
193+ type = systemdUtils.types.targets;
207 description = "Definition of systemd target units.";
194 description = "Definition of systemd target units.";
210 systemd.services = mkOption {
197 systemd.services = mkOption {
211 default = {};
198 default = {};
212− type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]);
199+ type = systemdUtils.types.services;
213 description = "Definition of systemd service units.";
200 description = "Definition of systemd service units.";
216 systemd.sockets = mkOption {
203 systemd.sockets = mkOption {
217 default = {};
204 default = {};
218− type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ]);
205+ type = systemdUtils.types.sockets;
219 description = "Definition of systemd socket units.";
206 description = "Definition of systemd socket units.";
222 systemd.timers = mkOption {
209 systemd.timers = mkOption {
223 default = {};
210 default = {};
224− type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ]);
211+ type = systemdUtils.types.timers;
225 description = "Definition of systemd timer units.";
212 description = "Definition of systemd timer units.";
228 systemd.paths = mkOption {
215 systemd.paths = mkOption {
229 default = {};
216 default = {};
230− type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
217+ type = systemdUtils.types.paths;
231 description = "Definition of systemd path units.";
218 description = "Definition of systemd path units.";
234 systemd.mounts = mkOption {
221 systemd.mounts = mkOption {
235 default = [];
222 default = [];
236− type = with types; listOf (submodule [ { options = mountOptions; } unitConfig mountConfig ]);
223+ type = systemdUtils.types.mounts;
237 description = ''
224 description = ''
238 Definition of systemd mount units.
225 Definition of systemd mount units.
239 This is a list instead of an attrSet, because systemd mandates the names to be derived from
226 This is a list instead of an attrSet, because systemd mandates the names to be derived from
@@ -243,7 +230,7 @@ in
244 systemd.automounts = mkOption {
231 systemd.automounts = mkOption {
245 default = [];
232 default = [];
246− type = with types; listOf (submodule [ { options = automountOptions; } unitConfig automountConfig ]);
233+ type = systemdUtils.types.automounts;
247 description = ''
234 description = ''
248 Definition of systemd automount units.
235 Definition of systemd automount units.
249 This is a list instead of an attrSet, because systemd mandates the names to be derived from
236 This is a list instead of an attrSet, because systemd mandates the names to be derived from
@@ -253,7 +240,7 @@ in
254 systemd.slices = mkOption {
241 systemd.slices = mkOption {
255 default = {};
242 default = {};
256− type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig] );
243+ type = systemdUtils.types.slices;
257 description = "Definition of slice configurations.";
244 description = "Definition of slice configurations.";
@@ -362,10 +349,11 @@ in
362 type = types.listOf types.str;
349 type = types.listOf types.str;
363 example = [ "systemd-backlight@.service" ];
350 example = [ "systemd-backlight@.service" ];
364 description = ''
351 description = ''
365− A list of units to suppress when generating system systemd configuration directory. This has
352+ A list of units to skip when generating system systemd configuration directory. This has
366 priority over upstream units, <option>systemd.units</option>, and
353 priority over upstream units, <option>systemd.units</option>, and
367 <option>systemd.additionalUpstreamSystemUnits</option>. The main purpose of this is to
354 <option>systemd.additionalUpstreamSystemUnits</option>. The main purpose of this is to
368− suppress a upstream systemd unit with any modifications made to it by other NixOS modules.
355+ prevent a upstream systemd unit from being added to the initrd with any modifications made to it
356+ by other NixOS modules.
@@ -482,7 +470,12 @@ in
482 enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedSystemUnits) cfg.units;
470 enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedSystemUnits) cfg.units;
485− "systemd/system".source = generateUnits "system" enabledUnits enabledUpstreamSystemUnits upstreamSystemWants;
473+ "systemd/system".source = generateUnits {
475+ units = enabledUnits;
476+ upstreamUnits = enabledUpstreamSystemUnits;
477+ upstreamWants = upstreamSystemWants;
487 "systemd/system.conf".text = ''
480 "systemd/system.conf".text = ''
488 [Manager]
481 [Manager]
@@ -580,14 +573,6 @@ in
581 (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services);
574 (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services);
583− # Generate timer units for all services that have a ‘startAt’ value.
584− systemd.user.timers =
585− mapAttrs (name: service:
586− { wantedBy = [ "timers.target" ];
587− timerConfig.OnCalendar = service.startAt;
589− (filterAttrs (name: service: service.startAt != []) cfg.user.services);
591 # Some overrides to upstream units.
576 # Some overrides to upstream units.
592 systemd.services."systemd-backlight@".restartIfChanged = false;
577 systemd.services."systemd-backlight@".restartIfChanged = false;
593 systemd.services."systemd-fsck@".restartIfChanged = false;
578 systemd.services."systemd-fsck@".restartIfChanged = false;
nixos/modules/system/boot/systemd/initrd-secrets.nixnew file+36
@@ -0,0 +1,36 @@
1+{ config, pkgs, lib, ... }:
4+ config = lib.mkIf (config.boot.initrd.enable && config.boot.initrd.systemd.enable) {
5+ # Copy secrets into the initrd if they cannot be appended
6+ boot.initrd.systemd.contents = lib.mkIf (!config.boot.loader.supportsInitrdSecrets)
7+ (lib.mapAttrs' (dest: source: lib.nameValuePair "/.initrd-secrets/${dest}" { source = if source == null then dest else source; }) config.boot.initrd.secrets);
9+ # Copy secrets to their respective locations
10+ boot.initrd.systemd.services.initrd-nixos-copy-secrets = lib.mkIf (config.boot.initrd.secrets != {}) {
11+ description = "Copy secrets into place";
12+ # Run as early as possible
13+ wantedBy = [ "sysinit.target" ];
14+ before = [ "cryptsetup-pre.target" ];
15+ unitConfig.DefaultDependencies = false;
17+ # We write the secrets to /.initrd-secrets and move them because this allows
18+ # secrets to be written to /run. If we put the secret directly to /run and
19+ # drop this service, we'd mount the /run tmpfs over the secret, making it
20+ # invisible in stage 2.
22+ for secret in $(cd /.initrd-secrets; find . -type f); do
23+ mkdir -p "$(dirname "/$secret")"
24+ cp "/.initrd-secrets/$secret" "/$secret"
30+ RemainAfterExit = true;
33+ # The script needs this
34+ boot.initrd.systemd.extraBin.find = "${pkgs.findutils}/bin/find";
nixos/modules/system/boot/systemd/initrd.nixnew file+502
@@ -0,0 +1,502 @@
1+{ lib, config, utils, pkgs, ... }:
6+ inherit (utils) systemdUtils escapeSystemdPath;
7+ inherit (systemdUtils.lib)
19+ cfg = config.boot.initrd.systemd;
24+ "ctrl-alt-del.target"
29+ "initrd-cleanup.service"
31+ "initrd-parse-etc.service"
32+ "initrd-root-device.target"
33+ "initrd-root-fs.target"
34+ "initrd-switch-root.service"
35+ "initrd-switch-root.target"
38+ "kmod-static-nodes.service"
39+ "local-fs-pre.target"
54+ "sys-kernel-config.mount"
56+ "systemd-ask-password-console.path"
57+ "systemd-ask-password-console.service"
58+ "systemd-fsck@.service"
59+ "systemd-halt.service"
60+ "systemd-hibernate-resume@.service"
61+ "systemd-journald-audit.socket"
62+ "systemd-journald-dev-log.socket"
63+ "systemd-journald.service"
64+ "systemd-journald.socket"
65+ "systemd-kexec.service"
66+ "systemd-modules-load.service"
67+ "systemd-poweroff.service"
68+ "systemd-reboot.service"
69+ "systemd-sysctl.service"
70+ "systemd-tmpfiles-setup-dev.service"
71+ "systemd-tmpfiles-setup.service"
76+ # "network-online.target"
77+ # "network-pre.target"
79+ # "nss-lookup.target"
80+ # "nss-user-lookup.target"
81+ # "remote-fs-pre.target"
83+ ] ++ cfg.additionalUpstreamUnits;
86+ "sysinit.target.wants"
89+ enabledUpstreamUnits = filter (n: ! elem n cfg.suppressedUnits) upstreamUnits;
90+ enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedUnits) cfg.units;
91+ jobScripts = concatLists (mapAttrsToList (_: unit: unit.jobScripts or []) (filterAttrs (_: v: v.enable) cfg.services));
93+ stage1Units = generateUnits {
95+ units = enabledUnits;
96+ upstreamUnits = enabledUpstreamUnits;
97+ inherit upstreamWants;
98+ inherit (cfg) packages package;
101+ fileSystems = filter utils.fsNeededForBoot config.system.build.fileSystems;
103+ fstab = pkgs.writeText "initrd-fstab" (lib.concatMapStringsSep "\n"
104+ ({ fsType, mountPoint, device, options, autoFormat, autoResize, ... }@fs: let
105+ opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs";
106+ in "${device} /sysroot${mountPoint} ${fsType} ${lib.concatStringsSep "," opts}") fileSystems);
108+ needMakefs = lib.any (fs: fs.autoFormat) fileSystems;
109+ needGrowfs = lib.any (fs: fs.autoResize) fileSystems;
111+ kernel-name = config.boot.kernelPackages.kernel.name or "kernel";
112+ modulesTree = config.system.modulesTree.override { name = kernel-name + "-modules"; };
113+ firmware = config.hardware.firmware;
114+ # Determine the set of modules that we need to mount the root FS.
115+ modulesClosure = pkgs.makeModulesClosure {
116+ rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules;
117+ kernel = modulesTree;
118+ firmware = firmware;
119+ allowMissing = false;
122+ initrdBinEnv = pkgs.buildEnv {
123+ name = "initrd-bin-env";
124+ paths = map getBin cfg.initrdBin;
125+ pathsToLink = ["/bin" "/sbin"];
126+ postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -s '${v}' $out/bin/'${n}'") cfg.extraBin);
129+ initialRamdisk = pkgs.makeInitrdNG {
130+ name = "initrd-${kernel-name}";
131+ inherit (config.boot.initrd) compressor compressorArgs prepend;
133+ contents = map (path: { object = path; symlink = ""; }) (subtractLists cfg.suppressedStorePaths cfg.storePaths)
134+ ++ mapAttrsToList (_: v: { object = v.source; symlink = v.target; }) (filterAttrs (_: v: v.enable) cfg.contents);
138+ options.boot.initrd.systemd = {
139+ enable = mkEnableOption ''systemd in initrd.
141+ Note: This is in very early development and is highly
142+ experimental. Most of the features NixOS supports in initrd are
143+ not yet supported by the intrd generated with this option.
146+ package = (mkPackageOption pkgs "systemd" {
147+ default = "systemdStage1";
152+ contents = mkOption {
153+ description = "Set of files that have to be linked into the initrd";
154+ example = literalExpression ''
156+ "/etc/hostname".text = "mymachine";
161+ type = utils.systemdUtils.types.initrdContents;
164+ storePaths = mkOption {
166+ Store paths to copy into the initrd as well.
168+ type = with types; listOf (oneOf [ singleLineStr package ]);
172+ extraBin = mkOption {
174+ Tools to add to /bin
176+ example = literalExpression ''
178+ umount = ''${pkgs.util-linux}/bin/umount;
181+ type = types.attrsOf types.path;
185+ suppressedStorePaths = mkOption {
187+ Store paths specified in the storePaths option that
188+ should not be copied.
190+ type = types.listOf types.singleLineStr;
194+ emergencyAccess = mkOption {
195+ type = with types; oneOf [ bool singleLineStr ];
198+ Set to true for unauthenticated emergency access, and false for
199+ no emergency access.
201+ Can also be set to a hashed super user password to allow
202+ authenticated access to the emergency mode.
207+ initrdBin = mkOption {
208+ type = types.listOf types.package;
212+ Packages to include in /bin for the stage 1 emergency shell.
216+ additionalUpstreamUnits = mkOption {
218+ type = types.listOf types.str;
220+ example = [ "debug-shell.service" "systemd-quotacheck.service" ];
222+ Additional units shipped with systemd that shall be enabled.
226+ suppressedUnits = mkOption {
228+ type = types.listOf types.str;
229+ example = [ "systemd-backlight@.service" ];
232+ A list of units to skip when generating system systemd configuration directory. This has
233+ priority over upstream units, <option>boot.initrd.systemd.units</option>, and
234+ <option>boot.initrd.systemd.additionalUpstreamUnits</option>. The main purpose of this is to
235+ prevent a upstream systemd unit from being added to the initrd with any modifications made to it
236+ by other NixOS modules.
241+ description = "Definition of systemd units.";
244+ type = systemdUtils.types.units;
247+ packages = mkOption {
250+ type = types.listOf types.package;
251+ example = literalExpression "[ pkgs.systemd-cryptsetup-generator ]";
252+ description = "Packages providing systemd units and hooks.";
255+ targets = mkOption {
258+ type = systemdUtils.types.initrdTargets;
259+ description = "Definition of systemd target units.";
262+ services = mkOption {
264+ type = systemdUtils.types.initrdServices;
266+ description = "Definition of systemd service units.";
269+ sockets = mkOption {
271+ type = systemdUtils.types.initrdSockets;
273+ description = "Definition of systemd socket units.";
278+ type = systemdUtils.types.initrdTimers;
280+ description = "Definition of systemd timer units.";
285+ type = systemdUtils.types.initrdPaths;
287+ description = "Definition of systemd path units.";
292+ type = systemdUtils.types.initrdMounts;
295+ Definition of systemd mount units.
296+ This is a list instead of an attrSet, because systemd mandates the names to be derived from
297+ the 'where' attribute.
301+ automounts = mkOption {
303+ type = systemdUtils.types.automounts;
306+ Definition of systemd automount units.
307+ This is a list instead of an attrSet, because systemd mandates the names to be derived from
308+ the 'where' attribute.
314+ type = systemdUtils.types.slices;
316+ description = "Definition of slice configurations.";
320+ config = mkIf (config.boot.initrd.enable && cfg.enable) {
321+ system.build = { inherit initialRamdisk; };
323+ boot.initrd.availableKernelModules = [ "autofs4" ]; # systemd needs this for some features
325+ boot.initrd.systemd = {
326+ initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package] ++ config.system.fsPackages;
328+ less = "${pkgs.less}/bin/less";
329+ mount = "${cfg.package.util-linux}/bin/mount";
330+ umount = "${cfg.package.util-linux}/bin/umount";
334+ "/init".source = "${cfg.package}/lib/systemd/systemd";
335+ "/etc/systemd/system".source = stage1Units;
337+ "/etc/systemd/system.conf".text = ''
339+ DefaultEnvironment=PATH=/bin:/sbin ${optionalString (isBool cfg.emergencyAccess && cfg.emergencyAccess) "SYSTEMD_SULOGIN_FORCE=1"}
342+ "/etc/fstab".source = fstab;
344+ "/lib/modules".source = "${modulesClosure}/lib/modules";
345+ "/lib/firmware".source = "${modulesClosure}/lib/firmware";
347+ "/etc/modules-load.d/nixos.conf".text = concatStringsSep "\n" config.boot.initrd.kernelModules;
349+ "/etc/passwd".source = "${pkgs.fakeNss}/etc/passwd";
350+ "/etc/shadow".text = "root:${if isBool cfg.emergencyAccess then "!" else cfg.emergencyAccess}:::::::";
352+ "/bin".source = "${initrdBinEnv}/bin";
353+ "/sbin".source = "${initrdBinEnv}/sbin";
355+ "/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
356+ "/etc/modprobe.d/systemd.conf".source = "${cfg.package}/lib/modprobe.d/systemd.conf";
357+ "/etc/modprobe.d/ubuntu.conf".source = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" { } ''
358+ ${pkgs.buildPackages.perl}/bin/perl -0pe 's/## file: iwlwifi.conf(.+?)##/##/s;' $src > $out
360+ "/etc/modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;
366+ "${cfg.package}/lib/systemd/systemd-fsck"
367+ (lib.mkIf needGrowfs "${cfg.package}/lib/systemd/systemd-growfs")
368+ "${cfg.package}/lib/systemd/systemd-hibernate-resume"
369+ "${cfg.package}/lib/systemd/systemd-journald"
370+ (lib.mkIf needMakefs "${cfg.package}/lib/systemd/systemd-makefs")
371+ "${cfg.package}/lib/systemd/systemd-modules-load"
372+ "${cfg.package}/lib/systemd/systemd-remount-fs"
373+ "${cfg.package}/lib/systemd/systemd-shutdown"
374+ "${cfg.package}/lib/systemd/systemd-sulogin-shell"
375+ "${cfg.package}/lib/systemd/systemd-sysctl"
378+ "${cfg.package}/lib/systemd/system-generators/systemd-debug-generator"
379+ "${cfg.package}/lib/systemd/system-generators/systemd-fstab-generator"
380+ "${cfg.package}/lib/systemd/system-generators/systemd-gpt-auto-generator"
381+ "${cfg.package}/lib/systemd/system-generators/systemd-hibernate-resume-generator"
382+ "${cfg.package}/lib/systemd/system-generators/systemd-run-generator"
384+ # utilities needed by systemd
385+ "${cfg.package.util-linux}/bin/mount"
386+ "${cfg.package.util-linux}/bin/umount"
387+ "${cfg.package.util-linux}/bin/sulogin"
389+ # so NSS can look up usernames
390+ "${pkgs.glibc}/lib/libnss_files.so.2"
393+ targets.initrd.aliases = ["default.target"];
395+ mapAttrs' (n: v: nameValuePair "${n}.path" (pathToUnit n v)) cfg.paths
396+ // mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services
397+ // mapAttrs' (n: v: nameValuePair "${n}.slice" (sliceToUnit n v)) cfg.slices
398+ // mapAttrs' (n: v: nameValuePair "${n}.socket" (socketToUnit n v)) cfg.sockets
399+ // mapAttrs' (n: v: nameValuePair "${n}.target" (targetToUnit n v)) cfg.targets
400+ // mapAttrs' (n: v: nameValuePair "${n}.timer" (timerToUnit n v)) cfg.timers
402+ (v: let n = escapeSystemdPath v.where;
403+ in nameValuePair "${n}.mount" (mountToUnit n v)) cfg.mounts)
405+ (v: let n = escapeSystemdPath v.where;
406+ in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
408+ # The unit in /run/systemd/generator shadows the unit in
409+ # /etc/systemd/system, but will still apply drop-ins from
410+ # /etc/systemd/system/foo.service.d/
412+ # We need IgnoreOnIsolate, otherwise the Requires dependency of
413+ # a mount unit on its makefs unit causes it to be unmounted when
414+ # we isolate for switch-root. Use a dummy package so that
415+ # generateUnits will generate drop-ins instead of unit files.
416+ packages = [(pkgs.runCommand "dummy" {} ''
417+ mkdir -p $out/etc/systemd/system
418+ touch $out/etc/systemd/system/systemd-{makefs,growfs}@.service
420+ services."systemd-makefs@" = lib.mkIf needMakefs { unitConfig.IgnoreOnIsolate = true; };
421+ services."systemd-growfs@" = lib.mkIf needGrowfs { unitConfig.IgnoreOnIsolate = true; };
423+ services.initrd-nixos-activation = {
424+ after = [ "initrd-fs.target" ];
425+ requiredBy = [ "initrd.target" ];
426+ unitConfig.AssertPathExists = "/etc/initrd-release";
427+ serviceConfig.Type = "oneshot";
428+ description = "NixOS Activation";
430+ script = /* bash */ ''
432+ export PATH="/bin:${cfg.package.util-linux}/bin"
434+ # Figure out what closure to boot
436+ for o in $(< /proc/cmdline); do
439+ IFS== read -r -a initParam <<< "$o"
440+ closure="$(dirname "''${initParam[1]}")"
446+ if [ -z "''${closure:-}" ]; then
447+ echo 'No init= parameter on the kernel command line' >&2
451+ # If we are not booting a NixOS closure (e.g. init=/bin/sh),
452+ # we don't know what root to prepare so we don't do anything
453+ if ! [ -x "/sysroot$closure/prepare-root" ]; then
454+ echo "NEW_INIT=''${initParam[1]}" > /etc/switch-root.conf
455+ echo "$closure does not look like a NixOS installation - not activating"
458+ echo 'NEW_INIT=' > /etc/switch-root.conf
461+ # We need to propagate /run for things like /run/booted-system
462+ # and /run/current-system.
463+ mkdir -p /sysroot/run
464+ mount --bind /run /sysroot/run
466+ # Initialize the system
467+ export IN_NIXOS_SYSTEMD_STAGE1=true
468+ exec chroot /sysroot $closure/prepare-root
472+ # This will either call systemctl with the new init as the last parameter (which
473+ # is the case when not booting a NixOS system) or with an empty string, causing
474+ # systemd to bypass its verification code that checks whether the next file is a systemd
475+ # and using its compiled-in value
476+ services.initrd-switch-root.serviceConfig = {
477+ EnvironmentFile = "-/etc/switch-root.conf";
480+ ''systemctl --no-block switch-root /sysroot "''${NEW_INIT}"''
484+ services.panic-on-fail = {
485+ wantedBy = ["emergency.target"];
487+ DefaultDependencies = false;
488+ ConditionKernelCommandLine = [
489+ "|boot.panic_on_fail"
494+ echo c > /proc/sysrq-trigger
496+ serviceConfig.Type = "oneshot";
500+ boot.kernelParams = lib.mkIf (config.boot.resumeDevice != "") [ "resume=${config.boot.resumeDevice}" ];
nixos/modules/system/boot/systemd/nspawn.nix+7−1
@@ -116,7 +116,13 @@ in {
117 mkMerge [
117 mkMerge [
118 (mkIf (cfg != {}) {
118 (mkIf (cfg != {}) {
119− environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits' false "nspawn" units [] []);
119+ environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits {
120+ allowCollisions = false;
122 systemd.targets.multi-user.wants = [ "machines.target" ];
128 systemd.targets.multi-user.wants = [ "machines.target" ];
nixos/modules/system/boot/systemd/shutdown.nixnew file+58
@@ -0,0 +1,58 @@
1+{ config, lib, utils, pkgs, ... }: let
3+ cfg = config.systemd.shutdownRamfs;
6+ storePaths = map (p: "${p}\n") cfg.storePaths;
7+ contents = lib.mapAttrsToList (_: v: "${v.source}\n${v.target}") (lib.filterAttrs (_: v: v.enable) cfg.contents);
8+ in pkgs.writeText "shutdown-ramfs-contents" (lib.concatStringsSep "\n" (storePaths ++ contents));
11+ options.systemd.shutdownRamfs = {
12+ enable = lib.mkEnableOption "pivoting back to an initramfs for shutdown" // { default = true; };
13+ contents = lib.mkOption {
14+ description = "Set of files that have to be linked into the shutdown ramfs";
15+ example = lib.literalExpression ''
17+ "/lib/systemd/system-shutdown/zpool-sync-shutdown".source = writeShellScript "zpool" "exec ''${zfs}/bin/zpool sync"
20+ type = utils.systemdUtils.types.initrdContents;
23+ storePaths = lib.mkOption {
25+ Store paths to copy into the shutdown ramfs as well.
27+ type = lib.types.listOf lib.types.singleLineStr;
32+ config = lib.mkIf cfg.enable {
33+ systemd.shutdownRamfs.contents."/shutdown".source = "${config.systemd.package}/lib/systemd/systemd-shutdown";
34+ systemd.shutdownRamfs.storePaths = [pkgs.runtimeShell "${pkgs.coreutils}/bin"];
36+ systemd.services.generate-shutdown-ramfs = {
37+ description = "Generate shutdown ramfs";
38+ wantedBy = [ "shutdown.target" ];
39+ before = [ "shutdown.target" ];
41+ DefaultDependencies = false;
42+ ConditionFileIsExecutable = [
43+ "!/run/initramfs/shutdown"
47+ path = [pkgs.util-linux pkgs.makeInitrdNGTool];
48+ serviceConfig.Type = "oneshot";
50+ mkdir -p /run/initramfs
51+ if ! mountpoint -q /run/initramfs; then
52+ mount -t tmpfs tmpfs /run/initramfs
54+ make-initrd-ng ${ramfsContents} /run/initramfs
nixos/modules/system/boot/systemd/tmpfiles.nix+16
@@ -100,5 +100,21 @@ in
104+ systemd.tmpfiles.rules = [
105+ "d /nix/var 0755 root root - -"
106+ "L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
107+ "d /run/lock 0755 root root - -"
108+ "d /var/db 0755 root root - -"
109+ "L /etc/mtab - - - - ../proc/mounts"
110+ "L /var/lock - - - - ../run/lock"
112+ "R! /etc/group.lock - - - - -"
113+ "R! /etc/passwd.lock - - - - -"
114+ "R! /etc/shadow.lock - - - - -"
115+ "R! /etc/mtab* - - - - -"
116+ "R! /nix/var/nix/gcroots/tmp - - - - -"
117+ "R! /nix/var/nix/temproots - - - - -"
nixos/modules/system/boot/systemd/user.nix+13−18
@@ -12,10 +12,6 @@ let
12 (systemdUtils.lib)
12 (systemdUtils.lib)
14 generateUnits
14 generateUnits
19 targetToUnit
15 targetToUnit
20 serviceToUnit
16 serviceToUnit
21 socketToUnit
17 socketToUnit
@@ -57,48 +53,42 @@ in {
57 systemd.user.units = mkOption {
53 systemd.user.units = mkOption {
58 description = "Definition of systemd per-user units.";
54 description = "Definition of systemd per-user units.";
59 default = {};
55 default = {};
60− type = with types; attrsOf (submodule (
56+ type = systemdUtils.types.units;
61− { name, config, ... }:
62− { options = concreteUnitOptions;
64− unit = mkDefault (makeUnit name config);
69 systemd.user.paths = mkOption {
59 systemd.user.paths = mkOption {
70 default = {};
60 default = {};
71− type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
61+ type = systemdUtils.types.paths;
72 description = "Definition of systemd per-user path units.";
62 description = "Definition of systemd per-user path units.";
75 systemd.user.services = mkOption {
65 systemd.user.services = mkOption {
76 default = {};
66 default = {};
77− type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ] );
67+ type = systemdUtils.types.services;
78 description = "Definition of systemd per-user service units.";
68 description = "Definition of systemd per-user service units.";
81 systemd.user.slices = mkOption {
71 systemd.user.slices = mkOption {
82 default = {};
72 default = {};
83− type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig ] );
73+ type = systemdUtils.types.slices;
84 description = "Definition of systemd per-user slice units.";
74 description = "Definition of systemd per-user slice units.";
87 systemd.user.sockets = mkOption {
77 systemd.user.sockets = mkOption {
88 default = {};
78 default = {};
89− type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ] );
79+ type = systemdUtils.types.sockets;
90 description = "Definition of systemd per-user socket units.";
80 description = "Definition of systemd per-user socket units.";
93 systemd.user.targets = mkOption {
83 systemd.user.targets = mkOption {
94 default = {};
84 default = {};
95− type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
85+ type = systemdUtils.types.targets;
96 description = "Definition of systemd per-user target units.";
86 description = "Definition of systemd per-user target units.";
99 systemd.user.timers = mkOption {
89 systemd.user.timers = mkOption {
100 default = {};
90 default = {};
101− type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ] );
91+ type = systemdUtils.types.timers;
102 description = "Definition of systemd per-user timer units.";
92 description = "Definition of systemd per-user timer units.";
@@ -119,7 +109,12 @@ in {
121 environment.etc = {
111 environment.etc = {
122− "systemd/user".source = generateUnits "user" cfg.units upstreamUserUnits [];
112+ "systemd/user".source = generateUnits {
114+ inherit (cfg) units;
115+ upstreamUnits = upstreamUserUnits;
124 "systemd/user.conf".text = ''
119 "systemd/user.conf".text = ''
125 [Manager]
120 [Manager]
nixos/modules/system/boot/timesyncd.nix+17−5
@@ -60,15 +60,27 @@ with lib;
61 users.groups.systemd-timesync.gid = config.ids.gids.systemd-timesync;
61 users.groups.systemd-timesync.gid = config.ids.gids.systemd-timesync;
63− system.activationScripts.systemd-timesyncd-migration = mkIf (versionOlder config.system.stateVersion "19.09") ''
63+ system.activationScripts.systemd-timesyncd-migration =
64 # workaround an issue of systemd-timesyncd not starting due to upstream systemd reverting their dynamic users changes
64 # workaround an issue of systemd-timesyncd not starting due to upstream systemd reverting their dynamic users changes
65 # - https://github.com/NixOS/nixpkgs/pull/61321#issuecomment-492423742
65 # - https://github.com/NixOS/nixpkgs/pull/61321#issuecomment-492423742
66 # - https://github.com/systemd/systemd/issues/12131
66 # - https://github.com/systemd/systemd/issues/12131
67+ mkIf (versionOlder config.system.stateVersion "19.09") ''
67− if [ -L /var/lib/systemd/timesync ]; then
68+ if [ -L /var/lib/systemd/timesync ]; then
68− rm /var/lib/systemd/timesync
69+ rm /var/lib/systemd/timesync
69− mv /var/lib/private/systemd/timesync /var/lib/systemd/timesync
70+ mv /var/lib/private/systemd/timesync /var/lib/systemd/timesync
73+ system.activationScripts.systemd-timesyncd-init-clock =
74+ # Ensure that we have some stored time to prevent systemd-timesyncd to
75+ # resort back to the fallback time.
76+ # If the file doesn't exist we assume that our current system clock is
77+ # good enough to provide an initial value.
79+ if ! [ -f /var/lib/systemd/timesync/clock ]; then
80+ test -d /var/lib/systemd/timesync || mkdir -p /var/lib/systemd/timesync
81+ touch /var/lib/systemd/timesync/clock
nixos/modules/tasks/auto-upgrade.nix+32−7
@@ -63,13 +63,16 @@ in {
65 dates = mkOption {
65 dates = mkOption {
67 type = types.str;
66 type = types.str;
68 description = ''
69 description = ''
70+ How often or when upgrade occurs. For most desktop and server systems
71+ a sufficient upgrade frequency is once a day.
69− Specification (in the format described by
73+ The format is described in
70 <citerefentry><refentrytitle>systemd.time</refentrytitle>
74 <citerefentry><refentrytitle>systemd.time</refentrytitle>
71− <manvolnum>7</manvolnum></citerefentry>) of the time at
75+ <manvolnum>7</manvolnum></citerefentry>.
72− which the update will occur.
@@ -123,6 +126,22 @@ in {
129+ persistent = mkOption {
134+ Takes a boolean argument. If true, the time when the service
135+ unit was last triggered is stored on disk. When the timer is
136+ activated, the service unit is triggered immediately if it
137+ would have been triggered at least once during the time when
138+ the timer was inactive. Such triggering is nonetheless
139+ subject to the delay imposed by RandomizedDelaySec=. This is
140+ useful to catch up on missed runs of the service when the
141+ system was powered down.
@@ -217,11 +236,17 @@ in {
219 startAt = cfg.dates;
238 startAt = cfg.dates;
222− systemd.timers.nixos-upgrade.timerConfig.RandomizedDelaySec =
240+ after = [ "network-online.target" ];
223− cfg.randomizedDelaySec;
241+ wants = [ "network-online.target" ];
244+ systemd.timers.nixos-upgrade = {
246+ RandomizedDelaySec = cfg.randomizedDelaySec;
247+ Persistent = cfg.persistent;
nixos/modules/tasks/bcache.nix+16−6
@@ -1,13 +1,23 @@
1−{ pkgs, ... }:
1+{ config, lib, pkgs, ... }:
4+ options.boot.initrd.services.bcache.enable = (lib.mkEnableOption "bcache support in the initrd") // {
5+ visible = false; # only works with systemd stage 1
5− environment.systemPackages = [ pkgs.bcache-tools ];
8+ config = {
7− services.udev.packages = [ pkgs.bcache-tools ];
10+ environment.systemPackages = [ pkgs.bcache-tools ];
9− boot.initrd.extraUdevRulesCommands = ''
10− cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
12+ services.udev.packages = [ pkgs.bcache-tools ];
14+ boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
15+ cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
18+ boot.initrd.services.udev = lib.mkIf config.boot.initrd.services.bcache.enable {
19+ packages = [ pkgs.bcache-tools ];
20+ binPackages = [ pkgs.bcache-tools ];
nixos/modules/tasks/filesystems.nix+1−1
@@ -352,7 +352,7 @@ in
352 unitConfig.DefaultDependencies = false; # needed to prevent a cycle
352 unitConfig.DefaultDependencies = false; # needed to prevent a cycle
353 serviceConfig.Type = "oneshot";
353 serviceConfig.Type = "oneshot";
355− in listToAttrs (map formatDevice (filter (fs: fs.autoFormat) fileSystems)) // {
355+ in listToAttrs (map formatDevice (filter (fs: fs.autoFormat && !(utils.fsNeededForBoot fs)) fileSystems)) // {
356 # Mount /sys/fs/pstore for evacuating panic logs and crashdumps from persistent storage onto the disk using systemd-pstore.
356 # Mount /sys/fs/pstore for evacuating panic logs and crashdumps from persistent storage onto the disk using systemd-pstore.
357 # This cannot be done with the other special filesystems because the pstore module (which creates the mount point) is not loaded then.
357 # This cannot be done with the other special filesystems because the pstore module (which creates the mount point) is not loaded then.
358 "mount-pstore" = {
358 "mount-pstore" = {
nixos/modules/tasks/filesystems/btrfs.nix+3−3
@@ -66,19 +66,19 @@ in
69− boot.initrd.extraUtilsCommands = mkIf inInitrd
69+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
71 copy_bin_and_libs ${pkgs.btrfs-progs}/bin/btrfs
71 copy_bin_and_libs ${pkgs.btrfs-progs}/bin/btrfs
72 ln -sv btrfs $out/bin/btrfsck
72 ln -sv btrfs $out/bin/btrfsck
73 ln -sv btrfsck $out/bin/fsck.btrfs
73 ln -sv btrfsck $out/bin/fsck.btrfs
76− boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
76+ boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
78 $out/bin/btrfs --version
78 $out/bin/btrfs --version
81− boot.initrd.postDeviceCommands = mkIf inInitrd
81+ boot.initrd.postDeviceCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
83 btrfs device scan
83 btrfs device scan
nixos/modules/tasks/filesystems/cifs.nix+1−1
@@ -16,7 +16,7 @@ in
16 boot.initrd.availableKernelModules = mkIf inInitrd
16 boot.initrd.availableKernelModules = mkIf inInitrd
17 [ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
17 [ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
19− boot.initrd.extraUtilsCommands = mkIf inInitrd
19+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
21 copy_bin_and_libs ${pkgs.cifs-utils}/sbin/mount.cifs
21 copy_bin_and_libs ${pkgs.cifs-utils}/sbin/mount.cifs
nixos/modules/tasks/filesystems/ext.nix+10−4
@@ -1,14 +1,20 @@
1−{ pkgs, ... }:
1+{ config, lib, pkgs, ... }:
5+ inInitrd = lib.any (fs: fs == "ext2" || fs == "ext3" || fs == "ext4") config.boot.initrd.supportedFilesystems;
4 config = {
10 config = {
6− system.fsPackages = [ pkgs.e2fsprogs ];
12+ system.fsPackages = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ pkgs.e2fsprogs ];
8 # As of kernel 4.3, there is no separate ext3 driver (they're also handled by ext4.ko)
14 # As of kernel 4.3, there is no separate ext3 driver (they're also handled by ext4.ko)
9− boot.initrd.availableKernelModules = [ "ext2" "ext4" ];
15+ boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ "ext2" "ext4" ];
11− boot.initrd.extraUtilsCommands =
17+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
13 # Copy e2fsck and friends.
19 # Copy e2fsck and friends.
14 copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/e2fsck
20 copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/e2fsck
nixos/modules/tasks/filesystems/f2fs.nix+1−1
@@ -13,7 +13,7 @@ in
14 boot.initrd.availableKernelModules = mkIf inInitrd [ "f2fs" "crc32" ];
14 boot.initrd.availableKernelModules = mkIf inInitrd [ "f2fs" "crc32" ];
16− boot.initrd.extraUtilsCommands = mkIf inInitrd ''
16+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable) ''
17 copy_bin_and_libs ${pkgs.f2fs-tools}/sbin/fsck.f2fs
17 copy_bin_and_libs ${pkgs.f2fs-tools}/sbin/fsck.f2fs
18 ${optionalString (any (fs: fs.autoResize) fileSystems) ''
18 ${optionalString (any (fs: fs.autoResize) fileSystems) ''
19 # We need f2fs-tools' tools to resize filesystems
19 # We need f2fs-tools' tools to resize filesystems
nixos/modules/tasks/filesystems/jfs.nix+1−1
@@ -12,7 +12,7 @@ in
13 boot.initrd.kernelModules = mkIf inInitrd [ "jfs" ];
13 boot.initrd.kernelModules = mkIf inInitrd [ "jfs" ];
15− boot.initrd.extraUtilsCommands = mkIf inInitrd ''
15+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !boot.initrd.systemd.enable) ''
16 copy_bin_and_libs ${pkgs.jfsutils}/sbin/fsck.jfs
16 copy_bin_and_libs ${pkgs.jfsutils}/sbin/fsck.jfs
nixos/modules/tasks/filesystems/reiserfs.nix+1−1
@@ -15,7 +15,7 @@ in
16 boot.initrd.kernelModules = mkIf inInitrd [ "reiserfs" ];
16 boot.initrd.kernelModules = mkIf inInitrd [ "reiserfs" ];
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
20 copy_bin_and_libs ${pkgs.reiserfsprogs}/sbin/reiserfsck
20 copy_bin_and_libs ${pkgs.reiserfsprogs}/sbin/reiserfsck
21 ln -s reiserfsck $out/bin/fsck.reiserfs
21 ln -s reiserfsck $out/bin/fsck.reiserfs
nixos/modules/tasks/filesystems/unionfs-fuse.nix+13−2
@@ -6,7 +6,7 @@
6 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
6 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
7 boot.initrd.kernelModules = [ "fuse" ];
7 boot.initrd.kernelModules = [ "fuse" ];
9− boot.initrd.extraUtilsCommands = ''
9+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
10 copy_bin_and_libs ${pkgs.fuse}/sbin/mount.fuse
10 copy_bin_and_libs ${pkgs.fuse}/sbin/mount.fuse
11 copy_bin_and_libs ${pkgs.unionfs-fuse}/bin/unionfs
11 copy_bin_and_libs ${pkgs.unionfs-fuse}/bin/unionfs
12 substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
12 substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
@@ -16,12 +16,23 @@
16 chmod +x $out/bin/mount.unionfs-fuse
16 chmod +x $out/bin/mount.unionfs-fuse
19− boot.initrd.postDeviceCommands = ''
19+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
20 # Hacky!!! fuse hard-codes the path to mount
20 # Hacky!!! fuse hard-codes the path to mount
21 mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
21 mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
22 ln -s $(which mount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
22 ln -s $(which mount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
23 ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
23 ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
26+ boot.initrd.systemd.extraBin = {
27+ "mount.fuse" = "${pkgs.fuse}/bin/mount.fuse";
28+ "unionfs" = "${pkgs.unionfs-fuse}/bin/unionfs";
29+ "mount.unionfs-fuse" = pkgs.runCommand "mount.unionfs-fuse" {} ''
30+ substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out \
31+ --replace '${pkgs.bash}/bin/bash' /bin/sh \
32+ --replace '${pkgs.fuse}/sbin' /bin \
33+ --replace '${pkgs.unionfs-fuse}/bin' /bin
27 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
38 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
nixos/modules/tasks/filesystems/vfat.nix+1−1
@@ -15,7 +15,7 @@ in
16 boot.initrd.kernelModules = mkIf inInitrd [ "vfat" "nls_cp437" "nls_iso8859-1" ];
16 boot.initrd.kernelModules = mkIf inInitrd [ "vfat" "nls_cp437" "nls_iso8859-1" ];
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
20 copy_bin_and_libs ${pkgs.dosfstools}/sbin/dosfsck
20 copy_bin_and_libs ${pkgs.dosfstools}/sbin/dosfsck
21 ln -sv dosfsck $out/bin/fsck.vfat
21 ln -sv dosfsck $out/bin/fsck.vfat
nixos/modules/tasks/filesystems/xfs.nix+2−2
@@ -15,14 +15,14 @@ in
16 boot.initrd.availableKernelModules = mkIf inInitrd [ "xfs" "crc32c" ];
16 boot.initrd.availableKernelModules = mkIf inInitrd [ "xfs" "crc32c" ];
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
20 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/fsck.xfs
20 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/fsck.xfs
21 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/xfs_repair
21 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/xfs_repair
24 # Trick just to set 'sh' after the extraUtils nuke-refs.
24 # Trick just to set 'sh' after the extraUtils nuke-refs.
25− boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
25+ boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
27 sed -i -e 's,^#!.*,#!'$out/bin/sh, $out/bin/fsck.xfs
27 sed -i -e 's,^#!.*,#!'$out/bin/sh, $out/bin/fsck.xfs
nixos/modules/tasks/filesystems/zfs.nix+9−33
@@ -466,6 +466,11 @@ in
466 '') rootPools));
466 '') rootPools));
469+ systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/zpool".source = pkgs.writeShellScript "zpool-sync-shutdown" ''
470+ exec ${cfgZfs.package}/bin/zpool sync
472+ systemd.shutdownRamfs.storePaths = ["${cfgZfs.package}/bin/zpool"];
469 # TODO FIXME See https://github.com/NixOS/nixpkgs/pull/99386#issuecomment-798813567. To not break people's bootloader and as probably not everybody would read release notes that thoroughly add inSystem.
474 # TODO FIXME See https://github.com/NixOS/nixpkgs/pull/99386#issuecomment-798813567. To not break people's bootloader and as probably not everybody would read release notes that thoroughly add inSystem.
470 boot.loader.grub = mkIf (inInitrd || inSystem) {
475 boot.loader.grub = mkIf (inInitrd || inSystem) {
471 zfsSupport = true;
476 zfsSupport = true;
@@ -642,41 +647,14 @@ in
644 scriptArgs = "%i";
649 scriptArgs = "%i";
645− path = [ pkgs.gawk cfgZfs.package ];
650+ path = [ cfgZfs.package ];
647− # ZFS has no way of enumerating just devices in a pool in a way
648− # that 'zpool online -e' supports. Thus, we've implemented a
649− # bit of a strange approach of highlighting just devices.
650− # See: https://github.com/openzfs/zfs/issues/12505
651− script = let
652+ script = ''
652− # This UUID has been chosen at random and is to provide a
653− # collision-proof, predictable token to search for
654− magicIdentifier = "NIXOS-ZFS-ZPOOL-DEVICE-IDENTIFIER-37108bec-aff6-4b58-9e5e-53c7c9766f05";
655− zpoolScripts = pkgs.writeShellScriptBin "device-highlighter" ''
656− echo "${magicIdentifier}"
661 echo "Expanding all devices for $pool."
655 echo "Expanding all devices for $pool."
663− # Put our device-highlighter script it to the PATH
657+ ${pkgs.zpool-auto-expand-partitions}/bin/zpool_part_disks --automatically-grow "$pool"
664− export ZPOOL_SCRIPTS_PATH=${zpoolScripts}/bin
666− # Enable running our precisely specified zpool script as root
667− export ZPOOL_SCRIPTS_AS_ROOT=1
670− zpool status -c device-highlighter "$pool" \
671− | awk '($2 == "ONLINE" && $6 == "${magicIdentifier}") { print $1; }'
674− for device in $(devices); do
675− echo "Attempting to expand $device of $pool..."
676− if ! zpool online -e "$pool" "$device"; then
677− echo "Failed to expand '$device' of '$pool'."
@@ -701,8 +679,6 @@ in
701 RemainAfterExit = true;
679 RemainAfterExit = true;
704− path = [ pkgs.gawk cfgZfs.package ];
706 script = ''
682 script = ''
707 for pool in ${poolListProvider}; do
683 for pool in ${poolListProvider}; do
708 systemctl start --no-block "zpool-expand@$pool"
684 systemctl start --no-block "zpool-expand@$pool"
nixos/modules/tasks/lvm.nix+55−6
@@ -7,17 +7,22 @@ in {
7 options.services.lvm = {
7 options.services.lvm = {
8 package = mkOption {
8 package = mkOption {
9 type = types.package;
9 type = types.package;
10− default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2;
10+ default = pkgs.lvm2;
11 internal = true;
11 internal = true;
12 defaultText = literalExpression "pkgs.lvm2";
12 defaultText = literalExpression "pkgs.lvm2";
13 description = ''
13 description = ''
14 This option allows you to override the LVM package that's used on the system
14 This option allows you to override the LVM package that's used on the system
15 (udev rules, tmpfiles, systemd services).
15 (udev rules, tmpfiles, systemd services).
16− Defaults to pkgs.lvm2, or pkgs.lvm2_dmeventd if dmeventd is enabled.
16+ Defaults to pkgs.lvm2, pkgs.lvm2_dmeventd if dmeventd or pkgs.lvm2_vdo if vdo is enabled.
19 dmeventd.enable = mkEnableOption "the LVM dmevent daemon";
19 dmeventd.enable = mkEnableOption "the LVM dmevent daemon";
20 boot.thin.enable = mkEnableOption "support for booting from ThinLVs";
20 boot.thin.enable = mkEnableOption "support for booting from ThinLVs";
21+ boot.vdo.enable = mkEnableOption "support for booting from VDOLVs";
24+ options.boot.initrd.services.lvm.enable = (mkEnableOption "enable booting from LVM2 in the initrd") // {
23 config = mkMerge [
28 config = mkMerge [
@@ -30,8 +35,13 @@ in {
30 environment.systemPackages = [ cfg.package ];
35 environment.systemPackages = [ cfg.package ];
31 systemd.packages = [ cfg.package ];
36 systemd.packages = [ cfg.package ];
33− # TODO: update once https://github.com/NixOS/nixpkgs/pull/93006 was merged
34 services.udev.packages = [ cfg.package.out ];
38 services.udev.packages = [ cfg.package.out ];
40+ # We need lvm2 for the device-mapper rules
41+ boot.initrd.services.udev.packages = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
42+ # The device-mapper rules want to call tools from lvm2
43+ boot.initrd.systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
44+ boot.initrd.services.udev.binPackages = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
36 (mkIf cfg.dmeventd.enable {
46 (mkIf cfg.dmeventd.enable {
37 systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
47 systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
@@ -40,18 +50,21 @@ in {
40 environment.etc."lvm/lvm.conf".text = ''
50 environment.etc."lvm/lvm.conf".text = ''
41 dmeventd/executable = "${cfg.package}/bin/dmeventd"
51 dmeventd/executable = "${cfg.package}/bin/dmeventd"
53+ services.lvm.package = mkDefault pkgs.lvm2_dmeventd;
44 (mkIf cfg.boot.thin.enable {
55 (mkIf cfg.boot.thin.enable {
45 boot.initrd = {
56 boot.initrd = {
46 kernelModules = [ "dm-snapshot" "dm-thin-pool" ];
57 kernelModules = [ "dm-snapshot" "dm-thin-pool" ];
59+ systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ pkgs.thin-provisioning-tools ];
48− extraUtilsCommands = ''
61+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
49 for BIN in ${pkgs.thin-provisioning-tools}/bin/*; do
62 for BIN in ${pkgs.thin-provisioning-tools}/bin/*; do
50 copy_bin_and_libs $BIN
63 copy_bin_and_libs $BIN
54− extraUtilsCommandsTest = ''
67+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable) ''
55 ls ${pkgs.thin-provisioning-tools}/bin/ | grep -v pdata_tools | while read BIN; do
68 ls ${pkgs.thin-provisioning-tools}/bin/ | grep -v pdata_tools | while read BIN; do
56 $out/bin/$(basename $BIN) --help > /dev/null
69 $out/bin/$(basename $BIN) --help > /dev/null
@@ -61,9 +74,45 @@ in {
61 environment.etc."lvm/lvm.conf".text = concatMapStringsSep "\n"
74 environment.etc."lvm/lvm.conf".text = concatMapStringsSep "\n"
62 (bin: "global/${bin}_executable = ${pkgs.thin-provisioning-tools}/bin/${bin}")
75 (bin: "global/${bin}_executable = ${pkgs.thin-provisioning-tools}/bin/${bin}")
63 [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ];
76 [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ];
78+ environment.systemPackages = [ pkgs.thin-provisioning-tools ];
80+ (mkIf cfg.boot.vdo.enable {
83+ kernelModules = [ "kvdo" ];
85+ systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ pkgs.vdo ];
87+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable)''
88+ ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
89+ copy_bin_and_libs ${pkgs.vdo}/bin/$BIN
93+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable)''
94+ ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
95+ $out/bin/$(basename $BIN) --help > /dev/null
99+ extraModulePackages = [ config.boot.kernelPackages.kvdo ];
102+ services.lvm.package = mkOverride 999 pkgs.lvm2_vdo; # this overrides mkDefault
104+ environment.systemPackages = [ pkgs.vdo ];
65 (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
106 (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
66− boot.initrd.preLVMCommands = ''
107+ boot.initrd.systemd.contents."/etc/lvm/lvm.conf".text = optionalString (config.boot.initrd.services.lvm.enable && cfg.boot.thin.enable) (concatMapStringsSep "\n"
108+ (bin: "global/${bin}_executable = /bin/${bin}")
109+ [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ]
110+ ) + "\n" + optionalString cfg.dmeventd.enable ''
111+ dmeventd/executable = /bin/false
112+ activation/monitoring = 0
115+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) ''
67 mkdir -p /etc/lvm
116 mkdir -p /etc/lvm
68 cat << EOF >> /etc/lvm/lvm.conf
117 cat << EOF >> /etc/lvm/lvm.conf
69 ${optionalString cfg.boot.thin.enable (
118 ${optionalString cfg.boot.thin.enable (
nixos/modules/tasks/network-interfaces.nix+11−10
@@ -403,6 +403,15 @@ let
403 </itemizedlist>
403 </itemizedlist>
406+ hostidFile = pkgs.runCommand "gen-hostid" { preferLocalBuild = true; } ''
408+ ${if pkgs.stdenv.isBigEndian then ''
409+ echo -ne "\x''${hi:0:2}\x''${hi:2:2}\x''${hi:4:2}\x''${hi:6:2}" > $out
411+ echo -ne "\x''${hi:6:2}\x''${hi:4:2}\x''${hi:2:2}\x''${hi:0:2}" > $out
@@ -1383,16 +1392,8 @@ in
1383 domainname "${cfg.domain}"
1392 domainname "${cfg.domain}"
1386− environment.etc.hostid = mkIf (cfg.hostId != null)
1395+ environment.etc.hostid = mkIf (cfg.hostId != null) { source = hostidFile; };
1387− { source = pkgs.runCommand "gen-hostid" { preferLocalBuild = true; } ''
1396+ boot.initrd.systemd.contents."/etc/hostid" = mkIf (cfg.hostId != null) { source = hostidFile; };
1389− ${if pkgs.stdenv.isBigEndian then ''
1390− echo -ne "\x''${hi:0:2}\x''${hi:2:2}\x''${hi:4:2}\x''${hi:6:2}" > $out
1392− echo -ne "\x''${hi:6:2}\x''${hi:4:2}\x''${hi:2:2}\x''${hi:0:2}" > $out
1397 # static hostname configuration needed for hostnamectl and the
1398 # static hostname configuration needed for hostnamectl and the
1398 # org.freedesktop.hostname1 dbus service (both provided by systemd)
1399 # org.freedesktop.hostname1 dbus service (both provided by systemd)
nixos/modules/tasks/swraid.nix+35−9
@@ -1,17 +1,43 @@
1−{ pkgs, ... }:
1+{ config, pkgs, lib, ... }: let
3−{
3+ cfg = config.boot.initrd.services.swraid;
5− environment.systemPackages = [ pkgs.mdadm ];
5+in {
7− services.udev.packages = [ pkgs.mdadm ];
7+ options.boot.initrd.services.swraid = {
8+ enable = (lib.mkEnableOption "swraid support using mdadm") // {
9+ visible = false; # only has effect when the new stage 1 is in place
9− systemd.packages = [ pkgs.mdadm ];
12+ mdadmConf = lib.mkOption {
13+ description = "Contents of <filename>/etc/mdadm.conf</filename> in initrd.";
14+ type = lib.types.lines;
11− boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
19+ config = {
20+ environment.systemPackages = [ pkgs.mdadm ];
13− boot.initrd.extraUdevRulesCommands = ''
22+ services.udev.packages = [ pkgs.mdadm ];
14− cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
24+ systemd.packages = [ pkgs.mdadm ];
26+ boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> cfg.enable) [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
28+ boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
29+ cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
32+ boot.initrd.systemd = lib.mkIf cfg.enable {
33+ contents."/etc/mdadm.conf" = lib.mkIf (cfg.mdadmConf != "") {
34+ text = cfg.mdadmConf;
37+ packages = [ pkgs.mdadm ];
38+ initrdBin = [ pkgs.mdadm ];
41+ boot.initrd.services.udev.packages = lib.mkIf cfg.enable [ pkgs.mdadm ];
nixos/modules/testing/test-instrumentation.nix+19−26
@@ -65,33 +65,26 @@ in
68− boot.initrd.preDeviceCommands =
68+ boot.kernel.sysctl = {
70− echo 600 > /proc/sys/kernel/hung_task_timeout_secs
69+ "kernel.hung_task_timeout_secs" = 600;
73− boot.initrd.postDeviceCommands =
75− # Using acpi_pm as a clock source causes the guest clock to
76− # slow down under high host load. This is usually a bad
77− # thing, but for VM tests it should provide a bit more
78− # determinism (e.g. if the VM runs at lower speed, then
79− # timeouts in the VM should also be delayed).
80− echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
83− boot.postBootCommands =
85− # Panic on out-of-memory conditions rather than letting the
70+ # Panic on out-of-memory conditions rather than letting the
86− # OOM killer randomly get rid of processes, since this leads
71+ # OOM killer randomly get rid of processes, since this leads
87− # to failures that are hard to diagnose.
72+ # to failures that are hard to diagnose.
88− echo 2 > /proc/sys/vm/panic_on_oom
73+ "vm.panic_on_oom" = lib.mkDefault 2;
91− # Panic if an error occurs in stage 1 (rather than waiting for
92− # user intervention).
93− boot.kernelParams =
76+ boot.kernelParams = [
94− [ "console=${qemu-common.qemuSerialDevice}" "panic=1" "boot.panic_on_fail" ];
77+ "console=${qemu-common.qemuSerialDevice}"
78+ # Panic if an error occurs in stage 1 (rather than waiting for
79+ # user intervention).
80+ "panic=1" "boot.panic_on_fail"
81+ # Using acpi_pm as a clock source causes the guest clock to
82+ # slow down under high host load. This is usually a bad
83+ # thing, but for VM tests it should provide a bit more
84+ # determinism (e.g. if the VM runs at lower speed, then
85+ # timeouts in the VM should also be delayed).
96 # `xwininfo' is used by the test driver to query open windows.
89 # `xwininfo' is used by the test driver to query open windows.
97 environment.systemPackages = [ pkgs.xorg.xwininfo ];
90 environment.systemPackages = [ pkgs.xorg.xwininfo ];
nixos/modules/virtualisation/azure-common.nix+5−1
@@ -21,7 +21,11 @@ with lib;
21 # way to select them anyway.
21 # way to select them anyway.
22 boot.loader.grub.configurationLimit = 0;
22 boot.loader.grub.configurationLimit = 0;
24− fileSystems."/".device = "/dev/disk/by-label/nixos";
25+ device = "/dev/disk/by-label/nixos";
26 # Allow root logins only using the SSH key that the user specified
30 # Allow root logins only using the SSH key that the user specified
27 # at instance creation time, ping client connections to avoid timeouts
31 # at instance creation time, ping client connections to avoid timeouts
nixos/modules/virtualisation/libvirtd.nix+4
@@ -344,6 +344,10 @@ in
344 restartIfChanged = false;
344 restartIfChanged = false;
347+ systemd.services.virtchd = {
348+ path = [ pkgs.cloud-hypervisor ];
347 systemd.services.libvirt-guests = {
351 systemd.services.libvirt-guests = {
348 wantedBy = [ "multi-user.target" ];
352 wantedBy = [ "multi-user.target" ];
349 path = with pkgs; [ coreutils gawk cfg.package ];
353 path = with pkgs; [ coreutils gawk cfg.package ];
nixos/modules/virtualisation/nixos-containers.nix+26−11
@@ -4,6 +4,11 @@ with lib;
7+ configurationPrefix = optionalString (versionAtLeast config.system.stateVersion "22.05") "nixos-";
8+ configurationDirectoryName = "${configurationPrefix}containers";
9+ configurationDirectory = "/etc/${configurationDirectoryName}";
10+ stateDirectory = "/var/lib/${configurationPrefix}containers";
7 # The container's init script, a small wrapper around the regular
12 # The container's init script, a small wrapper around the regular
8 # NixOS stage-2 init script.
13 # NixOS stage-2 init script.
9 containerInit = (cfg:
14 containerInit = (cfg:
@@ -77,7 +82,7 @@ let
77 startScript = cfg:
82 startScript = cfg:
79 mkdir -p -m 0755 "$root/etc" "$root/var/lib"
84 mkdir -p -m 0755 "$root/etc" "$root/var/lib"
80− mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/containers
85+ mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/nixos-containers
81 if ! [ -e "$root/etc/os-release" ]; then
86 if ! [ -e "$root/etc/os-release" ]; then
82 touch "$root/etc/os-release"
87 touch "$root/etc/os-release"
@@ -249,11 +254,11 @@ let
250 SyslogIdentifier = "container %i";
255 SyslogIdentifier = "container %i";
252− EnvironmentFile = "-/etc/containers/%i.conf";
257+ EnvironmentFile = "-${configurationDirectory}/%i.conf";
254 Type = "notify";
259 Type = "notify";
256− RuntimeDirectory = lib.optional cfg.ephemeral "containers/%i";
261+ RuntimeDirectory = lib.optional cfg.ephemeral "${configurationDirectoryName}/%i";
258 # Note that on reboot, systemd-nspawn returns 133, so this
263 # Note that on reboot, systemd-nspawn returns 133, so this
259 # unit will be restarted. On poweroff, it returns 0, so the
264 # unit will be restarted. On poweroff, it returns 0, so the
@@ -737,15 +742,21 @@ in
738 config = mkIf (config.boot.enableContainers) (let
743 config = mkIf (config.boot.enableContainers) (let
745+ warnings = flatten [
746+ (optional (config.virtualisation.containers.enable && versionOlder config.system.stateVersion "22.05") ''
747+ Enabling both boot.enableContainers & virtualisation.containers on system.stateVersion < 22.05 is unsupported.
741 description = "Container '%i'";
752 description = "Container '%i'";
743− unitConfig.RequiresMountsFor = "/var/lib/containers/%i";
754+ unitConfig.RequiresMountsFor = "${stateDirectory}/%i";
745 path = [ pkgs.iproute2 ];
756 path = [ pkgs.iproute2 ];
747 environment = {
758 environment = {
748− root = "/var/lib/containers/%i";
759+ root = "${stateDirectory}/%i";
749 INSTANCE = "%i";
760 INSTANCE = "%i";
@@ -782,8 +793,8 @@ in
782 script = startScript containerConfig;
793 script = startScript containerConfig;
783 postStart = postStartScript containerConfig;
794 postStart = postStartScript containerConfig;
784 serviceConfig = serviceDirectives containerConfig;
795 serviceConfig = serviceDirectives containerConfig;
785− unitConfig.RequiresMountsFor = lib.optional (!containerConfig.ephemeral) "/var/lib/containers/%i";
796+ unitConfig.RequiresMountsFor = lib.optional (!containerConfig.ephemeral) "${stateDirectory}/%i";
786− environment.root = if containerConfig.ephemeral then "/run/containers/%i" else "/var/lib/containers/%i";
797+ environment.root = if containerConfig.ephemeral then "/run/nixos-containers/%i" else "${stateDirectory}/%i";
788 if containerConfig.autoStart then
799 if containerConfig.autoStart then
@@ -792,7 +803,7 @@ in
792 after = [ "network.target" ];
803 after = [ "network.target" ];
793 restartTriggers = [
804 restartTriggers = [
794 containerConfig.path
805 containerConfig.path
795− config.environment.etc."containers/${name}.conf".source
806+ config.environment.etc."${configurationDirectoryName}/${name}.conf".source
797 restartIfChanged = true;
808 restartIfChanged = true;
@@ -800,12 +811,12 @@ in
800 )) config.containers)
811 )) config.containers)
803− # Generate a configuration file in /etc/containers for each
814+ # Generate a configuration file in /etc/nixos-containers for each
804 # container so that container@.target can get the container
815 # container so that container@.target can get the container
805 # configuration.
816 # configuration.
806 environment.etc =
817 environment.etc =
807 let mkPortStr = p: p.protocol + ":" + (toString p.hostPort) + ":" + (if p.containerPort == null then toString p.hostPort else toString p.containerPort);
818 let mkPortStr = p: p.protocol + ":" + (toString p.hostPort) + ":" + (if p.containerPort == null then toString p.hostPort else toString p.containerPort);
808− in mapAttrs' (name: cfg: nameValuePair "containers/${name}.conf"
819+ in mapAttrs' (name: cfg: nameValuePair "${configurationDirectoryName}/${name}.conf"
811 SYSTEM_PATH=${cfg.path}
822 SYSTEM_PATH=${cfg.path}
@@ -854,7 +865,11 @@ in
854 ENV{INTERFACE}=="v[eb]-*", ENV{NM_UNMANAGED}="1"
865 ENV{INTERFACE}=="v[eb]-*", ENV{NM_UNMANAGED}="1"
857− environment.systemPackages = [ pkgs.nixos-container ];
868+ environment.systemPackages = [
869+ (pkgs.nixos-container.override {
870+ inherit stateDirectory configurationDirectory;
859 boot.kernelModules = [
874 boot.kernelModules = [
nixos/modules/virtualisation/oci-containers.nix+1−5
@@ -338,11 +338,7 @@ in {
339 backend = mkOption {
339 backend = mkOption {
340 type = types.enum [ "podman" "docker" ];
340 type = types.enum [ "podman" "docker" ];
342− # TODO: Once https://github.com/NixOS/nixpkgs/issues/77925 is resolved default to podman
343− # if versionAtLeast config.system.stateVersion "20.09" then "podman"
341+ default = if versionAtLeast config.system.stateVersion "22.05" then "podman" else "docker";
346 description = "The underlying Docker implementation to use.";
342 description = "The underlying Docker implementation to use.";
nixos/modules/virtualisation/openstack-config.nix+39−7
@@ -1,8 +1,11 @@
1−{ pkgs, lib, ... }:
1+{ config, pkgs, lib, ... }:
3−with lib;
3+# image metadata:
4+# hw_firmware_type=uefi
7+ inherit (lib) mkIf mkDefault;
8+ cfg = config.openstack;
6 metadataFetcher = import ./openstack-metadata-fetcher.nix {
9 metadataFetcher = import ./openstack-metadata-fetcher.nix {
7 targetRoot = "/";
10 targetRoot = "/";
8 wgetExtraOptions = "--retry-connrefused";
11 wgetExtraOptions = "--retry-connrefused";
@@ -11,23 +14,47 @@ in
12 imports = [
15 imports = [
13 ../profiles/qemu-guest.nix
16 ../profiles/qemu-guest.nix
18+ # Note: While we do use the headless profile, we also explicitly
19+ # turn on the serial console on tty1 below.
20+ # Note that I could not find any documentation indicating tty1 was
21+ # the correct choice. I picked tty1 because that is what one
22+ # particular host was using.
14 ../profiles/headless.nix
23 ../profiles/headless.nix
15 # The Openstack Metadata service exposes data on an EC2 API also.
25 # The Openstack Metadata service exposes data on an EC2 API also.
16 ./ec2-data.nix
26 ./ec2-data.nix
17 ./amazon-init.nix
27 ./amazon-init.nix
20 config = {
30 config = {
21− fileSystems."/" = {
31+ fileSystems."/" = mkIf (!cfg.zfs.enable) {
22 device = "/dev/disk/by-label/nixos";
32 device = "/dev/disk/by-label/nixos";
23 fsType = "ext4";
33 fsType = "ext4";
24 autoResize = true;
34 autoResize = true;
37+ fileSystems."/boot" = mkIf (cfg.efi || cfg.zfs.enable) {
38+ # The ZFS image uses a partition labeled ESP whether or not we're
40+ device = "/dev/disk/by-label/ESP";
27 boot.growPartition = true;
44 boot.growPartition = true;
28− boot.kernelParams = [ "console=ttyS0" ];
45+ boot.kernelParams = [ "console=tty1" ];
29− boot.loader.grub.device = "/dev/vda";
46+ boot.loader.grub.device = if (!cfg.efi) then "/dev/vda" else "nodev";
47+ boot.loader.grub.efiSupport = cfg.efi;
48+ boot.loader.grub.efiInstallAsRemovable = cfg.efi;
30− boot.loader.timeout = 0;
49+ boot.loader.timeout = 1;
50+ boot.loader.grub.extraConfig = ''
51+ serial --unit=1 --speed=115200 --word=8 --parity=no --stop=1
52+ terminal_output console serial
53+ terminal_input console serial
56+ services.zfs.expandOnBoot = mkIf cfg.zfs.enable (lib.mkDefault "all");
57+ boot.zfs.devNodes = mkIf cfg.zfs.enable "/dev/";
32 # Allow root logins
59 # Allow root logins
33 services.openssh = {
60 services.openssh = {
@@ -36,6 +63,11 @@ in
36 passwordAuthentication = mkDefault false;
63 passwordAuthentication = mkDefault false;
66+ users.users.root.initialPassword = "foobar";
68+ # Enable the serial console on tty1
69+ systemd.services."serial-getty@tty1".enable = true;
39 # Force getting the hostname from Openstack metadata.
71 # Force getting the hostname from Openstack metadata.
40 networking.hostName = mkDefault "";
72 networking.hostName = mkDefault "";
@@ -43,7 +75,7 @@ in
43 path = [ pkgs.wget ];
75 path = [ pkgs.wget ];
44 description = "Fetch Metadata on startup";
76 description = "Fetch Metadata on startup";
45 wantedBy = [ "multi-user.target" ];
77 wantedBy = [ "multi-user.target" ];
46− before = [ "apply-ec2-data.service" "amazon-init.service"];
78+ before = [ "apply-ec2-data.service" "amazon-init.service" ];
47 wants = [ "network-online.target" ];
79 wants = [ "network-online.target" ];
48 after = [ "network-online.target" ];
80 after = [ "network-online.target" ];
49 script = metadataFetcher;
81 script = metadataFetcher;
nixos/modules/virtualisation/openstack-metadata-fetcher.nix+3−3
@@ -14,9 +14,9 @@
14 wget ${wgetExtraOptions} "$@"
14 wget ${wgetExtraOptions} "$@"
17− wget_imds -O "$metaDir/ami-manifest-path" http://169.254.169.254/1.0/meta-data/ami-manifest-path
17+ wget_imds -O "$metaDir/ami-manifest-path" http://169.254.169.254/1.0/meta-data/ami-manifest-path || true
18 # When no user-data is provided, the OpenStack metadata server doesn't expose the user-data route.
18 # When no user-data is provided, the OpenStack metadata server doesn't expose the user-data route.
19 (umask 077 && wget_imds -O "$metaDir/user-data" http://169.254.169.254/1.0/user-data || rm -f "$metaDir/user-data")
19 (umask 077 && wget_imds -O "$metaDir/user-data" http://169.254.169.254/1.0/user-data || rm -f "$metaDir/user-data")
20− wget_imds -O "$metaDir/hostname" http://169.254.169.254/1.0/meta-data/hostname
20+ wget_imds -O "$metaDir/hostname" http://169.254.169.254/1.0/meta-data/hostname || true
21− wget_imds -O "$metaDir/public-keys-0-openssh-key" http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
21+ wget_imds -O "$metaDir/public-keys-0-openssh-key" http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key || true
nixos/modules/virtualisation/openstack-options.nixnew file+71
@@ -0,0 +1,71 @@
1+{ config, lib, pkgs, ... }:
3+ inherit (lib) literalExpression types;
9+ enable = lib.mkOption {
13+ Whether the OpenStack instance uses a ZFS root.
17+ datasets = lib.mkOption {
19+ Datasets to create under the `tank` and `boot` zpools.
21+ **NOTE:** This option is used only at image creation time, and
22+ does not attempt to declaratively create or manage datasets
23+ on an existing system.
28+ type = types.attrsOf (types.submodule {
30+ mount = lib.mkOption {
31+ description = "Where to mount this dataset.";
32+ type = types.nullOr types.string;
36+ properties = lib.mkOption {
37+ description = "Properties to set on this dataset.";
38+ type = types.attrsOf types.string;
47+ default = pkgs.stdenv.hostPlatform.isAarch64;
48+ defaultText = literalExpression "pkgs.stdenv.hostPlatform.isAarch64";
51+ Whether the instance is using EFI.
57+ config = lib.mkIf config.openstack.zfs.enable {
58+ networking.hostId = lib.mkDefault "00000000";
62+ mountable = lib.filterAttrs (_: value: ((value.mount or null) != null)) config.openstack.zfs.datasets;
65+ (dataset: opts: lib.nameValuePair opts.mount {
nixos/modules/virtualisation/qemu-vm.nix+38−5
@@ -754,13 +754,13 @@ in
755 boot.loader.grub.gfxmodeBios = with cfg.resolution; "${toString x}x${toString y}";
755 boot.loader.grub.gfxmodeBios = with cfg.resolution; "${toString x}x${toString y}";
757− boot.initrd.extraUtilsCommands =
757+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
759 # We need mke2fs in the initrd.
759 # We need mke2fs in the initrd.
760 copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
760 copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
763− boot.initrd.postDeviceCommands =
763+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
765 # If the disk image appears to be empty, run mke2fs to
765 # If the disk image appears to be empty, run mke2fs to
766 # initialise.
766 # initialise.
@@ -770,7 +770,7 @@ in
773− boot.initrd.postMountCommands =
773+ boot.initrd.postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
775 # Mark this as a NixOS machine.
775 # Mark this as a NixOS machine.
776 mkdir -p $targetRoot/etc
776 mkdir -p $targetRoot/etc
@@ -789,6 +789,11 @@ in
792+ systemd.tmpfiles.rules = lib.mkIf config.boot.initrd.systemd.enable [
793+ "f /etc/NIXOS 0644 root root -"
794+ "d /boot 0644 root root -"
792 # After booting, register the closure of the paths in
797 # After booting, register the closure of the paths in
793 # `virtualisation.additionalPaths' in the Nix database in the VM. This
798 # `virtualisation.additionalPaths' in the Nix database in the VM. This
794 # allows Nix operations to work in the VM. The path to the
799 # allows Nix operations to work in the VM. The path to the
@@ -853,8 +858,12 @@ in
853 (mkIf (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64) [
858 (mkIf (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64) [
854 "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet"
859 "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet"
862+ alphaNumericChars = lowerChars ++ upperChars ++ (map toString (range 0 9));
863+ # Replace all non-alphanumeric characters with underscores
864+ sanitizeShellIdent = s: concatMapStrings (c: if builtins.elem c alphaNumericChars then c else "_") (stringToCharacters s);
856− (mkIf (!cfg.useBootLoader) [
865+ in mkIf (!cfg.useBootLoader) [
857− "-kernel ${config.system.build.toplevel}/kernel"
866+ "-kernel \${NIXPKGS_QEMU_KERNEL_${sanitizeShellIdent config.system.name}:-${config.system.build.toplevel}/kernel}"
858 "-initrd ${config.system.build.toplevel}/initrd"
867 "-initrd ${config.system.build.toplevel}/initrd"
859 ''-append "$(cat ${config.system.build.toplevel}/kernel-params) init=${config.system.build.toplevel}/init regInfo=${regInfo}/registration ${consoles} $QEMU_KERNEL_PARAMS"''
868 ''-append "$(cat ${config.system.build.toplevel}/kernel-params) init=${config.system.build.toplevel}/init regInfo=${regInfo}/registration ${consoles} $QEMU_KERNEL_PARAMS"''
@@ -923,6 +932,8 @@ in
923 mkVMOverride (cfg.fileSystems //
932 mkVMOverride (cfg.fileSystems //
925 "/".device = cfg.bootDevice;
934 "/".device = cfg.bootDevice;
935+ "/".fsType = "ext4";
936+ "/".autoFormat = true;
927 "/tmp" = mkIf config.boot.tmpOnTmpfs
938 "/tmp" = mkIf config.boot.tmpOnTmpfs
928 { device = "tmpfs";
939 { device = "tmpfs";
@@ -953,6 +964,28 @@ in
954 } // lib.mapAttrs' mkSharedDir cfg.sharedDirectories);
965 } // lib.mapAttrs' mkSharedDir cfg.sharedDirectories);
967+ boot.initrd.systemd = lib.mkIf (config.boot.initrd.systemd.enable && cfg.writableStore) {
969+ where = "/sysroot/nix/store";
972+ options = "lowerdir=/sysroot/nix/.ro-store,upperdir=/sysroot/nix/.rw-store/store,workdir=/sysroot/nix/.rw-store/work";
973+ wantedBy = ["local-fs.target"];
974+ before = ["local-fs.target"];
975+ requires = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
976+ after = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
977+ unitConfig.IgnoreOnIsolate = true;
979+ services.rw-store = {
980+ after = ["sysroot-nix-.rw\\x2dstore.mount"];
981+ unitConfig.DefaultDependencies = false;
984+ ExecStart = "/bin/mkdir -p 0755 /sysroot/nix/.rw-store/store /sysroot/nix/.rw-store/work /sysroot/nix/store";
956 swapDevices = mkVMOverride [ ];
989 swapDevices = mkVMOverride [ ];
957 boot.initrd.luks.devices = mkVMOverride {};
990 boot.initrd.luks.devices = mkVMOverride {};
nixos/modules/virtualisation/vmware-host.nixnew file+166
@@ -0,0 +1,166 @@
1+{ config, pkgs, lib, ... }:
4+ cfg = config.virtualisation.vmware.host;
5+ wrapperDir = "/run/vmware/bin"; # Perfectly fits as /usr/local/bin
6+ parentWrapperDir = dirOf wrapperDir;
7+ vmwareWrappers = # Needed as hardcoded paths workaround
11+ ln -s "${config.security.wrapperDir}/${program}" $wrapperDir/${program}
15+ (mkVmwareSymlink "pkexec")
16+ (mkVmwareSymlink "mount")
17+ (mkVmwareSymlink "umount")
21+ options = with lib; {
22+ virtualisation.vmware.host = {
23+ enable = mkEnableOption "VMware" // {
25+ This enables VMware host virtualisation for running VMs.
28+ <literal>vmware-vmx</literal> will cause kcompactd0 due to
29+ <literal>Transparent Hugepages</literal> feature in kernel.
30+ Apply <literal>[ "transparent_hugepage=never" ]</literal> in
31+ option <option>boot.kernelParams</option> to disable them.
35+ If that didn't work disable <literal>TRANSPARENT_HUGEPAGE</literal>,
36+ <literal>COMPACTION</literal> configs and recompile kernel.
41+ type = types.package;
42+ default = pkgs.vmware-workstation;
43+ defaultText = literalExpression "pkgs.vmware-workstation";
44+ description = "VMware host virtualisation package to use";
46+ extraPackages = mkOption {
47+ type = with types; listOf package;
48+ default = with pkgs; [ ];
49+ description = "Extra packages to be used with VMware host.";
50+ example = "with pkgs; [ ntfs3g ]";
52+ extraConfig = mkOption {
55+ description = "Add extra config to /etc/vmware/config";
57+ # Allow unsupported device's OpenGL and Vulkan acceleration for guest vGPU
58+ mks.gl.allowUnsupportedDrivers = "TRUE"
59+ mks.vk.allowUnsupportedDevices = "TRUE"
65+ config = lib.mkIf cfg.enable {
66+ boot.extraModulePackages = [ config.boot.kernelPackages.vmware ];
67+ boot.extraModprobeConfig = "alias char-major-10-229 fuse";
68+ boot.kernelModules = [ "vmw_pvscsi" "vmw_vmci" "vmmon" "vmnet" "fuse" ];
70+ environment.systemPackages = [ cfg.package ] ++ cfg.extraPackages;
71+ services.printing.drivers = [ cfg.package ];
73+ environment.etc."vmware/config".text = ''
74+ ${builtins.readFile "${cfg.package}/etc/vmware/config"}
78+ environment.etc."vmware/bootstrap".source = "${cfg.package}/etc/vmware/bootstrap";
79+ environment.etc."vmware/icu".source = "${cfg.package}/etc/vmware/icu";
80+ environment.etc."vmware-installer".source = "${cfg.package}/etc/vmware-installer";
84+ security.wrappers = {
89+ source = "${cfg.package}/lib/vmware/bin/.vmware-vmx-wrapped";
93+ ###### wrappers activation script
95+ system.activationScripts.vmwareWrappers =
96+ lib.stringAfter [ "specialfs" "users" ]
98+ mkdir -p "${parentWrapperDir}"
99+ chmod 755 "${parentWrapperDir}"
100+ # We want to place the tmpdirs for the wrappers to the parent dir.
101+ wrapperDir=$(mktemp --directory --tmpdir="${parentWrapperDir}" wrappers.XXXXXXXXXX)
102+ chmod a+rx "$wrapperDir"
103+ ${lib.concatStringsSep "\n" (vmwareWrappers)}
104+ if [ -L ${wrapperDir} ]; then
105+ # Atomically replace the symlink
106+ # See https://axialcorps.com/2013/07/03/atomically-replacing-files-and-directories/
107+ old=$(readlink -f ${wrapperDir})
108+ if [ -e "${wrapperDir}-tmp" ]; then
109+ rm --force --recursive "${wrapperDir}-tmp"
111+ ln --symbolic --force --no-dereference "$wrapperDir" "${wrapperDir}-tmp"
112+ mv --no-target-directory "${wrapperDir}-tmp" "${wrapperDir}"
113+ rm --force --recursive "$old"
116+ ln --symbolic "$wrapperDir" "${wrapperDir}"
122+ systemd.services."vmware-authdlauncher" = {
123+ description = "VMware Authentification Daemon";
126+ ExecStart = [ "${cfg.package}/bin/vmware-authdlauncher" ];
128+ wantedBy = [ "multi-user.target" ];
131+ systemd.services."vmware-networks-configuration" = {
132+ description = "VMware Networks Configuration Generation";
133+ unitConfig.ConditionPathExists = "!/etc/vmware/networking";
137+ "${cfg.package}/bin/vmware-networks --postinstall vmware-player,0,1"
140+ RemainAfterExit = "yes";
142+ wantedBy = [ "multi-user.target" ];
145+ systemd.services."vmware-networks" = {
146+ description = "VMware Networks";
147+ after = [ "vmware-networks-configuration.service" ];
148+ requires = [ "vmware-networks-configuration.service" ];
151+ ExecCondition = [ "${pkgs.kmod}/bin/modprobe vmnet" ];
152+ ExecStart = [ "${cfg.package}/bin/vmware-networks --start" ];
153+ ExecStop = [ "${cfg.package}/bin/vmware-networks --stop" ];
155+ wantedBy = [ "multi-user.target" ];
158+ systemd.services."vmware-usbarbitrator" = {
159+ description = "VMware USB Arbitrator";
161+ ExecStart = [ "${cfg.package}/bin/vmware-usbarbitrator -f" ];
163+ wantedBy = [ "multi-user.target" ];
nixos/release-combined.nix+2
@@ -132,12 +132,14 @@ in rec {
132 # fails with kernel >= 5.15 https://github.com/NixOS/nixpkgs/pull/152505#issuecomment-1005049314
132 # fails with kernel >= 5.15 https://github.com/NixOS/nixpkgs/pull/152505#issuecomment-1005049314
133 #(onFullSupported "nixos.tests.nfs3.simple")
133 #(onFullSupported "nixos.tests.nfs3.simple")
134 (onFullSupported "nixos.tests.nfs4.simple")
134 (onFullSupported "nixos.tests.nfs4.simple")
135+ (onSystems ["x86_64-linux"] "nixos.tests.oci-containers.podman")
135 (onFullSupported "nixos.tests.openssh")
136 (onFullSupported "nixos.tests.openssh")
136 (onFullSupported "nixos.tests.pantheon")
137 (onFullSupported "nixos.tests.pantheon")
137 (onFullSupported "nixos.tests.php.fpm")
138 (onFullSupported "nixos.tests.php.fpm")
138 (onFullSupported "nixos.tests.php.httpd")
139 (onFullSupported "nixos.tests.php.httpd")
139 (onFullSupported "nixos.tests.php.pcre")
140 (onFullSupported "nixos.tests.php.pcre")
140 (onFullSupported "nixos.tests.plasma5")
141 (onFullSupported "nixos.tests.plasma5")
142+ (onSystems ["x86_64-linux"] "nixos.tests.podman")
141 (onFullSupported "nixos.tests.predictable-interface-names.predictableNetworkd")
143 (onFullSupported "nixos.tests.predictable-interface-names.predictableNetworkd")
142 (onFullSupported "nixos.tests.predictable-interface-names.predictable")
144 (onFullSupported "nixos.tests.predictable-interface-names.predictable")
143 (onFullSupported "nixos.tests.predictable-interface-names.unpredictableNetworkd")
145 (onFullSupported "nixos.tests.predictable-interface-names.unpredictableNetworkd")
@@ -150,13 +150,13 @@ in rec {
152 iso_plasma5 = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
152 iso_plasma5 = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
153− module = ./modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix;
153+ module = ./modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nix;
154 type = "plasma5";
154 type = "plasma5";
155 inherit system;
155 inherit system;
158 iso_gnome = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
158 iso_gnome = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
159− module = ./modules/installer/cd-dvd/installation-cd-graphical-gnome.nix;
159+ module = ./modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix;
160 type = "gnome";
160 type = "gnome";
161 inherit system;
161 inherit system;
nixos/tests/all-terminfo.nixnew file+31
@@ -0,0 +1,31 @@
1+import ./make-test-python.nix ({ pkgs, ... }: rec {
2+ name = "all-terminfo";
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ jkarlson ];
7+ nodes.machine = { pkgs, config, lib, ... }:
9+ infoFilter = name: drv:
11+ o = builtins.tryEval drv;
13+ o.success && lib.isDerivation o.value && o.value ? outputs && builtins.elem "terminfo" o.value.outputs;
14+ terminfos = lib.filterAttrs infoFilter pkgs;
15+ excludedTerminfos = lib.filterAttrs (_: drv: !(builtins.elem drv.terminfo config.environment.systemPackages)) terminfos;
16+ includedOuts = lib.filterAttrs (_: drv: builtins.elem drv.out config.environment.systemPackages) terminfos;
20+ enableAllTerminfo = true;
21+ etc."terminfo-missing".text = builtins.concatStringsSep "\n" (builtins.attrNames excludedTerminfos);
22+ etc."terminfo-extra-outs".text = builtins.concatStringsSep "\n" (builtins.attrNames includedOuts);
28+ machine.fail("grep . /etc/terminfo-missing >&2")
29+ machine.fail("grep . /etc/terminfo-extra-outs >&2")
nixos/tests/all-tests.nix+21−3
@@ -35,6 +35,7 @@ in
35 agate = handleTest ./web-servers/agate.nix {};
35 agate = handleTest ./web-servers/agate.nix {};
36 agda = handleTest ./agda.nix {};
36 agda = handleTest ./agda.nix {};
37 airsonic = handleTest ./airsonic.nix {};
37 airsonic = handleTest ./airsonic.nix {};
38+ allTerminfo = handleTest ./all-terminfo.nix {};
38 amazon-init-shell = handleTest ./amazon-init-shell.nix {};
39 amazon-init-shell = handleTest ./amazon-init-shell.nix {};
39 apfs = handleTest ./apfs.nix {};
40 apfs = handleTest ./apfs.nix {};
40 apparmor = handleTest ./apparmor.nix {};
41 apparmor = handleTest ./apparmor.nix {};
@@ -142,6 +143,7 @@ in
142 engelsystem = handleTest ./engelsystem.nix {};
143 engelsystem = handleTest ./engelsystem.nix {};
143 enlightenment = handleTest ./enlightenment.nix {};
144 enlightenment = handleTest ./enlightenment.nix {};
144 env = handleTest ./env.nix {};
145 env = handleTest ./env.nix {};
146+ envoy = handleTest ./envoy.nix {};
145 ergo = handleTest ./ergo.nix {};
147 ergo = handleTest ./ergo.nix {};
146 ergochat = handleTest ./ergochat.nix {};
148 ergochat = handleTest ./ergochat.nix {};
147 etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
149 etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
@@ -194,8 +196,12 @@ in
194 hadoop_3_2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop_3_2; };
196 hadoop_3_2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop_3_2; };
195 hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
197 hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
196 haka = handleTest ./haka.nix {};
198 haka = handleTest ./haka.nix {};
199+ haste-server = handleTest ./haste-server.nix {};
197 haproxy = handleTest ./haproxy.nix {};
200 haproxy = handleTest ./haproxy.nix {};
198 hardened = handleTest ./hardened.nix {};
201 hardened = handleTest ./hardened.nix {};
202+ hbase1 = handleTest ./hbase.nix { package=pkgs.hbase1; };
203+ hbase2 = handleTest ./hbase.nix { package=pkgs.hbase2; };
204+ hbase3 = handleTest ./hbase.nix { package=pkgs.hbase3; };
199 hedgedoc = handleTest ./hedgedoc.nix {};
205 hedgedoc = handleTest ./hedgedoc.nix {};
200 herbstluftwm = handleTest ./herbstluftwm.nix {};
206 herbstluftwm = handleTest ./herbstluftwm.nix {};
201 installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
207 installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
@@ -206,6 +212,7 @@ in
206 # hibernation. This test happens to work on x86_64-linux but
212 # hibernation. This test happens to work on x86_64-linux but
207 # not on other platforms.
213 # not on other platforms.
208 hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
214 hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
215+ hibernate-systemd-stage-1 = handleTestOn ["x86_64-linux"] ./hibernate.nix { systemdStage1 = true; };
209 hitch = handleTest ./hitch {};
216 hitch = handleTest ./hitch {};
210 hledger-web = handleTest ./hledger-web.nix {};
217 hledger-web = handleTest ./hledger-web.nix {};
211 hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
218 hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
@@ -228,6 +235,7 @@ in
228 input-remapper = handleTest ./input-remapper.nix {};
235 input-remapper = handleTest ./input-remapper.nix {};
229 inspircd = handleTest ./inspircd.nix {};
236 inspircd = handleTest ./inspircd.nix {};
230 installer = handleTest ./installer.nix {};
237 installer = handleTest ./installer.nix {};
238+ installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
231 invoiceplane = handleTest ./invoiceplane.nix {};
239 invoiceplane = handleTest ./invoiceplane.nix {};
232 iodine = handleTest ./iodine.nix {};
240 iodine = handleTest ./iodine.nix {};
233 ipfs = handleTest ./ipfs.nix {};
241 ipfs = handleTest ./ipfs.nix {};
@@ -274,8 +282,8 @@ in
274 login = handleTest ./login.nix {};
282 login = handleTest ./login.nix {};
275 logrotate = handleTest ./logrotate.nix {};
283 logrotate = handleTest ./logrotate.nix {};
276 loki = handleTest ./loki.nix {};
284 loki = handleTest ./loki.nix {};
285+ lvm2 = handleTest ./lvm2 {};
277 lxd = handleTest ./lxd.nix {};
286 lxd = handleTest ./lxd.nix {};
278− lxd-image = handleTest ./lxd-image.nix {};
279 lxd-nftables = handleTest ./lxd-nftables.nix {};
287 lxd-nftables = handleTest ./lxd-nftables.nix {};
280 lxd-image-server = handleTest ./lxd-image-server.nix {};
288 lxd-image-server = handleTest ./lxd-image-server.nix {};
281 #logstash = handleTest ./logstash.nix {};
289 #logstash = handleTest ./logstash.nix {};
@@ -360,8 +368,9 @@ in
360 nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
368 nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
361 nginx-sso = handleTest ./nginx-sso.nix {};
369 nginx-sso = handleTest ./nginx-sso.nix {};
362 nginx-variants = handleTest ./nginx-variants.nix {};
370 nginx-variants = handleTest ./nginx-variants.nix {};
371+ nifi = handleTestOn ["x86_64-linux"] ./web-apps/nifi.nix {};
363 nitter = handleTest ./nitter.nix {};
372 nitter = handleTest ./nitter.nix {};
364− nix-ld = handleTest ./nix-ld {};
373+ nix-ld = handleTest ./nix-ld.nix {};
365 nix-serve = handleTest ./nix-serve.nix {};
374 nix-serve = handleTest ./nix-serve.nix {};
366 nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
375 nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
367 nixops = handleTest ./nixops/default.nix {};
376 nixops = handleTest ./nixops/default.nix {};
@@ -396,9 +405,10 @@ in
396 pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
405 pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
397 pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
406 pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
398 pam-u2f = handleTest ./pam/pam-u2f.nix {};
407 pam-u2f = handleTest ./pam/pam-u2f.nix {};
408+ pam-ussh = handleTest ./pam/pam-ussh.nix {};
399 pantalaimon = handleTest ./matrix/pantalaimon.nix {};
409 pantalaimon = handleTest ./matrix/pantalaimon.nix {};
400 pantheon = handleTest ./pantheon.nix {};
410 pantheon = handleTest ./pantheon.nix {};
401− paperless-ng = handleTest ./paperless-ng.nix {};
411+ paperless = handleTest ./paperless.nix {};
402 parsedmarc = handleTest ./parsedmarc {};
412 parsedmarc = handleTest ./parsedmarc {};
403 pdns-recursor = handleTest ./pdns-recursor.nix {};
413 pdns-recursor = handleTest ./pdns-recursor.nix {};
404 peerflix = handleTest ./peerflix.nix {};
414 peerflix = handleTest ./peerflix.nix {};
@@ -514,6 +524,12 @@ in
514 systemd-confinement = handleTest ./systemd-confinement.nix {};
524 systemd-confinement = handleTest ./systemd-confinement.nix {};
515 systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
525 systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
516 systemd-escaping = handleTest ./systemd-escaping.nix {};
526 systemd-escaping = handleTest ./systemd-escaping.nix {};
527+ systemd-initrd-btrfs-raid = handleTest ./systemd-initrd-btrfs-raid.nix {};
528+ systemd-initrd-luks-keyfile = handleTest ./systemd-initrd-luks-keyfile.nix {};
529+ systemd-initrd-luks-password = handleTest ./systemd-initrd-luks-password.nix {};
530+ systemd-initrd-shutdown = handleTest ./systemd-shutdown.nix { systemdStage1 = true; };
531+ systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
532+ systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {};
517 systemd-journal = handleTest ./systemd-journal.nix {};
533 systemd-journal = handleTest ./systemd-journal.nix {};
518 systemd-machinectl = handleTest ./systemd-machinectl.nix {};
534 systemd-machinectl = handleTest ./systemd-machinectl.nix {};
519 systemd-networkd = handleTest ./systemd-networkd.nix {};
535 systemd-networkd = handleTest ./systemd-networkd.nix {};
@@ -522,6 +538,7 @@ in
522 systemd-networkd-ipv6-prefix-delegation = handleTest ./systemd-networkd-ipv6-prefix-delegation.nix {};
538 systemd-networkd-ipv6-prefix-delegation = handleTest ./systemd-networkd-ipv6-prefix-delegation.nix {};
523 systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
539 systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
524 systemd-nspawn = handleTest ./systemd-nspawn.nix {};
540 systemd-nspawn = handleTest ./systemd-nspawn.nix {};
541+ systemd-shutdown = handleTest ./systemd-shutdown.nix {};
525 systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
542 systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
526 systemd-misc = handleTest ./systemd-misc.nix {};
543 systemd-misc = handleTest ./systemd-misc.nix {};
527 taskserver = handleTest ./taskserver.nix {};
544 taskserver = handleTest ./taskserver.nix {};
@@ -582,6 +599,7 @@ in
582 xautolock = handleTest ./xautolock.nix {};
599 xautolock = handleTest ./xautolock.nix {};
583 xfce = handleTest ./xfce.nix {};
600 xfce = handleTest ./xfce.nix {};
584 xmonad = handleTest ./xmonad.nix {};
601 xmonad = handleTest ./xmonad.nix {};
602+ xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
585 xrdp = handleTest ./xrdp.nix {};
603 xrdp = handleTest ./xrdp.nix {};
586 xss-lock = handleTest ./xss-lock.nix {};
604 xss-lock = handleTest ./xss-lock.nix {};
587 xterm = handleTest ./xterm.nix {};
605 xterm = handleTest ./xterm.nix {};
@@ -182,10 +182,6 @@ in
182 atopgpu = makeTest {
182 atopgpu = makeTest {
183 name = "atop-atopgpu";
183 name = "atop-atopgpu";
184 nodes.machine = {
184 nodes.machine = {
185− nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) [
189 programs.atop = {
185 programs.atop = {
190 enable = true;
186 enable = true;
191 atopgpu.enable = true;
187 atopgpu.enable = true;
@@ -205,10 +201,6 @@ in
205 everything = makeTest {
201 everything = makeTest {
206 name = "atop-everthing";
202 name = "atop-everthing";
207 nodes.machine = {
203 nodes.machine = {
208− nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) [
212 programs.atop = {
204 programs.atop = {
213 enable = true;
205 enable = true;
214 settings = {
206 settings = {
nixos/tests/bcachefs.nix+1−1
@@ -1,6 +1,6 @@
1import ./make-test-python.nix ({ pkgs, ... }: {
1import ./make-test-python.nix ({ pkgs, ... }: {
2 name = "bcachefs";
2 name = "bcachefs";
3− meta.maintainers = with pkgs.lib.maintainers; [ chiiruno ];
3+ meta.maintainers = with pkgs.lib.maintainers; [ Madouura ];
5 nodes.machine = { pkgs, ... }: {
5 nodes.machine = { pkgs, ... }: {
6 virtualisation.emptyDiskImages = [ 4096 ];
6 virtualisation.emptyDiskImages = [ 4096 ];
@@ -42,7 +42,7 @@ let
42 nodes = { };
42 nodes = { };
43 testScript =
43 testScript =
45− nodes.machine = create_machine(${machineConfig})
45+ machine = create_machine(${machineConfig})
46 machine.start()
46 machine.start()
47 machine.wait_for_unit("multi-user.target")
47 machine.wait_for_unit("multi-user.target")
48 machine.succeed("nix store verify --no-trust -r --option experimental-features nix-command /run/current-system")
48 machine.succeed("nix store verify --no-trust -r --option experimental-features nix-command /run/current-system")
@@ -83,7 +83,7 @@ let
83 name = "boot-netboot-" + name;
83 name = "boot-netboot-" + name;
84 nodes = { };
84 nodes = { };
85 testScript = ''
85 testScript = ''
86− nodes.machine = create_machine(${machineConfig})
86+ machine = create_machine(${machineConfig})
87 machine.start()
87 machine.start()
88 machine.wait_for_unit("multi-user.target")
88 machine.wait_for_unit("multi-user.target")
89 machine.shutdown()
89 machine.shutdown()
@@ -138,7 +138,7 @@ in {
138 if os.system("qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
138 if os.system("qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
139 raise RuntimeError("Could not create mutable linked image")
139 raise RuntimeError("Could not create mutable linked image")
141− nodes.machine = create_machine(${machineConfig})
141+ machine = create_machine(${machineConfig})
142 machine.start()
142 machine.start()
143 machine.wait_for_unit("multi-user.target")
143 machine.wait_for_unit("multi-user.target")
144 machine.succeed("nix store verify -r --no-trust --option experimental-features nix-command /run/current-system")
144 machine.succeed("nix store verify -r --no-trust --option experimental-features nix-command /run/current-system")
nixos/tests/collectd.nix+6−1
@@ -3,11 +3,14 @@ import ./make-test-python.nix ({ pkgs, ... }: {
3 meta = { };
3 meta = { };
5 nodes.machine =
5 nodes.machine =
6− { pkgs, ... }:
6+ { pkgs, lib, ... }:
9 services.collectd = {
9 services.collectd = {
10 enable = true;
10 enable = true;
11+ extraConfig = lib.mkBefore ''
11 plugins = {
14 plugins = {
12 rrdtool = ''
15 rrdtool = ''
13 DataDir "/var/lib/collectd/rrd"
16 DataDir "/var/lib/collectd/rrd"
@@ -26,6 +29,8 @@ import ./make-test-python.nix ({ pkgs, ... }: {
26 machine.succeed(f"rrdinfo {file} | logger")
29 machine.succeed(f"rrdinfo {file} | logger")
27 # check that this file contains a shortterm metric
30 # check that this file contains a shortterm metric
28 machine.succeed(f"rrdinfo {file} | grep -F 'ds[shortterm].min = '")
31 machine.succeed(f"rrdinfo {file} | grep -F 'ds[shortterm].min = '")
32+ # check that interval was set before the plugins
33+ machine.succeed(f"rrdinfo {file} | grep -F 'step = 30'")
29 # check that there are frequent updates
34 # check that there are frequent updates
30 machine.succeed(f"cp {file} before")
35 machine.succeed(f"cp {file} before")
31 machine.wait_until_fails(f"cmp before {file}")
36 machine.wait_until_fails(f"cmp before {file}")
nixos/tests/common/lxd/config.yamlnew file+24
nixos/tests/containers-ephemeral.nix+3−3
@@ -33,10 +33,10 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
33 machine.succeed("nixos-container start webserver")
33 machine.succeed("nixos-container start webserver")
35 with subtest("Container got its own root folder"):
35 with subtest("Container got its own root folder"):
36− machine.succeed("ls /run/containers/webserver")
36+ machine.succeed("ls /run/nixos-containers/webserver")
38 with subtest("Container persistent directory is not created"):
38 with subtest("Container persistent directory is not created"):
39− machine.fail("ls /var/lib/containers/webserver")
39+ machine.fail("ls /var/lib/nixos-containers/webserver")
41 # Since "start" returns after the container has reached
41 # Since "start" returns after the container has reached
42 # multi-user.target, we should now be able to access it.
42 # multi-user.target, we should now be able to access it.
@@ -49,6 +49,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
49 machine.fail(f"curl --fail --connect-timeout 2 http://{ip}/ > /dev/null")
49 machine.fail(f"curl --fail --connect-timeout 2 http://{ip}/ > /dev/null")
51 with subtest("Container's root folder was removed"):
51 with subtest("Container's root folder was removed"):
52− machine.fail("ls /run/containers/webserver")
52+ machine.fail("ls /run/nixos-containers/webserver")
nixos/tests/containers-imperative.nix+6−6
@@ -69,8 +69,8 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
70 with subtest(f"Put the root of {id2} into a bind mount"):
70 with subtest(f"Put the root of {id2} into a bind mount"):
71 machine.succeed(
71 machine.succeed(
72− f"mv /var/lib/containers/{id2} /id2-bindmount",
72+ f"mv /var/lib/nixos-containers/{id2} /id2-bindmount",
73− f"mount --bind /id2-bindmount /var/lib/containers/{id1}",
73+ f"mount --bind /id2-bindmount /var/lib/nixos-containers/{id1}",
76 ip1 = machine.succeed(f"nixos-container show-ip {id1}").rstrip()
76 ip1 = machine.succeed(f"nixos-container show-ip {id1}").rstrip()
@@ -88,7 +88,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
88 "Create a directory with a dummy file and bind-mount it into both containers."
88 "Create a directory with a dummy file and bind-mount it into both containers."
90 for id in id1, id2:
90 for id in id1, id2:
91− important_path = f"/var/lib/containers/{id}/very/important/data"
91+ important_path = f"/var/lib/nixos-containers/{id}/very/important/data"
92 machine.succeed(
92 machine.succeed(
93 f"mkdir -p {important_path}",
93 f"mkdir -p {important_path}",
94 f"mount --bind /nested-bindmount {important_path}",
94 f"mount --bind /nested-bindmount {important_path}",
@@ -154,13 +154,13 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
154 machine.succeed("grep -qF 'important data' /nested-bindmount/dummy")
154 machine.succeed("grep -qF 'important data' /nested-bindmount/dummy")
156 with subtest("Ensure that the container path is gone"):
156 with subtest("Ensure that the container path is gone"):
157− print(machine.succeed("ls -lsa /var/lib/containers"))
157+ print(machine.succeed("ls -lsa /var/lib/nixos-containers"))
158− machine.succeed(f"test ! -e /var/lib/containers/{id1}")
158+ machine.succeed(f"test ! -e /var/lib/nixos-containers/{id1}")
160 with subtest("Ensure that a failed container creation doesn'leave any state"):
160 with subtest("Ensure that a failed container creation doesn'leave any state"):
161 machine.fail(
161 machine.fail(
162 "nixos-container create b0rk --config-file ${brokenCfg}"
162 "nixos-container create b0rk --config-file ${brokenCfg}"
164− machine.succeed("test ! -e /var/lib/containers/b0rk")
164+ machine.succeed("test ! -e /var/lib/nixos-containers/b0rk")
nixos/tests/containers-tmpfs.nix+5−5
@@ -62,7 +62,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
62 machine.succeed(
62 machine.succeed(
63 tmpfs_cmd("touch /root/test.file"),
63 tmpfs_cmd("touch /root/test.file"),
64 tmpfs_cmd("ls -l /root | grep -q test.file"),
64 tmpfs_cmd("ls -l /root | grep -q test.file"),
65− "test -e /var/lib/containers/tmpfs/root/test.file",
65+ "test -e /var/lib/nixos-containers/tmpfs/root/test.file",
68 with subtest(
68 with subtest(
@@ -73,7 +73,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
73 tmpfs_cmd("touch /some/random/path/test.file"),
73 tmpfs_cmd("touch /some/random/path/test.file"),
74 tmpfs_cmd("test -e /some/random/path/test.file"),
74 tmpfs_cmd("test -e /some/random/path/test.file"),
76− machine.fail("test -e /var/lib/containers/tmpfs/some/random/path/test.file")
76+ machine.fail("test -e /var/lib/nixos-containers/tmpfs/some/random/path/test.file")
78 with subtest(
78 with subtest(
79 "files created in the hosts container dir in a path where a tmpfs "
79 "files created in the hosts container dir in a path where a tmpfs "
@@ -81,9 +81,9 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
81 + "the do not exist in the tmpfs"
81 + "the do not exist in the tmpfs"
83 machine.succeed(
83 machine.succeed(
84− "touch /var/lib/containers/tmpfs/var/test.file",
84+ "touch /var/lib/nixos-containers/tmpfs/var/test.file",
85− "test -e /var/lib/containers/tmpfs/var/test.file",
85+ "test -e /var/lib/nixos-containers/tmpfs/var/test.file",
86− "ls -l /var/lib/containers/tmpfs/var/ | grep -q test.file 2>/dev/null",
86+ "ls -l /var/lib/nixos-containers/tmpfs/var/ | grep -q test.file 2>/dev/null",
88 machine.fail(tmpfs_cmd("ls -l /var | grep -q test.file"))
88 machine.fail(tmpfs_cmd("ls -l /var | grep -q test.file"))
nixos/tests/custom-ca.nix+104−90
@@ -1,9 +1,14 @@
1# Checks that `security.pki` options are working in curl and the main browser
1# Checks that `security.pki` options are working in curl and the main browser
2−# engines: Gecko (via Firefox), Chromium, QtWebEngine (Falkon) and WebKitGTK
2+# engines: Gecko (via Firefox), Chromium, QtWebEngine (via qutebrowser) and
3−# (via Midori). The test checks that certificates issued by a custom trusted
3+# WebKitGTK (via Midori). The test checks that certificates issued by a custom
4−# CA are accepted but those from an unknown CA are rejected.
4+# trusted CA are accepted but those from an unknown CA are rejected.
6−import ./make-test-python.nix ({ pkgs, lib, ... }:
6+{ system ? builtins.currentSystem,
8+ pkgs ? import ../.. { inherit system config; }
11+with import ../lib/testing-python.nix { inherit system pkgs; };
9 makeCert = { caName, domain }: pkgs.runCommand "example-cert"
14 makeCert = { caName, domain }: pkgs.runCommand "example-cert"
@@ -68,24 +73,8 @@ let
68 domain = "bad.example.com";
73 domain = "bad.example.com";
71−in
76+ webserverConfig =
75− meta.maintainers = with lib.maintainers; [ rnhmjoj ];
79− nodes.machine = { pkgs, ... }:
80− { imports = [ ./common/user-account.nix ./common/x11.nix ];
82− # chromium-based browsers refuse to run as root
83− test-support.displayManager.auto.user = "alice";
85− # browsers may hang with the default memory
86− virtualisation.memorySize = 600;
88− networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
77+ { networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
89 security.pki.certificateFiles = [ "${example-good-cert}/ca.crt" ];
78 security.pki.certificateFiles = [ "${example-good-cert}/ca.crt" ];
91 services.nginx.enable = true;
80 services.nginx.enable = true;
@@ -107,73 +96,98 @@ in
107 return 200 'It does not work!';
96 return 200 'It does not work!';
111− environment.systemPackages = with pkgs; [
101+ curlTest = makeTest {
102+ name = "custom-ca-curl";
103+ meta.maintainers = with lib.maintainers; [ rnhmjoj ];
104+ nodes.machine = { ... }: webserverConfig;
120− testScript = ''
105+ testScript = ''
106+ with subtest("Good certificate is trusted in curl"):
107+ machine.wait_for_unit("nginx")
108+ machine.wait_for_open_port(443)
109+ machine.succeed("curl -fv https://good.example.com")
111+ with subtest("Unknown CA is untrusted in curl"):
112+ machine.fail("curl -fv https://bad.example.com")
116+ mkBrowserTest = browser: testParams: makeTest {
117+ name = "custom-ca-${browser}";
118+ meta.maintainers = with lib.maintainers; [ rnhmjoj ];
122+ nodes.machine = { pkgs, ... }:
124+ [ ./common/user-account.nix
129+ # chromium-based browsers refuse to run as root
130+ test-support.displayManager.auto.user = "alice";
132+ # browsers may hang with the default memory
133+ virtualisation.memorySize = 600;
135+ environment.systemPackages = [ pkgs.xdotool pkgs.${browser} ];
121− from typing import Tuple
139+ from typing import Tuple
122− def execute_as(user: str, cmd: str) -> Tuple[int, str]:
140+ def execute_as(user: str, cmd: str) -> Tuple[int, str]:
124− Run a shell command as a specific user.
142+ Run a shell command as a specific user.
126− return machine.execute(f"sudo -u {user} {cmd}")
144+ return machine.execute(f"sudo -u {user} {cmd}")
129− def wait_for_window_as(user: str, cls: str) -> None:
147+ def wait_for_window_as(user: str, cls: str) -> None:
131− Wait until a X11 window of a given user appears.
149+ Wait until a X11 window of a given user appears.
134− def window_is_visible(last_try: bool) -> bool:
152+ def window_is_visible(last_try: bool) -> bool:
135− ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
153+ ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
136− if last_try:
154+ if last_try:
137− machine.log(f"Last chance to match {cls} on the window list")
155+ machine.log(f"Last chance to match {cls} on the window list")
138− return ret == 0
156+ return ret == 0
140− with machine.nested("Waiting for a window to appear"):
158+ with machine.nested("Waiting for a window to appear"):
141− retry(window_is_visible)
159+ retry(window_is_visible)
144− machine.start()
162+ machine.start()
145−
163+ machine.wait_for_x()
165+ command = "${browser} ${testParams.args or ""}"
146− with subtest("Good certificate is trusted in curl"):
166+ with subtest("Good certificate is trusted in ${browser}"):
147− machine.wait_for_unit("nginx")
167+ execute_as(
148− machine.wait_for_open_port(443)
168+ "alice", f"{command} https://good.example.com >&2 &"
149− machine.succeed("curl -fv https://good.example.com")
169+ )
150−
170+ wait_for_window_as("alice", "${browser}")
172+ execute_as("alice", "xdotool key ctrl+r") # reload to be safe
173+ machine.wait_for_text("It works!")
174+ machine.screenshot("good${browser}")
175+ execute_as("alice", "xdotool key ctrl+w") # close tab
151− with subtest("Unknown CA is untrusted in curl"):
177+ with subtest("Unknown CA is untrusted in ${browser}"):
152− machine.fail("curl -fv https://bad.example.com")
178+ execute_as("alice", f"{command} https://bad.example.com >&2 &")
153−
179+ machine.wait_for_text("${testParams.error}")
154− browsers = {
180+ machine.screenshot("bad${browser}")
188+} // pkgs.lib.mapAttrs mkBrowserTest {
155− "firefox": "Security Risk",
189+ firefox = { error = "Security Risk"; };
156− "chromium": "not private",
190+ chromium = { error = "not private"; };
157− "qutebrowser -T": "Certificate error",
191+ qutebrowser = { args = "-T"; error = "Certificate error"; };
158− "midori": "Security"
192+ midori = { error = "Security"; };
161− machine.wait_for_x()
162− for command, error in browsers.items():
163− browser = command.split()[0]
164− with subtest("Good certificate is trusted in " + browser):
166− "alice", f"{command} https://good.example.com >&2 &"
168− wait_for_window_as("alice", browser)
169− machine.wait_for_text("It works!")
170− machine.screenshot("good" + browser)
171− execute_as("alice", "xdotool key ctrl+w") # close tab
173− with subtest("Unknown CA is untrusted in " + browser):
174− execute_as("alice", f"{command} https://bad.example.com >&2 &")
175− machine.wait_for_text(error)
176− machine.screenshot("bad" + browser)
177− machine.succeed("pkill -f " + browser)
nixos/tests/docker-tools-cross.nix+2−2
@@ -7,7 +7,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
9 remoteSystem =
9 remoteSystem =
10− if pkgs.system == "aarch64-linux"
10+ if pkgs.stdenv.hostPlatform.system == "aarch64-linux"
11 then "x86_64-linux"
11 then "x86_64-linux"
12 else "aarch64-linux";
12 else "aarch64-linux";
@@ -18,7 +18,7 @@ let
19 # NOTE: Since this file can't control where the test will be _run_ we don't
19 # NOTE: Since this file can't control where the test will be _run_ we don't
20 # cross-compile _to_ a different system but _from_ a different system
20 # cross-compile _to_ a different system but _from_ a different system
21− crossSystem = pkgs.system;
21+ crossSystem = pkgs.stdenv.hostPlatform.system;
24 hello1 = remoteCrossPkgs.dockerTools.buildImage {
24 hello1 = remoteCrossPkgs.dockerTools.buildImage {
nixos/tests/docker-tools.nix+1−1
@@ -315,7 +315,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
315 "docker inspect ${pkgs.dockerTools.examples.cross.imageName} "
315 "docker inspect ${pkgs.dockerTools.examples.cross.imageName} "
316 + "| ${pkgs.jq}/bin/jq -r .[].Architecture"
316 + "| ${pkgs.jq}/bin/jq -r .[].Architecture"
317 ).strip()
317 ).strip()
318− == "${if pkgs.system == "aarch64-linux" then "amd64" else "arm64"}"
318+ == "${if pkgs.stdenv.hostPlatform.system == "aarch64-linux" then "amd64" else "arm64"}"
321 with subtest("buildLayeredImage doesn't dereference /nix/store symlink layers"):
321 with subtest("buildLayeredImage doesn't dereference /nix/store symlink layers"):
nixos/tests/emacs-daemon.nix+1−1
@@ -33,7 +33,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
35 # connects to the daemon
35 # connects to the daemon
36− machine.succeed("emacsclient --create-frame $EDITOR >&2 &")
36+ machine.succeed("emacsclient --no-wait --frame-parameters='((display . \"'\"$DISPLAY\"'\"))' --create-frame $EDITOR >&2")
38 # checks that Emacs shows the edited filename
38 # checks that Emacs shows the edited filename
39 machine.wait_for_text("emacseditor")
39 machine.wait_for_text("emacseditor")
nixos/tests/envoy.nixnew file+33
@@ -0,0 +1,33 @@
1+import ./make-test-python.nix ({ pkgs, lib, ...} : {
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ cameronnemo ];
7+ nodes.machine = { pkgs, ... }: {
8+ services.envoy.enable = true;
9+ services.envoy.settings = {
11+ access_log_path = "/dev/null";
15+ address = "127.0.0.1";
29+ machine.wait_for_unit("envoy.service")
30+ machine.wait_for_open_port(9901)
31+ machine.wait_until_succeeds("curl -fsS localhost:9901/ready")
nixos/tests/fenics.nix+1−1
@@ -44,6 +44,6 @@ in
44 { nodes, ... }:
44 { nodes, ... }:
46 start_all()
46 start_all()
47− node1.succeed("${fenicsScript}")
47+ fenicsnode.succeed("${fenicsScript}")
nixos/tests/gitlab.nix+298−25
@@ -1,9 +1,31 @@
1−# This test runs gitlab and checks if it works
1+# This test runs gitlab and performs the following tests:
6+# - Creating Merge Requests and merging them
7+# - Opening and closing issues.
8+# - Downloading repository archives as tar.gz and tar.bz2
9+import ./make-test-python.nix ({ pkgs, lib, ... }:
14+ inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
4 initialRootPassword = "notproduction";
15 initialRootPassword = "notproduction";
5−in
16+ rootProjectId = "2";
6−import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
17+
18+ aliceUsername = "alice";
20+ alicePassword = "alicepassword";
21+ aliceProjectId = "2";
22+ aliceProjectName = "test-alice";
26+ bobPassword = "bobpassword";
7 name = "gitlab";
29 name = "gitlab";
8 meta = with pkgs.lib.maintainers; {
30 meta = with pkgs.lib.maintainers; {
9 maintainers = [ globin yayayayaka ];
31 maintainers = [ globin yayayayaka ];
@@ -31,6 +53,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
56+ services.openssh.enable = true;
34 services.dovecot2 = {
58 services.dovecot2 = {
35 enable = true;
59 enable = true;
36 enableImap = true;
60 enableImap = true;
@@ -77,8 +101,43 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
77 password = initialRootPassword;
101 password = initialRootPassword;
104+ createUserAlice = pkgs.writeText "create-user-alice.json" (builtins.toJSON rec {
105+ username = aliceUsername;
107+ email = "alice@localhost";
108+ password = alicePassword;
109+ skip_confirmation = true;
112+ createUserBob = pkgs.writeText "create-user-bob.json" (builtins.toJSON rec {
113+ username = bobUsername;
115+ email = "bob@localhost";
116+ password = bobPassword;
117+ skip_confirmation = true;
120+ aliceAuth = pkgs.writeText "alice-auth.json" (builtins.toJSON {
121+ grant_type = "password";
122+ username = aliceUsername;
123+ password = alicePassword;
126+ bobAuth = pkgs.writeText "bob-auth.json" (builtins.toJSON {
127+ grant_type = "password";
128+ username = bobUsername;
129+ password = bobPassword;
132+ aliceAddSSHKey = pkgs.writeText "alice-add-ssh-key.json" (builtins.toJSON {
134+ title = "snakeoil@nixos";
135+ key = snakeOilPublicKey;
80− createProject = pkgs.writeText "create-project.json" (builtins.toJSON {
138+ createProjectAlice = pkgs.writeText "create-project-alice.json" (builtins.toJSON {
81− name = "test";
139+ name = aliceProjectName;
140+ visibility = "public";
84 putFile = pkgs.writeText "put-file.json" (builtins.toJSON {
143 putFile = pkgs.writeText "put-file.json" (builtins.toJSON {
@@ -89,6 +148,23 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
89 commit_message = "create a new file";
148 commit_message = "create a new file";
151+ mergeRequest = pkgs.writeText "merge-request.json" (builtins.toJSON {
153+ target_project_id = aliceProjectId;
154+ source_branch = "master";
155+ target_branch = "master";
156+ title = "Add some other file";
159+ newIssue = pkgs.writeText "new-issue.json" (builtins.toJSON {
160+ title = "useful issue title";
163+ closeIssue = pkgs.writeText "close-issue.json" (builtins.toJSON {
165+ state_event = "close";
92 # Wait for all GitLab services to be fully started.
168 # Wait for all GitLab services to be fully started.
93 waitForServices = ''
169 waitForServices = ''
94 gitlab.wait_for_unit("gitaly.service")
170 gitlab.wait_for_unit("gitaly.service")
@@ -105,6 +181,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
105 # The actual test of GitLab. Only push data to GitLab if
181 # The actual test of GitLab. Only push data to GitLab if
106 # `doSetup` is is true.
182 # `doSetup` is is true.
107 test = doSetup: ''
183 test = doSetup: ''
184+ GIT_SSH_COMMAND = "ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=/dev/null"
108 gitlab.succeed(
186 gitlab.succeed(
109 "curl -isSf http://gitlab | grep -i location | grep http://gitlab/users/sign_in"
187 "curl -isSf http://gitlab | grep -i location | grep http://gitlab/users/sign_in"
@@ -115,27 +193,222 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
115 "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
193 "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
117 '' + optionalString doSetup ''
195 '' + optionalString doSetup ''
196+ with subtest("Create user Alice"):
198+ """[ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createUserAlice} http://gitlab/api/v4/users)" = "201" ]"""
201+ "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${aliceAuth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers-alice"
204+ with subtest("Create user Bob"):
206+ """ [ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createUserBob} http://gitlab/api/v4/users)" = "201" ]"""
209+ "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${bobAuth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers-bob"
212+ with subtest("Setup Git and SSH for Alice"):
213+ gitlab.succeed("git config --global user.name Alice")
214+ gitlab.succeed("git config --global user.email alice@nixos.invalid")
215+ gitlab.succeed("mkdir -m 700 /root/.ssh")
216+ gitlab.succeed("cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa")
217+ gitlab.succeed("chmod 600 /root/.ssh/id_ecdsa")
224+ -H 'Content-Type: application/json' \
225+ -H @/tmp/headers-alice -d @${aliceAddSSHKey} \
226+ http://gitlab/api/v4/user/keys)" = "201" ]
230+ with subtest("Create a new repository"):
231+ # Alice creates a new repository
238+ -H 'Content-Type: application/json' \
239+ -H @/tmp/headers-alice \
240+ -d @${createProjectAlice} \
241+ http://gitlab/api/v4/projects)" = "201" ]
245+ # Alice commits an initial commit
252+ -H 'Content-Type: application/json' \
253+ -H @/tmp/headers-alice \
255+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/files/some-file.txt)" = "201" ]"""
258+ with subtest("git clone over HTTP"):
260+ """git clone http://gitlab/alice/${aliceProjectName}.git clone-via-http""",
264+ with subtest("Push a commit via SSH"):
266+ f"""GIT_SSH_COMMAND="{GIT_SSH_COMMAND}" git clone gitlab@gitlab:alice/${aliceProjectName}.git""",
270+ """echo "a commit sent over ssh" > ${aliceProjectName}/ssh.txt"""
274+ cd ${aliceProjectName} || exit 1
280+ cd ${aliceProjectName} || exit 1
281+ git commit -m "Add a commit to be sent over ssh"
286+ cd ${aliceProjectName} || exit 1
287+ GIT_SSH_COMMAND="{GIT_SSH_COMMAND}" git push --set-upstream origin master
292+ with subtest("Fork a project"):
293+ # Bob forks Alice's project
300+ -H 'Content-Type: application/json' \
301+ -H @/tmp/headers-bob \
302+ http://gitlab/api/v4/projects/${aliceProjectId}/fork)" = "201" ]
306+ # Bob creates a commit
307+ gitlab.wait_until_succeeds(
313+ -H 'Content-Type: application/json' \
314+ -H @/tmp/headers-bob \
316+ http://gitlab/api/v4/projects/${bobProjectId}/repository/files/some-other-file.txt)" = "201" ]
320+ with subtest("Create a Merge Request"):
321+ # Bob opens a merge request against Alice's repository
322+ gitlab.wait_until_succeeds(
328+ -H 'Content-Type: application/json' \
329+ -H @/tmp/headers-bob \
330+ -d @${mergeRequest} \
331+ http://gitlab/api/v4/projects/${bobProjectId}/merge_requests)" = "201" ]
335+ # Alice merges the MR
336+ gitlab.wait_until_succeeds(
342+ -H 'Content-Type: application/json' \
343+ -H @/tmp/headers-alice \
344+ -d @${mergeRequest} \
345+ http://gitlab/api/v4/projects/${aliceProjectId}/merge_requests/1/merge)" = "200" ]
349+ with subtest("Create an Issue"):
350+ # Bob opens an issue on Alice's repository
118− gitlab.succeed(
351+ gitlab.succeed(
119− """[ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects)" = "201" ]"""
356+ -H 'Content-Type: application/json' \
357+ -H @/tmp/headers-bob \
359+ http://gitlab/api/v4/projects/${aliceProjectId}/issues)" = "201" ]
122− """[ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/2/repository/files/some-file.txt)" = "201" ]"""
363+ # Alice closes the issue
364+ gitlab.wait_until_succeeds(
370+ -H 'Content-Type: application/json' \
371+ -H @/tmp/headers-alice -d @${closeIssue} http://gitlab/api/v4/projects/${aliceProjectId}/issues/1)" = "200" ]
375+ with subtest("Download archive.tar.gz"):
125− gitlab.succeed(
376+ gitlab.succeed(
381+ -H @/tmp/headers-alice \
126− """[ "$(curl -o /dev/null -w '%{http_code}' -H @/tmp/headers http://gitlab/api/v4/projects/2/repository/archive.tar.gz)" = "200" ]"""
382+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.gz)" = "200" ]
128− gitlab.succeed(
385+ gitlab.succeed(
388+ -H @/tmp/headers-alice \
129− """curl -H @/tmp/headers http://gitlab/api/v4/projects/2/repository/archive.tar.gz > /tmp/archive.tar.gz"""
389+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.gz > /tmp/archive.tar.gz
131− gitlab.succeed(
392+ gitlab.succeed("test -s /tmp/archive.tar.gz")
394+ with subtest("Download archive.tar.bz2"):
400+ -H @/tmp/headers-alice \
132− """[ "$(curl -o /dev/null -w '%{http_code}' -H @/tmp/headers http://gitlab/api/v4/projects/2/repository/archive.tar.bz2)" = "200" ]"""
401+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.bz2)" = "200" ]
134− gitlab.succeed(
404+ gitlab.succeed(
407+ -H @/tmp/headers-alice \
135− """curl -o /dev/null -w '%{http_code}' -H @/tmp/headers http://gitlab/api/v4/projects/2/repository/archive.tar.bz2 > /tmp/archive.tar.bz2"""
408+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.bz2 > /tmp/archive.tar.bz2
137− gitlab.succeed("test -s /tmp/archive.tar.gz")
410+ )
138− gitlab.succeed("test -s /tmp/archive.tar.bz2")
411+ gitlab.succeed("test -s /tmp/archive.tar.bz2")
nixos/tests/haste-server.nixnew file+23
@@ -0,0 +1,23 @@
1+import ./make-test-python.nix ({ pkgs, lib, ... }:
3+ name = "haste-server";
4+ meta.maintainers = with lib.maintainers; [ mkg20001 ];
6+ nodes.machine = { pkgs, ... }: {
7+ environment.systemPackages = with pkgs; [
12+ services.haste-server = {
18+ machine.wait_for_unit("haste-server")
19+ machine.wait_until_succeeds("curl -s localhost:7777")
20+ machine.succeed('curl -s -X POST http://localhost:7777/documents -d "Hello World!" > bla')
21+ machine.succeed('curl http://localhost:7777/raw/$(cat bla | jq -r .key) | grep "Hello World"')
nixos/tests/hbase.nixnew file+30
@@ -0,0 +1,30 @@
1+import ./make-test-python.nix ({ pkgs, lib, package ? pkgs.hbase, ... }:
5+ meta = with lib.maintainers; {
6+ maintainers = [ illustris ];
10+ hbase = { pkgs, ... }: {
14+ # Needed for standalone mode in hbase 2+
15+ # This setting and standalone mode are not suitable for production
16+ settings."hbase.unsafe.stream.capability.enforce" = "false";
18+ environment.systemPackages = with pkgs; [
26+ hbase.wait_for_unit("hbase.service")
27+ hbase.wait_until_succeeds("echo \"create 't1','f1'\" | sudo -u hbase hbase shell -n")
28+ assert "NAME => 'f1'" in hbase.succeed("echo \"describe 't1'\" | sudo -u hbase hbase shell -n")
nixos/tests/hibernate.nix+12−1
@@ -3,6 +3,7 @@
3{ system ? builtins.currentSystem
3{ system ? builtins.currentSystem
4, config ? {}
4, config ? {}
5, pkgs ? import ../.. { inherit system config; }
5, pkgs ? import ../.. { inherit system config; }
6+, systemdStage1 ? false
8with import ../lib/testing-python.nix { inherit system pkgs; };
9with import ../lib/testing-python.nix { inherit system pkgs; };
@@ -29,6 +30,11 @@ let
29 "/".device = "/dev/vda2";
30 "/".device = "/dev/vda2";
31 swapDevices = mkOverride 0 [ { device = "/dev/vda1"; } ];
32 swapDevices = mkOverride 0 [ { device = "/dev/vda1"; } ];
33+ boot.resumeDevice = mkIf systemdStage1 "/dev/vda1";
34+ boot.initrd.systemd = mkIf systemdStage1 {
36+ emergencyAccess = true;
33 installedSystem = (import ../lib/eval-config.nix {
39 installedSystem = (import ../lib/eval-config.nix {
34 inherit system;
40 inherit system;
@@ -39,7 +45,7 @@ in makeTest {
41 # System configuration used for installing the installedConfig from above.
47 # System configuration used for installing the installedConfig from above.
42− nodes.machine = { config, lib, pkgs, ... }: with lib; {
48+ machine = { config, lib, pkgs, ... }: with lib; {
43 imports = [
49 imports = [
44 ../modules/profiles/installation-device.nix
50 ../modules/profiles/installation-device.nix
45 ../modules/profiles/base.nix
51 ../modules/profiles/base.nix
@@ -117,6 +123,11 @@ in makeTest {
117 resume = create_named_machine("resume")
123 resume = create_named_machine("resume")
118 resume.start()
124 resume.start()
119 resume.succeed("grep 'not persisted to disk' /run/test/suspended")
125 resume.succeed("grep 'not persisted to disk' /run/test/suspended")
127+ # Ensure we don't restore from hibernation when booting again
129+ resume.wait_for_unit("default.target")
130+ resume.fail("grep 'not persisted to disk' /run/test/suspended")
nixos/tests/installer-systemd-stage-1.nixnew file+33
@@ -0,0 +1,33 @@
1+{ system ? builtins.currentSystem
3+, pkgs ? import ../.. { inherit system config; }
7+ # Some of these tests don't work with systemd stage 1 yet. Uncomment
9+ inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; })
14+ # encryptedFSWithKeyfile
27+ simpleUefiGrubSpecialisation
28+ simpleUefiSystemdBoot
nixos/tests/installer.nix+15−1
@@ -1,6 +1,7 @@
1{ system ? builtins.currentSystem,
1{ system ? builtins.currentSystem,
2 config ? {},
2 config ? {},
3− pkgs ? import ../.. { inherit system config; }
3+ pkgs ? import ../.. { inherit system config; },
6with import ../lib/testing-python.nix { inherit system pkgs; };
7with import ../lib/testing-python.nix { inherit system pkgs; };
@@ -23,6 +24,8 @@ let
23 # To ensure that we can rebuild the grub configuration on the nixos-rebuild
24 # To ensure that we can rebuild the grub configuration on the nixos-rebuild
24 system.extraDependencies = with pkgs; [ stdenvNoCC ];
25 system.extraDependencies = with pkgs; [ stdenvNoCC ];
27+ ${optionalString systemdStage1 "boot.initrd.systemd.enable = true;"}
26 ${optionalString (bootLoader == "grub") ''
29 ${optionalString (bootLoader == "grub") ''
27 boot.loader.grub.version = ${toString grubVersion};
30 boot.loader.grub.version = ${toString grubVersion};
28 ${optionalString (grubVersion == 1) ''
31 ${optionalString (grubVersion == 1) ''
@@ -290,6 +293,8 @@ let
290 virtualisation.cores = 8;
293 virtualisation.cores = 8;
291 virtualisation.memorySize = 1536;
294 virtualisation.memorySize = 1536;
296+ boot.initrd.systemd.enable = systemdStage1;
293 # Use a small /dev/vdb as the root disk for the
298 # Use a small /dev/vdb as the root disk for the
294 # installer. This ensures the target disk (/dev/vda) is
299 # installer. This ensures the target disk (/dev/vda) is
295 # the same during and after installation.
300 # the same during and after installation.
@@ -299,6 +304,13 @@ let
299 virtualisation.qemu.diskInterface =
304 virtualisation.qemu.diskInterface =
300 if grubVersion == 1 then "scsi" else "virtio";
305 if grubVersion == 1 then "scsi" else "virtio";
307+ # We don't want to have any networking in the guest whatsoever.
308+ # Also, if any vlans are enabled, the guest will reboot
309+ # (with a different configuration for legacy reasons),
310+ # and spend 5 minutes waiting for the vlan interface to show up
311+ # (which will never happen).
312+ virtualisation.vlans = [];
302 boot.loader.systemd-boot.enable = mkIf (bootLoader == "systemd-boot") true;
314 boot.loader.systemd-boot.enable = mkIf (bootLoader == "systemd-boot") true;
304 hardware.enableAllFirmware = mkForce false;
316 hardware.enableAllFirmware = mkForce false;
@@ -312,6 +324,8 @@ let
312 desktop-file-utils
324 desktop-file-utils
314 docbook_xsl_ns
326 docbook_xsl_ns
315 libxml2.bin
329 libxml2.bin
316 libxslt.bin
330 libxslt.bin
317 nixos-artwork.wallpapers.simple-dark-gray-bottom
331 nixos-artwork.wallpapers.simple-dark-gray-bottom
nixos/tests/kexec.nix+44−16
@@ -1,22 +1,50 @@
1−# Test whether fast reboots via kexec work.
3−import ./make-test-python.nix ({ pkgs, lib, ...} : {
1+import ./make-test-python.nix ({ pkgs, lib, ... }: {
4 name = "kexec";
2 name = "kexec";
5 meta = with lib.maintainers; {
3 meta = with lib.maintainers; {
6− maintainers = [ eelco ];
4+ maintainers = [ flokli lassulus ];
9+ virtualisation.vlans = [ ];
10+ virtualisation.memorySize = 4 * 1024;
11+ virtualisation.useBootLoader = true;
12+ virtualisation.useEFIBoot = true;
13+ boot.loader.systemd-boot.enable = true;
14+ boot.loader.efi.canTouchEfiVariables = true;
17+ node2 = { modulesPath, ... }: {
18+ virtualisation.vlans = [ ];
19+ environment.systemPackages = [ pkgs.hello ];
21+ "${modulesPath}/installer/kexec/kexec-boot.nix"
22+ "${modulesPath}/profiles/minimal.nix"
9− nodes.machine = { ... }:
27+ testScript = { nodes, ... }: ''
10− { virtualisation.vlans = [ ]; };
28+ # Test whether reboot via kexec works.
29+ node1.wait_for_unit("multi-user.target")
30+ node1.succeed('kexec --load /run/current-system/kernel --initrd /run/current-system/initrd --command-line "$(</proc/cmdline)"')
31+ node1.execute("systemctl kexec >&2 &", check_return=False)
32+ node1.connected = False
34+ node1.wait_for_unit("multi-user.target")
36+ # Check if the machine with kexec-boot.nix profile boots up
37+ node2.wait_for_unit("multi-user.target")
40+ # Kexec node1 to the toplevel of node2 via the kexec-boot script
41+ node1.succeed('touch /run/foo')
43+ node1.execute('${nodes.node2.config.system.build.kexecBoot}/kexec-boot', check_return=False)
44+ node1.succeed('! test -e /run/foo')
45+ node1.succeed('hello')
46+ node1.succeed('[ "$(hostname)" = "node2" ]')
14− machine.wait_for_unit("multi-user.target")
15− machine.succeed('kexec --load /run/current-system/kernel --initrd /run/current-system/initrd --command-line "$(</proc/cmdline)"')
16− machine.execute("systemctl kexec >&2 &", check_return=False)
17− machine.connected = False
19− machine.wait_for_unit("multi-user.target")
20− machine.shutdown()
48+ node1.shutdown()
nixos/tests/keycloak.nix+15−11
@@ -4,7 +4,7 @@
6 certs = import ./common/acme/server/snakeoil-certs.nix;
6 certs = import ./common/acme/server/snakeoil-certs.nix;
7− frontendUrl = "https://${certs.domain}/auth";
7+ frontendUrl = "https://${certs.domain}";
8 initialAdminPassword = "h4IhoJFnt2iQIR9";
8 initialAdminPassword = "h4IhoJFnt2iQIR9";
10 keycloakTest = import ./make-test-python.nix (
10 keycloakTest = import ./make-test-python.nix (
@@ -27,20 +27,23 @@ let
28 services.keycloak = {
28 services.keycloak = {
29 enable = true;
29 enable = true;
31+ hostname = certs.domain;
30− inherit frontendUrl initialAdminPassword;
33+ inherit initialAdminPassword;
31− sslCertificate = certs.${certs.domain}.cert;
34+ sslCertificate = "${certs.${certs.domain}.cert}";
32− sslCertificateKey = certs.${certs.domain}.key;
35+ sslCertificateKey = "${certs.${certs.domain}.key}";
33 database = {
36 database = {
34 type = databaseType;
37 type = databaseType;
35 username = "bogus";
38 username = "bogus";
36− passwordFile = pkgs.writeText "dbPassword" "wzf6vOCbPp6cqTH";
40+ passwordFile = "${pkgs.writeText "dbPassword" "wzf6vOCbPp6cqTH"}";
38 plugins = with config.services.keycloak.package.plugins; [
42 plugins = with config.services.keycloak.package.plugins; [
39 keycloak-discord
43 keycloak-discord
40 keycloak-metrics-spi
44 keycloak-metrics-spi
44 environment.systemPackages = with pkgs; [
47 environment.systemPackages = with pkgs; [
45 xmlstarlet
48 xmlstarlet
@@ -99,9 +102,9 @@ let
100 keycloak.start()
103 keycloak.start()
101 keycloak.wait_for_unit("keycloak.service")
104 keycloak.wait_for_unit("keycloak.service")
105+ keycloak.wait_for_open_port(443)
102 keycloak.wait_until_succeeds("curl -sSf ${frontendUrl}")
106 keycloak.wait_until_succeeds("curl -sSf ${frontendUrl}")
105 ### Realm Setup ###
108 ### Realm Setup ###
107 # Get an admin interface access token
110 # Get an admin interface access token
@@ -117,8 +120,8 @@ let
117 # Register the metrics SPI
120 # Register the metrics SPI
118 keycloak.succeed(
121 keycloak.succeed(
119 "${pkgs.jre}/bin/keytool -import -alias snakeoil -file ${certs.ca.cert} -storepass aaaaaa -keystore cacert.jks -noprompt",
122 "${pkgs.jre}/bin/keytool -import -alias snakeoil -file ${certs.ca.cert} -storepass aaaaaa -keystore cacert.jks -noprompt",
120− "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password '${initialAdminPassword}'",
123+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password '${initialAdminPassword}'",
121− "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'",
124+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'",
122 "curl -sSf '${frontendUrl}/realms/master/metrics' | grep '^keycloak_admin_event_UPDATE'"
125 "curl -sSf '${frontendUrl}/realms/master/metrics' | grep '^keycloak_admin_event_UPDATE'"
@@ -143,7 +146,7 @@ let
143 # post url.
146 # post url.
144 keycloak.succeed(
147 keycloak.succeed(
145 "curl -sSf -c cookie '${frontendUrl}/realms/${realm.realm}/protocol/openid-connect/auth?client_id=${client.name}&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=openid+email&response_type=code&response_mode=query&nonce=qw4o89g3qqm' >login_form",
148 "curl -sSf -c cookie '${frontendUrl}/realms/${realm.realm}/protocol/openid-connect/auth?client_id=${client.name}&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=openid+email&response_type=code&response_mode=query&nonce=qw4o89g3qqm' >login_form",
146− "tidy -q -m login_form || true",
149+ "tidy -asxml -q -m login_form || true",
147 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:div/_:form[@id='kc-form-login']\" -v @action login_form >form_post_url",
150 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:div/_:form[@id='kc-form-login']\" -v @action login_form >form_post_url",
@@ -151,7 +154,7 @@ let
151 # the HTML, then extract the authorization code.
154 # the HTML, then extract the authorization code.
152 keycloak.succeed(
155 keycloak.succeed(
153 "curl -sSf -L -b cookie -d 'username=${user.username}' -d 'password=${password}' -d 'credentialId=' \"$(<form_post_url)\" >auth_code_html",
156 "curl -sSf -L -b cookie -d 'username=${user.username}' -d 'password=${password}' -d 'credentialId=' \"$(<form_post_url)\" >auth_code_html",
154− "tidy -q -m auth_code_html || true",
157+ "tidy -asxml -q -m auth_code_html || true",
155 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:input[@id='code']\" -v @value auth_code_html >auth_code",
158 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:input[@id='code']\" -v @value auth_code_html >auth_code",
@@ -172,5 +175,6 @@ let
174 postgres = keycloakTest { databaseType = "postgresql"; };
177 postgres = keycloakTest { databaseType = "postgresql"; };
178+ mariadb = keycloakTest { databaseType = "mariadb"; };
175 mysql = keycloakTest { databaseType = "mysql"; };
179 mysql = keycloakTest { databaseType = "mysql"; };
nixos/tests/lvm2/default.nixnew file+45
@@ -0,0 +1,45 @@
1+{ system ? builtins.currentSystem
3+, pkgs ? import ../../.. { inherit system config; }
5+, kernelVersionsToTest ? [ "4.19" "5.4" "5.10" "5.15" "latest" ]
8+# For quickly running a test, the nixosTests.lvm2.lvm-thinpool-linux-latest attribute is recommended
10+ tests = let callTest = p: lib.flip (import p) { inherit system pkgs; }; in {
11+ thinpool = { test = callTest ./thinpool.nix; kernelFilter = lib.id; };
12+ # we would like to test all versions, but the kernel module currently does not compile against the other versions
13+ vdo = { test = callTest ./vdo.nix; kernelFilter = lib.filter (v: v == "5.15"); };
18+ test = callTest ./systemd-stage-1.nix;
19+ kernelFilter = lib.id;
22+ thinpool-sd-stage-1 = {
23+ test = callTest ./systemd-stage-1.nix;
24+ kernelFilter = lib.id;
25+ flavour = "thinpool";
28+ test = callTest ./systemd-stage-1.nix;
29+ kernelFilter = lib.filter (v: v == "5.15");
35+ lib.filter (x: x.value != {}) (
36+ lib.flip lib.concatMap kernelVersionsToTest (version:
38+ v' = lib.replaceStrings [ "." ] [ "_" ] version;
40+ lib.flip lib.mapAttrsToList tests (name: t:
41+ lib.nameValuePair "lvm-${name}-linux-${v'}" (lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (t.test ({ kernelPackages = pkgs."linuxPackages_${v'}"; } // builtins.removeAttrs t [ "test" "kernelFilter" ])))
nixos/tests/lvm2/systemd-stage-1.nixnew file+104
@@ -0,0 +1,104 @@
1+{ kernelPackages ? null, flavour }: let
4+ machine.succeed("vgcreate test_vg /dev/vdc /dev/vdd")
5+ machine.succeed("lvcreate -L 512M --type raid0 test_vg -n test_lv")
9+ machine.succeed("vgcreate test_vg /dev/vdc")
10+ machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
11+ machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
15+ machine.succeed("vgcreate test_vg /dev/vdc")
16+ machine.succeed("lvcreate --type vdo -n test_lv -L 6G -V 12G test_vg/vdo_pool_lv")
22+ boot.initrd.kernelModules = [
30+ boot.thin.enable = true;
31+ dmeventd.enable = true;
37+ boot.vdo.enable = true;
38+ dmeventd.enable = true;
45+ "test_lv" in machine.succeed("lvs --select segtype=raid0")
49+ "test_lv" in machine.succeed("lvs --select segtype=thin-pool")
53+ "test_lv" in machine.succeed("lvs --select segtype=vdo")
57+in import ../make-test-python.nix ({ pkgs, ... }: {
58+ name = "lvm2-${flavour}-systemd-stage-1";
59+ meta.maintainers = with pkgs.lib.maintainers; [ das_j ];
61+ nodes.machine = { pkgs, lib, ... }: {
62+ imports = [ extraConfig ];
65+ emptyDiskImages = [ 8192 8192 ];
66+ useBootLoader = true;
69+ boot.loader.systemd-boot.enable = true;
70+ boot.loader.efi.canTouchEfiVariables = true;
72+ environment.systemPackages = with pkgs; [ e2fsprogs ]; # for mkfs.ext4
76+ emergencyAccess = true;
78+ initrd.services.lvm.enable = true;
79+ kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
82+ specialisation.boot-lvm.configuration.virtualisation.bootDevice = "/dev/test_vg/test_lv";
86+ machine.wait_for_unit("multi-user.target")
87+ # Create a VG for the root
89+ machine.succeed("mkfs.ext4 /dev/test_vg/test_lv")
90+ machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt")
93+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf")
94+ machine.succeed("sync")
96+ machine.wait_for_unit("multi-user.target")
98+ # Ensure we have successfully booted from LVM
99+ assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
100+ assert "/dev/mapper/test_vg-test_lv on / type ext4" in machine.succeed("mount")
101+ assert "hello" in machine.succeed("cat /test")
nixos/tests/lvm2/thinpool.nixnew file+32
@@ -0,0 +1,32 @@
1+{ kernelPackages ? null }:
2+import ../make-test-python.nix ({ pkgs, ... }: {
3+ name = "lvm2-thinpool";
4+ meta.maintainers = with pkgs.lib.maintainers; [ ajs124 ];
6+ nodes.machine = { pkgs, lib, ... }: {
7+ virtualisation.emptyDiskImages = [ 4096 ];
9+ boot.thin.enable = true;
10+ dmeventd.enable = true;
12+ environment.systemPackages = with pkgs; [ xfsprogs ];
13+ environment.etc."lvm/lvm.conf".text = ''
14+ activation/thin_pool_autoextend_percent = 10
15+ activation/thin_pool_autoextend_threshold = 80
17+ boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
21+ machine.succeed("vgcreate test_vg /dev/vdb")
22+ machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
23+ machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
24+ machine.succeed("mkfs.xfs /dev/test_vg/test_lv")
25+ machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt")
26+ assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
27+ machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024")
28+ machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"")
29+ machine.succeed("umount /mnt")
30+ machine.succeed("vgchange -a n")
nixos/tests/lvm2/vdo.nixnew file+27
@@ -0,0 +1,27 @@
1+{ kernelPackages ? null }:
2+import ../make-test-python.nix ({ pkgs, ... }: {
4+ meta.maintainers = with pkgs.lib.maintainers; [ ajs124 ];
6+ nodes.machine = { pkgs, lib, ... }: {
7+ # Minimum required size for VDO volume: 5063921664 bytes
8+ virtualisation.emptyDiskImages = [ 8192 ];
10+ boot.vdo.enable = true;
11+ dmeventd.enable = true;
13+ environment.systemPackages = with pkgs; [ xfsprogs ];
14+ boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
18+ machine.succeed("vgcreate test_vg /dev/vdb")
19+ machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv")
20+ machine.succeed("mkfs.xfs -K /dev/test_vg/vdo_lv")
21+ machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt")
22+ assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
23+ machine.succeed("umount /mnt")
24+ machine.succeed("vdostats")
25+ machine.succeed("vgchange -a n")
nixos/tests/lxd-image-server.nix+15−48
@@ -1,54 +1,21 @@
1−import ./make-test-python.nix ({ pkgs, ...} :
1+import ./make-test-python.nix ({ pkgs, lib, ... } :
4− # Since we don't have access to the internet during the tests, we have to
4+ lxd-image = import ../release.nix {
5− # pre-fetch lxd containers beforehand.
5+ configuration = {
6− #
6+ # Building documentation makes the test unnecessarily take a longer time:
7− # I've chosen to import Alpine Linux, because its image is turbo-tiny and,
7+ documentation.enable = lib.mkForce false;
8− # generally, sufficient for our tests.
9− alpine-meta = pkgs.fetchurl {
10− url = "https://tarballs.nixos.org/alpine/3.12/lxd.tar.xz";
11− hash = "sha256-1tcKaO9lOkvqfmG/7FMbfAEToAuFy2YMewS8ysBKuLA=";
14− alpine-rootfs = pkgs.fetchurl {
15− url = "https://tarballs.nixos.org/alpine/3.12/rootfs.tar.xz";
16− hash = "sha256-Tba9sSoaiMtQLY45u7p5DMqXTSDgs/763L/SQp0bkCA=";
19− lxd-config = pkgs.writeText "config.yaml" ''
11+ lxd-image-metadata = lxd-image.lxdMeta.${pkgs.system};
20− storage_pools:
12+ lxd-image-rootfs = lxd-image.lxdImage.${pkgs.system};
24− source: /var/lxd-pool
48 name = "lxd-image-server";
15 name = "lxd-image-server";
50 meta = with pkgs.lib.maintainers; {
17 meta = with pkgs.lib.maintainers; {
51− maintainers = [ mkg20001 ];
18+ maintainers = [ mkg20001 patryk27 ];
54 nodes.machine = { lib, ... }: {
21 nodes.machine = { lib, ... }: {
@@ -100,20 +67,20 @@ in {
100 # lxd expects the pool's directory to already exist
67 # lxd expects the pool's directory to already exist
101 machine.succeed("mkdir /var/lxd-pool")
68 machine.succeed("mkdir /var/lxd-pool")
104 machine.succeed(
70 machine.succeed(
105− "cat ${lxd-config} | lxd init --preseed"
71+ "cat ${./common/lxd/config.yaml} | lxd init --preseed"
108 machine.succeed(
74 machine.succeed(
109− "lxc image import ${alpine-meta} ${alpine-rootfs} --alias alpine"
75+ "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos"
112− loc = "/var/www/simplestreams/images/iats/alpine/amd64/default/v1"
78+ loc = "/var/www/simplestreams/images/iats/nixos/amd64/default/v1"
114 with subtest("push image to server"):
80 with subtest("push image to server"):
115− machine.succeed("lxc launch alpine test")
81+ machine.succeed("lxc launch nixos test")
116− machine.succeed("lxc stop test")
83+ machine.succeed("lxc stop -f test")
117 machine.succeed("lxc publish --public test --alias=testimg")
84 machine.succeed("lxc publish --public test --alias=testimg")
118 machine.succeed("lxc image export testimg")
85 machine.succeed("lxc image export testimg")
119 machine.succeed("ls >&2")
86 machine.succeed("ls >&2")
nixos/tests/lxd-image.nixdeleted−89
@@ -1,89 +0,0 @@
1−# This test ensures that the nixOS lxd images builds and functions properly
2−# It has been extracted from `lxd.nix` to seperate failures of just the image and the lxd software
4−import ./make-test-python.nix ({ pkgs, ...} : let
5− release = import ../release.nix {
7− environment.systemPackages = with pkgs; [ stdenv ]; # inject stdenv so rebuild test works
11− metadata = release.lxdMeta.${pkgs.system};
12− image = release.lxdImage.${pkgs.system};
14− lxd-config = pkgs.writeText "config.yaml" ''
19− source: /var/lxd-pool
43− meta = with pkgs.lib.maintainers; {
44− maintainers = [ mkg20001 ];
47− nodes.machine = { lib, ... }: {
49− # disk full otherwise
52− lxc.lxcfs.enable = true;
58− machine.wait_for_unit("sockets.target")
59− machine.wait_for_unit("lxd.service")
60− machine.wait_for_file("/var/lib/lxd/unix.socket")
62− # It takes additional second for lxd to settle
65− # lxd expects the pool's directory to already exist
66− machine.succeed("mkdir /var/lxd-pool")
69− "cat ${lxd-config} | lxd init --preseed"
72− # TODO: test custom built container aswell
74− with subtest("importing container works"):
75− machine.succeed("lxc image import ${metadata}/*/*.tar.xz ${image}/*/*.tar.xz --alias nixos")
77− with subtest("launching container works"):
78− machine.succeed("lxc launch nixos machine -c security.nesting=true")
79− # make sure machine boots up properly
82− with subtest("container shell works"):
83− machine.succeed("echo true | lxc exec machine /run/current-system/sw/bin/bash -")
84− machine.succeed("lxc exec machine /run/current-system/sw/bin/true")
86− # with subtest("rebuilding works"):
87− # machine.succeed("lxc exec machine /run/current-system/sw/bin/nixos-rebuild switch")
nixos/tests/lxd.nix+40−63
@@ -1,48 +1,18 @@
1−import ./make-test-python.nix ({ pkgs, ...} :
1+import ./make-test-python.nix ({ pkgs, lib, ... } :
4− # Since we don't have access to the internet during the tests, we have to
4+ lxd-image = import ../release.nix {
5− # pre-fetch lxd containers beforehand.
5+ configuration = {
6− #
6+ # Building documentation makes the test unnecessarily take a longer time:
7− # I've chosen to import Alpine Linux, because its image is turbo-tiny and,
7+ documentation.enable = lib.mkForce false;
8− # generally, sufficient for our tests.
9− alpine-meta = pkgs.fetchurl {
10− url = "https://tarballs.nixos.org/alpine/3.12/lxd.tar.xz";
11− hash = "sha256-1tcKaO9lOkvqfmG/7FMbfAEToAuFy2YMewS8ysBKuLA=";
14− alpine-rootfs = pkgs.fetchurl {
9+ # Our tests require `grep` & friends:
15− url = "https://tarballs.nixos.org/alpine/3.12/rootfs.tar.xz";
10+ environment.systemPackages = with pkgs; [ busybox ];
16− hash = "sha256-Tba9sSoaiMtQLY45u7p5DMqXTSDgs/763L/SQp0bkCA=";
11+ };
19− lxd-config = pkgs.writeText "config.yaml" ''
14+ lxd-image-metadata = lxd-image.lxdMeta.${pkgs.system};
20− storage_pools:
15+ lxd-image-rootfs = lxd-image.lxdImage.${pkgs.system};
24− source: /var/lxd-pool
48 name = "lxd";
18 name = "lxd";
@@ -53,6 +23,8 @@ in {
54 nodes.machine = { lib, ... }: {
24 nodes.machine = { lib, ... }: {
55 virtualisation = {
25 virtualisation = {
56 # Since we're testing `limits.cpu`, we've gotta have a known number of
28 # Since we're testing `limits.cpu`, we've gotta have a known number of
57 # cores to lean on
29 # cores to lean on
58 cores = 2;
30 cores = 2;
@@ -77,61 +49,66 @@ in {
77 machine.succeed("mkdir /var/lxd-pool")
49 machine.succeed("mkdir /var/lxd-pool")
79 machine.succeed(
51 machine.succeed(
80− "cat ${lxd-config} | lxd init --preseed"
52+ "cat ${./common/lxd/config.yaml} | lxd init --preseed"
83 machine.succeed(
55 machine.succeed(
84− "lxc image import ${alpine-meta} ${alpine-rootfs} --alias alpine"
56+ "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos"
87− with subtest("Containers can be launched and destroyed"):
59+ with subtest("Container can be managed"):
88− machine.succeed("lxc launch alpine test")
60+ machine.succeed("lxc launch nixos container")
89− machine.succeed("lxc exec test true")
61+ machine.sleep(5)
62+ machine.succeed("echo true | lxc exec container /run/current-system/sw/bin/bash -")
63+ machine.succeed("lxc exec container true")
90− machine.succeed("lxc delete -f test")
64+ machine.succeed("lxc delete -f container")
92− with subtest("Containers are being mounted with lxcfs inside"):
66+ with subtest("Container is mounted with lxcfs inside"):
93− machine.succeed("lxc launch alpine test")
67+ machine.succeed("lxc launch nixos container")
95 ## ---------- ##
70 ## ---------- ##
96 ## limits.cpu ##
71 ## limits.cpu ##
98− machine.succeed("lxc config set test limits.cpu 1")
73+ machine.succeed("lxc config set container limits.cpu 1")
99− machine.succeed("lxc restart test")
74+ machine.succeed("lxc restart container")
101− # Since Alpine doesn't have `nproc` pre-installed, we've gotta resort
102− # to the primal methods
105− == machine.succeed("lxc exec test grep -- -c ^processor /proc/cpuinfo").strip()
79+ == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip()
108− machine.succeed("lxc config set test limits.cpu 2")
82+ machine.succeed("lxc config set container limits.cpu 2")
109− machine.succeed("lxc restart test")
83+ machine.succeed("lxc restart container")
113− == machine.succeed("lxc exec test grep -- -c ^processor /proc/cpuinfo").strip()
88+ == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip()
116 ## ------------- ##
91 ## ------------- ##
117 ## limits.memory ##
92 ## limits.memory ##
119− machine.succeed("lxc config set test limits.memory 64MB")
94+ machine.succeed("lxc config set container limits.memory 64MB")
120− machine.succeed("lxc restart test")
95+ machine.succeed("lxc restart container")
123 "MemTotal: 62500 kB"
99 "MemTotal: 62500 kB"
124− == machine.succeed("lxc exec test grep -- MemTotal /proc/meminfo").strip()
100+ == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip()
127− machine.succeed("lxc config set test limits.memory 128MB")
103+ machine.succeed("lxc config set container limits.memory 128MB")
128− machine.succeed("lxc restart test")
104+ machine.succeed("lxc restart container")
131 "MemTotal: 125000 kB"
108 "MemTotal: 125000 kB"
132− == machine.succeed("lxc exec test grep -- MemTotal /proc/meminfo").strip()
109+ == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip()
135− machine.succeed("lxc delete -f test")
112+ machine.succeed("lxc delete -f container")
nixos/tests/mailcatcher.nix+7−2
@@ -9,8 +9,13 @@ import ./make-test-python.nix ({ lib, ... }:
10 services.mailcatcher.enable = true;
10 services.mailcatcher.enable = true;
12− services.ssmtp.enable = true;
13+ enable = true;
13− services.ssmtp.hostName = "localhost:1025";
14+ accounts.default = {
15 environment.systemPackages = [ pkgs.mailutils ];
20 environment.systemPackages = [ pkgs.mailutils ];
nixos/tests/matrix-appservice-irc.nix+3
@@ -20,6 +20,9 @@ import ./make-test-python.nix ({ pkgs, ... }:
21 enable_registration = true;
21 enable_registration = true;
23+ # don't use this in production, always use some form of verification
24+ enable_registration_without_verification = true;
23 listeners = [ {
26 listeners = [ {
24 # The default but tls=false
27 # The default but tls=false
25 bind_addresses = [
28 bind_addresses = [
nixos/tests/mongodb.nix+4
@@ -37,6 +37,8 @@ import ./make-test-python.nix ({ pkgs, ... }:
37 mongodb-3_6
37 mongodb-3_6
38 mongodb-4_0
38 mongodb-4_0
39 mongodb-4_2
39 mongodb-4_2
@@ -48,6 +50,8 @@ import ./make-test-python.nix ({ pkgs, ... }:
48 + runMongoDBTest pkgs.mongodb-3_6
50 + runMongoDBTest pkgs.mongodb-3_6
49 + runMongoDBTest pkgs.mongodb-4_0
51 + runMongoDBTest pkgs.mongodb-4_0
50 + runMongoDBTest pkgs.mongodb-4_2
52 + runMongoDBTest pkgs.mongodb-4_2
53+ + runMongoDBTest pkgs.mongodb-4_4
54+ + runMongoDBTest pkgs.mongodb-5_0
52 node.shutdown()
56 node.shutdown()
nixos/tests/nar-serve.nix+1−1
@@ -31,7 +31,7 @@ import ./make-test-python.nix (
32 # Create a fake cache with Nginx service the static files
32 # Create a fake cache with Nginx service the static files
33 server.succeed(
33 server.succeed(
34− "nix copy --to file:///var/www ${pkgs.hello}"
34+ "nix --experimental-features nix-command copy --to file:///var/www ${pkgs.hello}"
36 server.wait_for_unit("nginx.service")
36 server.wait_for_unit("nginx.service")
37 server.wait_for_open_port(80)
37 server.wait_for_open_port(80)
@@ -28,6 +28,11 @@ import ./make-test-python.nix ({ pkgs, ... }:
28 ## It's also a loopback device to test exporting /dev/...
28 ## It's also a loopback device to test exporting /dev/...
29 systemd.services.create-priv-file =
29 systemd.services.create-priv-file =
30 mkCreateSmallFileService { path = "/vault-priv.disk"; loop = true; };
30 mkCreateSmallFileService { path = "/vault-priv.disk"; loop = true; };
31+ ## `aaa.disk` is just here because "[aaa]" sorts before
32+ ## "[generic]" lexicographically, and nbd-server breaks if
33+ ## "[generic]" isn't the first section.
34+ systemd.services.create-aaa-file =
35+ mkCreateSmallFileService { path = "/aaa.disk"; };
32 # Needed only for nbd-client used in the tests.
37 # Needed only for nbd-client used in the tests.
33 environment.systemPackages = [ pkgs.nbd ];
38 environment.systemPackages = [ pkgs.nbd ];
@@ -39,6 +44,9 @@ import ./make-test-python.nix ({ pkgs, ... }:
39 services.nbd.server = {
44 services.nbd.server = {
40 enable = true;
45 enable = true;
41 exports = {
46 exports = {
42 vault-pub = {
50 vault-pub = {
43 path = "/vault-pub.disk";
51 path = "/vault-pub.disk";
@@ -83,5 +91,13 @@ import ./make-test-python.nix ({ pkgs, ... }:
83 if foundString != testString:
91 if foundString != testString:
84 raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'")
92 raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'")
85 server.succeed("nbd-client -d /dev/nbd0")
93 server.succeed("nbd-client -d /dev/nbd0")
95+ # Server: Successfully connect to the aaa disk
96+ server.succeed("nbd-client localhost ${toString listenPort} /dev/nbd0 -name aaa -persist")
97+ server.succeed(f"echo '{testString}' | dd of=/dev/nbd0 conv=notrunc")
98+ foundString = server.succeed(f"dd status=none if=/aaa.disk count={len(testString)}")[:len(testString)]
99+ if foundString != testString:
100+ raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'")
101+ server.succeed("nbd-client -d /dev/nbd0")
nixos/tests/ncdns.nix+6−9
@@ -29,10 +29,10 @@ in
31 nodes.server = { ... }: {
31 nodes.server = { ... }: {
32− networking.nameservers = [ "127.0.0.1" ];
32+ networking.nameservers = [ "::1" ];
34 services.namecoind.rpc = {
34 services.namecoind.rpc = {
35− address = "127.0.0.1";
35+ address = "::1";
36 user = "namecoin";
36 user = "namecoin";
37 password = "secret";
37 password = "secret";
38 port = 8332;
38 port = 8332;
@@ -45,7 +45,7 @@ in
45 script = ''
45 script = ''
46 while true; do
46 while true; do
47 echo -e "HTTP/1.1 200 OK\n\n $(<${fakeReply})\n" \
47 echo -e "HTTP/1.1 200 OK\n\n $(<${fakeReply})\n" \
48− | ${pkgs.netcat}/bin/nc -N -l 127.0.0.1 8332
48+ | ${pkgs.netcat}/bin/nc -N -l ::1 8332
@@ -58,14 +58,10 @@ in
58 identity.address = "1.0.0.1";
58 identity.address = "1.0.0.1";
61− services.pdns-recursor = {
61+ services.pdns-recursor.enable = true;
63− dns.allowFrom = [ "127.0.0.0/8" ];
64− resolveNamecoin = true;
62+ services.pdns-recursor.resolveNamecoin = true;
67 environment.systemPackages = [ pkgs.dnsutils ];
64 environment.systemPackages = [ pkgs.dnsutils ];
71 testScript =
67 testScript =
@@ -91,6 +87,7 @@ in
91 assert "example.com" in server.succeed("dig SOA @localhost -p 5333 bit")
87 assert "example.com" in server.succeed("dig SOA @localhost -p 5333 bit")
93 with subtest("bit. zone forwarding works"):
89 with subtest("bit. zone forwarding works"):
90+ server.wait_for_unit("pdns-recursor")
94 assert "1.2.3.4" in server.succeed("host test.bit")
91 assert "1.2.3.4" in server.succeed("host test.bit")
nixos/tests/networking.nix+1−1
@@ -878,7 +878,7 @@ let
878 linkConfig.Name = "custom_name";
878 linkConfig.Name = "custom_name";
881− else { services.udev.initrdRules = ''
881+ else { boot.initrd.services.udev.rules = ''
882 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:12:01:01", KERNEL=="eth*", NAME="custom_name"
882 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:12:01:01", KERNEL=="eth*", NAME="custom_name"
nixos/tests/nextcloud/with-mysql-and-memcached.nix+1−22
@@ -26,6 +26,7 @@ in {
26 redis = false;
26 redis = false;
27 memcached = true;
27 memcached = true;
29+ database.createLocally = true;
29 config = {
30 config = {
30 dbtype = "mysql";
31 dbtype = "mysql";
31 dbname = "nextcloud";
32 dbname = "nextcloud";
@@ -38,28 +39,6 @@ in {
44− bind-address = "127.0.0.1";
46− # FIXME(@Ma27) Nextcloud isn't compatible with mariadb 10.6,
47− # this is a workaround.
48− # See https://help.nextcloud.com/t/update-to-next-cloud-21-0-2-has-get-an-error/117028/22
49− innodb_read_only_compressed = 0;
51− package = pkgs.mariadb;
53− initialScript = pkgs.writeText "mysql-init" ''
54− CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'hunter2';
55− CREATE DATABASE IF NOT EXISTS nextcloud;
56− GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
57− CREATE TEMPORARY TABLES ON nextcloud.* TO 'nextcloud'@'localhost'
58− IDENTIFIED BY 'hunter2';
63 systemd.services.nextcloud-setup= {
42 systemd.services.nextcloud-setup= {
64 requires = ["mysql.service"];
43 requires = ["mysql.service"];
65 after = ["mysql.service"];
44 after = ["mysql.service"];
nixos/tests/nixops/default.nix+1−1
@@ -97,7 +97,7 @@ let
97 derivations and all build dependency outputs, all the way down.
97 derivations and all build dependency outputs, all the way down.
99 allDrvOutputs = pkg:
99 allDrvOutputs = pkg:
100− let name = lib.strings.sanitizeDerivationName "allDrvOutputs-${pkg.pname or pkg.name or "unknown"}";
100+ let name = "allDrvOutputs-${pkg.pname or pkg.name or "unknown"}";
102 pkgs.runCommand name { refs = pkgs.writeReferencesToFile pkg.drvPath; } ''
102 pkgs.runCommand name { refs = pkgs.writeReferencesToFile pkg.drvPath; } ''
103 touch $out
103 touch $out
nixos/tests/openssh.nix+12−6
@@ -80,17 +80,21 @@ in {
81 client.wait_for_unit("network.target")
81 client.wait_for_unit("network.target")
82 client.succeed(
82 client.succeed(
83− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'echo hello world' >&2"
83+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'echo hello world' >&2",
85 client.succeed(
86 client.succeed(
86− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'ulimit -l' | grep 1024"
87+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'ulimit -l' | grep 1024",
89 client.succeed(
91 client.succeed(
90− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'echo hello world' >&2"
92+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'echo hello world' >&2",
92 client.succeed(
95 client.succeed(
93− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'ulimit -l' | grep 1024"
96+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'ulimit -l' | grep 1024",
96 with subtest("configured-authkey"):
100 with subtest("configured-authkey"):
@@ -99,10 +103,12 @@ in {
100 client.succeed("chmod 600 privkey.snakeoil")
104 client.succeed("chmod 600 privkey.snakeoil")
101 client.succeed(
105 client.succeed(
102− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server true"
106+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server true",
104 client.succeed(
109 client.succeed(
105− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server_lazy true"
110+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server_lazy true",
108 with subtest("localhost-only"):
114 with subtest("localhost-only"):
nixos/tests/pam/pam-oath-login.nix+1−1
@@ -7,7 +7,7 @@ let
7 # how many passwords have been made. In this env, we'll always be on
7 # how many passwords have been made. In this env, we'll always be on
8 # the 0th counter, so the password is static.
8 # the 0th counter, so the password is static.
10− # Generated in nix-shell -p oathToolkit
10+ # Generated in nix-shell -p oath-toolkit
11 # via: oathtool -v -d6 -w10 cdd4083ef8ff1fa9178c6d46bfb1a3
11 # via: oathtool -v -d6 -w10 cdd4083ef8ff1fa9178c6d46bfb1a3
12 # and picking a the first 4:
12 # and picking a the first 4:
13 oathSnakeOilPassword1 = "143349";
13 oathSnakeOilPassword1 = "143349";
nixos/tests/pam/pam-ussh.nixnew file+70
@@ -0,0 +1,70 @@
1+import ../make-test-python.nix ({ pkgs, lib, ... }:
4+ testOnlySSHCredentials = pkgs.runCommand "pam-ussh-test-ca" {
5+ nativeBuildInputs = [ pkgs.openssh ];
8+ ssh-keygen -t ed25519 -N "" -f $out/ca
10+ ssh-keygen -t ed25519 -N "" -f $out/alice
11+ ssh-keygen -s $out/ca -I "alice user key" -n "alice,root" -V 19700101:forever $out/alice.pub
13+ ssh-keygen -t ed25519 -N "" -f $out/bob
14+ ssh-keygen -s $out/ca -I "bob user key" -n "bob" -V 19700101:forever $out/bob.pub
16+ makeTestScript = user: pkgs.writeShellScript "pam-ussh-${user}-test-script" ''
19+ eval $(${pkgs.openssh}/bin/ssh-agent)
23+ cp ${testOnlySSHCredentials}/${user}{,.pub,-cert.pub} $HOME/.ssh
24+ chmod 600 $HOME/.ssh/${user}
25+ chmod 644 $HOME/.ssh/${user}{,-cert}.pub
29+ ${pkgs.openssh}/bin/ssh-add $HOME/.ssh/${user}
30+ ${pkgs.openssh}/bin/ssh-add -l &>2
36+ meta.maintainers = with lib.maintainers; [ lukegb ];
41+ users.users.alice = { isNormalUser = true; extraGroups = [ "wheel" ]; };
42+ users.users.bob = { isNormalUser = true; extraGroups = [ "wheel" ]; };
44+ security.pam.ussh = {
46+ authorizedPrincipals = "root";
47+ caFile = "${testOnlySSHCredentials}/ca.pub";
53+ Defaults lecture="never"
60+ with subtest("alice should be allowed to escalate to root"):
62+ 'su -c "${makeTestScript "alice"}" -l alice | grep root'
65+ with subtest("bob should not be allowed to escalate to root"):
67+ 'su -c "${makeTestScript "bob"}" -l bob | grep root'
nixos/tests/paperless-ng.nix → nixos/tests/paperless.nixrenamed+11−12
@@ -1,30 +1,32 @@
1import ./make-test-python.nix ({ lib, ... }: {
1import ./make-test-python.nix ({ lib, ... }: {
2− name = "paperless-ng";
2+ name = "paperless";
3 meta.maintainers = with lib.maintainers; [ earvstedt Flakebi ];
3 meta.maintainers = with lib.maintainers; [ earvstedt Flakebi ];
5 nodes.machine = { pkgs, ... }: {
5 nodes.machine = { pkgs, ... }: {
6 environment.systemPackages = with pkgs; [ imagemagick jq ];
6 environment.systemPackages = with pkgs; [ imagemagick jq ];
7− services.paperless-ng = {
7+ services.paperless = {
8 enable = true;
8 enable = true;
9 passwordFile = builtins.toFile "password" "admin";
9 passwordFile = builtins.toFile "password" "admin";
13 testScript = ''
13 testScript = ''
14− machine.wait_for_unit("paperless-ng-consumer.service")
14+ import json
16− with subtest("Create test doc"):
16+ machine.wait_for_unit("paperless-consumer.service")
18+ with subtest("Add a document via the file system"):
17 machine.succeed(
19 machine.succeed(
18 "convert -size 400x40 xc:white -font 'DejaVu-Sans' -pointsize 20 -fill black "
20 "convert -size 400x40 xc:white -font 'DejaVu-Sans' -pointsize 20 -fill black "
19 "-annotate +5+20 'hello world 16-10-2005' /var/lib/paperless/consume/doc.png"
21 "-annotate +5+20 'hello world 16-10-2005' /var/lib/paperless/consume/doc.png"
22 with subtest("Web interface gets ready"):
24 with subtest("Web interface gets ready"):
23− machine.wait_for_unit("paperless-ng-web.service")
25+ machine.wait_for_unit("paperless-web.service")
24 # Wait until server accepts connections
26 # Wait until server accepts connections
25 machine.wait_until_succeeds("curl -fs localhost:28981")
27 machine.wait_until_succeeds("curl -fs localhost:28981")
27− with subtest("Create web test doc"):
29+ with subtest("Add a document via the web interface"):
28 machine.succeed(
30 machine.succeed(
29 "convert -size 400x40 xc:white -font 'DejaVu-Sans' -pointsize 20 -fill black "
31 "convert -size 400x40 xc:white -font 'DejaVu-Sans' -pointsize 20 -fill black "
30 "-annotate +5+20 'hello web 16-10-2005' /tmp/webdoc.png"
32 "-annotate +5+20 'hello web 16-10-2005' /tmp/webdoc.png"
@@ -35,11 +37,8 @@ import ./make-test-python.nix ({ lib, ... }: {
35 machine.wait_until_succeeds(
37 machine.wait_until_succeeds(
36 "(($(curl -u admin:admin -fs localhost:28981/api/documents/ | jq .count) == 2))"
38 "(($(curl -u admin:admin -fs localhost:28981/api/documents/ | jq .count) == 2))"
38− assert "2005-10-16" in machine.succeed(
39− "curl -u admin:admin -fs localhost:28981/api/documents/ | jq '.results | .[0] | .created'"
40+ docs = json.loads(machine.succeed("curl -u admin:admin -fs localhost:28981/api/documents/"))['results']
40− )
41+ assert "2005-10-16" in docs[0]['created']
41− assert "2005-10-16" in machine.succeed(
42+ assert "2005-10-16" in docs[1]['created']
42− "curl -u admin:admin -fs localhost:28981/api/documents/ | jq '.results | .[1] | .created'"
nixos/tests/pdns-recursor.nix+4−1
@@ -1,12 +1,15 @@
1import ./make-test-python.nix ({ pkgs, ... }: {
1import ./make-test-python.nix ({ pkgs, ... }: {
2− name = "powerdns";
2+ name = "powerdns-recursor";
4 nodes.server = { ... }: {
4 nodes.server = { ... }: {
5 services.pdns-recursor.enable = true;
5 services.pdns-recursor.enable = true;
6+ services.pdns-recursor.exportHosts= true;
7+ networking.hosts."192.0.2.1" = [ "example.com" ];
8 testScript = ''
10 testScript = ''
9 server.wait_for_unit("pdns-recursor")
11 server.wait_for_unit("pdns-recursor")
10 server.wait_for_open_port("53")
12 server.wait_for_open_port("53")
13+ assert "192.0.2.1" in server.succeed("host example.com localhost")
nixos/tests/pgadmin4.nix+37−47
@@ -1,52 +1,27 @@
1−import ./make-test-python.nix ({ pkgs, lib, ... }:
1+import ./make-test-python.nix ({ pkgs, lib, buildDeps ? [ ], pythonEnv ? [ ], ... }:
4+ This test suite replaces the typical pytestCheckHook function in python
5+ packages. Pgadmin4 test suite needs a running and configured postgresql
6+ server. This is why this test exists.
8+ To not repeat all the python dependencies needed, this test is called directly
9+ from the pgadmin4 derivation, which also passes the currently
10+ used propagatedBuildInputs and any python overrides.
12+ Unfortunately, there doesn't seem to be an easy way to otherwise include
13+ the needed packages here.
15+ Due the the needed parameters a direct call to "nixosTests.pgadmin4" fails
16+ and needs to be called as "pgadmin4.tests"
4 pgadmin4SrcDir = "/pgadmin";
21 pgadmin4SrcDir = "/pgadmin";
5 pgadmin4Dir = "/var/lib/pgadmin";
22 pgadmin4Dir = "/var/lib/pgadmin";
6 pgadmin4LogDir = "/var/log/pgadmin";
23 pgadmin4LogDir = "/var/log/pgadmin";
8− python-with-needed-packages = pkgs.python3.withPackages (ps: with ps; [
52 name = "pgadmin4";
27 name = "pgadmin4";
@@ -54,12 +29,27 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
55 nodes.machine = { pkgs, ... }: {
30 nodes.machine = { pkgs, ... }: {
56 imports = [ ./common/x11.nix ];
31 imports = [ ./common/x11.nix ];
32+ # needed because pgadmin 6.8 will fail, if those dependencies get updated
35+ pythonPackages = pythonEnv;
57 environment.systemPackages = with pkgs; [
39 environment.systemPackages = with pkgs; [
59 postgresql
41 postgresql
60− python-with-needed-packages
61 chromedriver
42 chromedriver
44+ # include the same packages as in pgadmin minus speaklater3
45+ (python3.withPackages
48+ # test suite package requirements
49+ pythonPackages.testscenarios
50+ pythonPackages.selenium
64 services.postgresql = {
54 services.postgresql = {
65 enable = true;
55 enable = true;
@@ -120,7 +110,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
120 with subtest("run browser test"):
110 with subtest("run browser test"):
121 machine.succeed(
111 machine.succeed(
122 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
112 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
123− && ${python-with-needed-packages.interpreter} regression/runtests.py --pkg browser --exclude \
113+ && python regression/runtests.py --pkg browser --exclude \
124 browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login'
114 browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login'
@@ -130,13 +120,13 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
130 machine.succeed(
120 machine.succeed(
131 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
121 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
132 && export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [];}} \
122 && export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [];}} \
133− && ${python-with-needed-packages.interpreter} regression/runtests.py --pkg feature_tests'
123+ && python regression/runtests.py --pkg feature_tests'
136 with subtest("run resql test"):
126 with subtest("run resql test"):
137 machine.succeed(
127 machine.succeed(
138 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
128 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
139− && ${python-with-needed-packages.interpreter} regression/runtests.py --pkg resql'
129+ && python regression/runtests.py --pkg resql'
nixos/tests/snapcast.nix+1
@@ -19,6 +19,7 @@ in {
19 port = port;
19 port = port;
20 tcp.port = tcpPort;
20 tcp.port = tcpPort;
21 http.port = httpPort;
21 http.port = httpPort;
22 buffer = bufferSize;
23 buffer = bufferSize;
23 streams = {
24 streams = {
nixos/tests/step-ca.nix+1
@@ -9,6 +9,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
14 caserver =
15 caserver =
nixos/tests/systemd-initrd-btrfs-raid.nixnew file+45
@@ -0,0 +1,45 @@
1+import ./make-test-python.nix ({ lib, pkgs, ... }: {
2+ name = "systemd-initrd-btrfs-raid";
4+ nodes.machine = { pkgs, ... }: {
7+ emptyDiskImages = [ 512 512 ];
11+ boot.loader.systemd-boot.enable = true;
12+ boot.loader.efi.canTouchEfiVariables = true;
14+ environment.systemPackages = with pkgs; [ btrfs-progs ];
15+ boot.initrd.systemd = {
17+ emergencyAccess = true;
20+ specialisation.boot-btrfs-raid.configuration = {
21+ fileSystems = lib.mkVMOverride {
22+ "/".fsType = lib.mkForce "btrfs";
24+ virtualisation.bootDevice = "/dev/vdc";
30+ machine.succeed("mkfs.btrfs -d raid0 /dev/vdc /dev/vdd")
31+ machine.succeed("mkdir -p /mnt && mount /dev/vdc /mnt && echo hello > /mnt/test && umount /mnt")
34+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-btrfs-raid.conf")
35+ machine.succeed("sync")
37+ machine.wait_for_unit("multi-user.target")
39+ # Ensure we have successfully booted from the RAID
40+ assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
41+ assert "/dev/vdc on / type btrfs" in machine.succeed("mount")
42+ assert "hello" in machine.succeed("cat /test")
43+ assert "Total devices 2" in machine.succeed("btrfs filesystem show")
nixos/tests/systemd-initrd-luks-keyfile.nixnew file+53
@@ -0,0 +1,53 @@
1+import ./make-test-python.nix ({ lib, pkgs, ... }: let
3+ keyfile = pkgs.writeText "luks-keyfile" ''
4+ MIGHAoGBAJ4rGTSo/ldyjQypd0kuS7k2OSsmQYzMH6TNj3nQ/vIUjDn7fqa3slt2
5+ gV6EK3TmTbGc4tzC1v4SWx2m+2Bjdtn4Fs4wiBwn1lbRdC6i5ZYCqasTWIntWn+6
6+ FllUkMD5oqjOR/YcboxG8Z3B5sJuvTP9llsF+gnuveWih9dpbBr7AgEC
10+ name = "systemd-initrd-luks-keyfile";
12+ nodes.machine = { pkgs, ... }: {
15+ emptyDiskImages = [ 512 ];
16+ useBootLoader = true;
19+ boot.loader.systemd-boot.enable = true;
21+ environment.systemPackages = with pkgs; [ cryptsetup ];
22+ boot.initrd.systemd = {
24+ emergencyAccess = true;
27+ specialisation.boot-luks.configuration = {
28+ boot.initrd.luks.devices = lib.mkVMOverride {
31+ keyFile = "/etc/cryptroot.key";
34+ virtualisation.bootDevice = "/dev/mapper/cryptroot";
35+ boot.initrd.secrets."/etc/cryptroot.key" = keyfile;
40+ # Create encrypted volume
41+ machine.wait_for_unit("multi-user.target")
42+ machine.succeed("cryptsetup luksFormat -q --iter-time=1 -d ${keyfile} /dev/vdc")
44+ # Boot from the encrypted disk
45+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
46+ machine.succeed("sync")
49+ # Boot and decrypt the disk
50+ machine.wait_for_unit("multi-user.target")
51+ assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
nixos/tests/systemd-initrd-luks-password.nixnew file+48
@@ -0,0 +1,48 @@
1+import ./make-test-python.nix ({ lib, pkgs, ... }: {
2+ name = "systemd-initrd-luks-password";
4+ nodes.machine = { pkgs, ... }: {
7+ emptyDiskImages = [ 512 512 ];
11+ boot.loader.systemd-boot.enable = true;
13+ environment.systemPackages = with pkgs; [ cryptsetup ];
14+ boot.initrd.systemd = {
16+ emergencyAccess = true;
19+ specialisation.boot-luks.configuration = {
20+ boot.initrd.luks.devices = lib.mkVMOverride {
21+ # We have two disks and only type one password - key reuse is in place
22+ cryptroot.device = "/dev/vdc";
23+ cryptroot2.device = "/dev/vdd";
25+ virtualisation.bootDevice = "/dev/mapper/cryptroot";
30+ # Create encrypted volume
31+ machine.wait_for_unit("multi-user.target")
32+ machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
33+ machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdd -")
35+ # Boot from the encrypted disk
36+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
37+ machine.succeed("sync")
40+ # Boot and decrypt the disk
42+ machine.wait_for_console_text("Please enter passphrase for disk cryptroot")
43+ machine.send_console("supersecret\n")
44+ machine.wait_for_unit("multi-user.target")
46+ assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
nixos/tests/systemd-initrd-simple.nixnew file+44
@@ -0,0 +1,44 @@
1+import ./make-test-python.nix ({ lib, pkgs, ... }: {
2+ name = "systemd-initrd-simple";
4+ nodes.machine = { pkgs, ... }: {
5+ boot.initrd.systemd = {
7+ emergencyAccess = true;
9+ fileSystems = lib.mkVMOverride {
10+ "/".autoResize = true;
17+ with subtest("handover to stage-2 systemd works"):
18+ machine.wait_for_unit("multi-user.target")
19+ machine.succeed("systemd-analyze | grep -q '(initrd)'") # direct handover
20+ machine.succeed("touch /testfile") # / is writable
21+ machine.fail("touch /nix/store/testfile") # /nix/store is not writable
22+ # Special filesystems are mounted by systemd
23+ machine.succeed("[ -e /run/booted-system ]") # /run
24+ machine.succeed("[ -e /sys/class ]") # /sys
25+ machine.succeed("[ -e /dev/null ]") # /dev
26+ machine.succeed("[ -e /proc/1 ]") # /proc
27+ # stage-2-init mounted more special filesystems
28+ machine.succeed("[ -e /dev/shm ]") # /dev/shm
29+ machine.succeed("[ -e /dev/pts/ptmx ]") # /dev/pts
30+ machine.succeed("[ -e /run/keys ]") # /run/keys
33+ with subtest("growfs works"):
34+ oldAvail = machine.succeed("df --output=avail / | sed 1d")
37+ subprocess.check_call(["qemu-img", "resize", "vm-state-machine/machine.qcow2", "+1G"])
40+ newAvail = machine.succeed("df --output=avail / | sed 1d")
42+ assert int(oldAvail) < int(newAvail), "File system did not grow"
nixos/tests/systemd-initrd-swraid.nixnew file+50
@@ -0,0 +1,50 @@
1+import ./make-test-python.nix ({ lib, pkgs, ... }: {
2+ name = "systemd-initrd-swraid";
4+ nodes.machine = { pkgs, ... }: {
7+ emptyDiskImages = [ 512 512 ];
11+ boot.loader.systemd-boot.enable = true;
12+ boot.loader.efi.canTouchEfiVariables = true;
14+ environment.systemPackages = with pkgs; [ mdadm e2fsprogs ]; # for mdadm and mkfs.ext4
18+ emergencyAccess = true;
23+ ARRAY /dev/md0 devices=/dev/vdc,/dev/vdd
26+ kernelModules = [ "raid0" ];
29+ specialisation.boot-swraid.configuration.virtualisation.bootDevice = "/dev/disk/by-label/testraid";
34+ machine.succeed("mdadm --create --force /dev/md0 -n 2 --level=raid0 /dev/vdc /dev/vdd")
35+ machine.succeed("mkfs.ext4 -L testraid /dev/md0")
36+ machine.succeed("mkdir -p /mnt && mount /dev/md0 /mnt && echo hello > /mnt/test && umount /mnt")
39+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-swraid.conf")
40+ machine.succeed("sync")
42+ machine.wait_for_unit("multi-user.target")
44+ # Ensure we have successfully booted from the RAID
45+ assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
46+ assert "/dev/md0 on / type ext4" in machine.succeed("mount")
47+ assert "hello" in machine.succeed("cat /test")
48+ assert "md0" in machine.succeed("cat /proc/mdstat")
nixos/tests/systemd-networkd.nix+10
@@ -8,6 +8,9 @@ let generateNodeConf = { lib, pkgs, config, privk, pubk, peerId, nodeId, ...}: {
8 environment.systemPackages = with pkgs; [ wireguard-tools ];
8 environment.systemPackages = with pkgs; [ wireguard-tools ];
9 systemd.network = {
9 systemd.network = {
10 enable = true;
10 enable = true;
12+ routeTables.custom = 23;
11 netdevs = {
14 netdevs = {
12 "90-wg0" = {
15 "90-wg0" = {
13 netdevConfig = { Kind = "wireguard"; Name = "wg0"; };
16 netdevConfig = { Kind = "wireguard"; Name = "wg0"; };
@@ -39,6 +42,7 @@ let generateNodeConf = { lib, pkgs, config, privk, pubk, peerId, nodeId, ...}: {
39 address = [ "10.0.0.${nodeId}/32" ];
42 address = [ "10.0.0.${nodeId}/32" ];
40 routes = [
43 routes = [
41 { routeConfig = { Gateway = "10.0.0.${nodeId}"; Destination = "10.0.0.0/24"; }; }
44 { routeConfig = { Gateway = "10.0.0.${nodeId}"; Destination = "10.0.0.0/24"; }; }
45+ { routeConfig = { Gateway = "10.0.0.${nodeId}"; Destination = "10.0.0.0/24"; Table = "custom"; }; }
44 "30-eth1" = {
48 "30-eth1" = {
@@ -87,6 +91,12 @@ testScript = ''
87 node1.wait_for_unit("systemd-networkd-wait-online.service")
91 node1.wait_for_unit("systemd-networkd-wait-online.service")
88 node2.wait_for_unit("systemd-networkd-wait-online.service")
92 node2.wait_for_unit("systemd-networkd-wait-online.service")
94+ # ================================
96+ # ================================
97+ node1.succeed("grep RouteTable=custom:23 /etc/systemd/networkd.conf")
98+ node1.succeed("sudo ip route show table custom | grep '10.0.0.0/24 via 10.0.0.1 dev wg0 proto static'")
90 # ================================
100 # ================================
91 # Wireguard
101 # Wireguard
92 # ================================
102 # ================================
nixos/tests/systemd-shutdown.nixnew file+26
@@ -0,0 +1,26 @@
1+import ./make-test-python.nix ({ pkgs, systemdStage1 ? false, ...} : let
2+ msg = "Shutting down NixOS";
4+ name = "systemd-shutdown";
5+ meta = with pkgs.lib.maintainers; {
6+ maintainers = [ das_j ];
10+ imports = [ ../modules/profiles/minimal.nix ];
11+ systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/shutdown-message".source = pkgs.writeShellScript "shutdown-message" ''
17+ machine.wait_for_unit("multi-user.target")
18+ # .shutdown() would wait for the machine to power off
19+ machine.succeed("systemctl poweroff")
20+ # Message printed by systemd-shutdown
21+ machine.wait_for_console_text("Unmounting '/oldroot'")
22+ machine.wait_for_console_text("${msg}")
23+ # Don't try to sync filesystems
24+ machine.booted = False
nixos/tests/taskserver.nix+1
@@ -63,6 +63,7 @@ in {
63 server = {
63 server = {
64 services.taskserver.enable = true;
64 services.taskserver.enable = true;
65 services.taskserver.listenHost = "::";
65 services.taskserver.listenHost = "::";
66+ services.taskserver.openFirewall = true;
66 services.taskserver.fqdn = "server";
67 services.taskserver.fqdn = "server";
67 services.taskserver.organisations = {
68 services.taskserver.organisations = {
68 testOrganisation.users = [ "alice" "foo" ];
69 testOrganisation.users = [ "alice" "foo" ];
nixos/tests/vaultwarden.nix−1
@@ -113,7 +113,6 @@ let
113 driver.find_element_by_css_selector('input#masterPasswordRetype').send_keys(
113 driver.find_element_by_css_selector('input#masterPasswordRetype').send_keys(
114 '${userPassword}'
114 '${userPassword}'
116− driver.find_element_by_css_selector('input#acceptPolicies').click()
118 driver.find_element_by_xpath("//button[contains(., 'Submit')]").click()
117 driver.find_element_by_xpath("//button[contains(., 'Submit')]").click()
nixos/tests/web-apps/netbox.nix+1−1
@@ -5,7 +5,7 @@ import ../make-test-python.nix ({ lib, pkgs, ... }: {
5 maintainers = [ n0emis ];
5 maintainers = [ n0emis ];
8− machine = { ... }: {
8+ nodes.machine = { ... }: {
9 services.netbox = {
9 services.netbox = {
10 enable = true;
10 enable = true;
11 secretKeyFile = pkgs.writeText "secret" ''
11 secretKeyFile = pkgs.writeText "secret" ''
nixos/tests/web-apps/nifi.nixnew file+30
@@ -0,0 +1,30 @@
1+import ../make-test-python.nix ({pkgs, ...}:
4+ meta.maintainers = with pkgs.lib.maintainers; [ izorkin ];
7+ nifi = { pkgs, ... }: {
22+ nifi.wait_for_unit("nifi.service")
23+ nifi.wait_for_open_port(8080)
25+ # Check if NiFi is running
26+ nifi.succeed("curl --fail http://127.0.0.1:8080/nifi/login 2> /dev/null | grep 'NiFi Login'")
nixos/tests/web-apps/peertube.nix+3−2
@@ -30,10 +30,11 @@ import ../make-test-python.nix ({pkgs, ...}:
33− services.redis = {
33+ services.redis.servers.peertube = {
34 enable = true;
34 enable = true;
35 bind = "0.0.0.0";
35 bind = "0.0.0.0";
36 requirePass = "turrQfaQwnanGbcsdhxy";
36 requirePass = "turrQfaQwnanGbcsdhxy";
@@ -109,7 +110,7 @@ import ../make-test-python.nix ({pkgs, ...}:
109 start_all()
110 start_all()
111 database.wait_for_unit("postgresql.service")
112 database.wait_for_unit("postgresql.service")
112− database.wait_for_unit("redis.service")
113+ database.wait_for_unit("redis-peertube.service")
114 database.wait_for_open_port(5432)
115 database.wait_for_open_port(5432)
115 database.wait_for_open_port(6379)
116 database.wait_for_open_port(6379)
nixos/tests/xmonad-xdg-autostart.nixnew file+35
@@ -0,0 +1,35 @@
1+import ./make-test-python.nix ({ lib, ... }: {
2+ name = "xmonad-xdg-autostart";
3+ meta.maintainers = with lib.maintainers; [ oxalica ];
5+ nodes.machine = { pkgs, config, ... }: {
6+ imports = [ ./common/x11.nix ./common/user-account.nix ];
7+ test-support.displayManager.auto.user = "alice";
8+ services.xserver.displayManager.defaultSession = "none+xmonad";
9+ services.xserver.windowManager.xmonad.enable = true;
10+ services.xserver.desktopManager.runXdgAutostartIfNone = true;
12+ environment.systemPackages = [
13+ (pkgs.writeTextFile {
14+ name = "test-xdg-autostart";
15+ destination = "/etc/xdg/autostart/test-xdg-autostart.desktop";
18+ Name=test-xdg-autoatart
21+ Exec=${pkgs.coreutils}/bin/touch ${config.users.users.alice.home}/xdg-autostart-executed
27+ testScript = { nodes, ... }:
29+ user = nodes.machine.config.users.users.alice;
33+ machine.wait_for_file("${user.home}/xdg-autostart-executed")
nixos/tests/xmpp/xmpp-sendmessage.nix+1−4
@@ -51,11 +51,8 @@ class CthonTest(ClientXMPP):
51 log.info('Message sent')
51 log.info('Message sent')
53 # Test http upload (XEP_0363)
53 # Test http upload (XEP_0363)
54− def timeout_callback(arg):
55− log.error("ERROR: Cannot upload file. XEP_0363 seems broken")
58− url = await self['xep_0363'].upload_file("${dummyFile}",timeout=10, timeout_callback=timeout_callback)
55+ url = await self['xep_0363'].upload_file("${dummyFile}",timeout=10)
60 log.error("ERROR: Cannot run upload command. XEP_0363 seems broken")
57 log.error("ERROR: Cannot run upload command. XEP_0363 seems broken")
61 sys.exit(1)
58 sys.exit(1)
@@ -127,4 +127,54 @@ in {
129 installer = (import ./installer.nix { }).zfsroot;
129 installer = (import ./installer.nix { }).zfsroot;
131+ expand-partitions = makeTest {
132+ name = "multi-disk-zfs";
134+ machine = { pkgs, ... }: {
135+ environment.systemPackages = [ pkgs.parted ];
136+ boot.supportedFilesystems = [ "zfs" ];
137+ networking.hostId = "00000000";
140+ emptyDiskImages = [ 20480 20480 20480 20480 20480 20480 ];
143+ specialisation.resize.configuration = {
144+ services.zfs.expandOnBoot = [ "tank" ];
149+ testScript = { nodes, ... }:
152+ machine.wait_for_unit("default.target")
153+ print(machine.succeed('mount'))
155+ print(machine.succeed('parted --script /dev/vdb -- mklabel gpt'))
156+ print(machine.succeed('parted --script /dev/vdb -- mkpart primary 1M 70M'))
158+ print(machine.succeed('parted --script /dev/vdc -- mklabel gpt'))
159+ print(machine.succeed('parted --script /dev/vdc -- mkpart primary 1M 70M'))
161+ print(machine.succeed('zpool create tank mirror /dev/vdb1 /dev/vdc1 mirror /dev/vdd /dev/vde mirror /dev/vdf /dev/vdg'))
162+ print(machine.succeed('zpool list -v'))
163+ print(machine.succeed('mount'))
164+ start_size = int(machine.succeed('df -k --output=size /tank | tail -n1').strip())
166+ print(machine.succeed("/run/current-system/specialisation/resize/bin/switch-to-configuration test >&2"))
167+ machine.wait_for_unit("zpool-expand-pools.service")
168+ machine.wait_for_unit("zpool-expand@tank.service")
170+ print(machine.succeed('zpool list -v'))
171+ new_size = int(machine.succeed('df -k --output=size /tank | tail -n1').strip())
173+ if (new_size - start_size) > 20000000:
174+ print("Disk grew appropriately.")
176+ print(f"Disk went from {start_size} to {new_size}, which doesn't seem right.")
pkgs/applications/accessibility/espeakup/default.nixnew file+46
@@ -0,0 +1,46 @@
13+stdenv.mkDerivation rec {
17+ src = fetchFromGitHub {
18+ owner = "linux-speakup";
21+ sha256 = "0lmjwafvfxy07zn18v3dzjwwpnid2xffgvy2dzlwkbns8gb60ds2";
24+ nativeBuildInputs = [
37+ PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
40+ homepage = "https://github.com/linux-speakup/espeakup";
41+ description = "Lightweight connector for espeak-ng and speakup";
42+ license = licenses.gpl3Plus;
43+ maintainers = with maintainers; [ ethindp ];
44+ platforms = with platforms; linux;
pkgs/applications/accessibility/wvkbd/default.nixnew file+36
@@ -0,0 +1,36 @@
14+stdenv.mkDerivation rec {
18+ src = fetchFromGitHub {
19+ owner = "jjsullivan5196";
22+ sha256 = "sha256-5UV2PMrLXtF3AxjfPxxwFRkgVef+Ap8nG1v795o0bWE=";
25+ nativeBuildInputs = [ pkg-config ];
26+ buildInputs = [ wayland-scanner wayland pango glib harfbuzz cairo libxkbcommon ];
27+ installFlags = [ "PREFIX=$(out)" ];
30+ homepage = "https://github.com/jjsullivan5196/wvkbd";
31+ description = "On-screen keyboard for wlroots";
32+ maintainers = [ maintainers.elohmeier ];
33+ platforms = platforms.linux;
34+ license = licenses.gpl3Plus;
pkgs/applications/audio/ChowPhaser/default.nixnew file+76
@@ -0,0 +1,76 @@
1+{ alsa-lib, at-spi2-core, cmake, curl, dbus, libepoxy, fetchFromGitHub, freeglut
2+, freetype, gcc-unwrapped, gtk3, lib, libGL, libXcursor, libXdmcp, libXext
3+, libXinerama, libXrandr, libXtst, libdatrie, libjack2, libpsl, libselinux
4+, libsepol, libsysprof-capture, libthai, libxkbcommon, pcre, pkg-config
5+, python3, sqlite, stdenv }:
7+stdenv.mkDerivation rec {
11+ src = fetchFromGitHub {
12+ owner = "jatinchowdhury18";
15+ fetchSubmodules = true;
16+ sha256 = "sha256-9wo7ZFMruG3QNvlpILSvrFh/Sx6J1qnlWc8+aQyS4tQ=";
19+ nativeBuildInputs = [ pkg-config cmake ];
52+ "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
53+ "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
54+ "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
58+ mkdir -p $out/lib/lv2 $out/lib/vst3 $out/bin $out/share/doc/ChowPhaser/
59+ cd ChowPhaserMono_artefacts/Release
60+ cp libChowPhaserMono_SharedCode.a $out/lib
61+ cp -r VST3/ChowPhaserMono.vst3 $out/lib/vst3
62+ cp Standalone/ChowPhaserMono $out/bin
63+ cd ../../ChowPhaserStereo_artefacts/Release
64+ cp libChowPhaserStereo_SharedCode.a $out/lib
65+ cp -r VST3/ChowPhaserStereo.vst3 $out/lib/vst3
66+ cp Standalone/ChowPhaserStereo $out/bin
70+ homepage = "https://github.com/jatinchowdhury18/ChowPhaser";
71+ description = "Phaser effect based loosely on the Schulte Compact Phasing 'A'";
72+ license = with licenses; [ bsd3 ];
73+ maintainers = with maintainers; [ magnetophon ];
74+ platforms = platforms.linux;
pkgs/applications/audio/LibreArp/default.nixnew file+53
@@ -0,0 +1,53 @@
1+{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, cairo, libxkbcommon
2+, xcbutilcursor, xcbutilkeysyms, xcbutil, libXrandr, libXinerama, libXcursor
3+, alsa-lib, libjack2, lv2, gcc-unwrapped, curl}:
5+stdenv.mkDerivation rec {
9+ src = fetchFromGitLab {
13+ hash = "sha256-jCUT/sflO9L57xRTqNR90RbwJ0uZ+xJVXnB3n+FhWBo=";
14+ fetchSubmodules = true;
17+ nativeBuildInputs = [ cmake pkg-config ];
34+ "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
35+ "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
36+ "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
40+ mkdir -p $out/lib/vst3
41+ cd LibreArp_artefacts/Release
42+ cp -r VST3/LibreArp.vst3 $out/lib/vst3
47+ "A pattern-based arpeggio generator plugin.";
48+ homepage = "https://librearp.gitlab.io/";
49+ license = licenses.gpl3Plus;
50+ platforms = [ "x86_64-linux" ];
51+ maintainers = with maintainers; [ magnetophon ];
pkgs/applications/audio/LibreArp/lv2.nixnew file+53
@@ -0,0 +1,53 @@
1+{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, cairo, libxkbcommon
2+, xcbutilcursor, xcbutilkeysyms, xcbutil, libXrandr, libXinerama, libXcursor
3+, alsa-lib, libjack2, lv2, gcc-unwrapped, curl}:
5+stdenv.mkDerivation rec {
6+ pname = "LibreArp-lv2";
9+ src = fetchFromGitLab {
12+ rev = "${version}-lv2";
13+ hash = "sha256-j5SksuhC4ZXXILfOpwXNqIu5fO07a/6tiZ5qUo+p0Ug=";
14+ fetchSubmodules = true;
17+ nativeBuildInputs = [ cmake pkg-config ];
34+ "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
35+ "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
36+ "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
40+ mkdir -p $out/lib/lv2
41+ cd LibreArp_artefacts/Release
42+ cp -r LV2/LibreArp.lv2 $out/lib/lv2
47+ "A pattern-based arpeggio generator plugin.";
48+ homepage = "https://librearp.gitlab.io/";
49+ license = licenses.gpl3Plus;
50+ platforms = [ "x86_64-linux" ];
51+ maintainers = with maintainers; [ magnetophon ];
pkgs/applications/audio/amberol/default.nixnew file+75
@@ -0,0 +1,75 @@
19+stdenv.mkDerivation rec {
23+ src = fetchFromGitLab {
24+ domain = "gitlab.gnome.org";
28+ sha256 = "sha256-4yW7rVlP9Zskyt4l/VQoX+9q3TUdEuLZrNQuQvziIf4=";
31+ cargoDeps = rustPlatform.fetchCargoTarball {
33+ name = "${pname}-${version}";
34+ sha256 = "sha256-1ahEWLBmkT+B8qD0Qd1skXqk1wvP6yuFNAQBRdispC4=";
38+ patchShebangs build-aux
41+ nativeBuildInputs = [
49+ ] ++ (with rustPlatform; [
60+ gst_all_1.gst-plugins-base
61+ gst_all_1.gst-plugins-good
62+ gst_all_1.gst-plugins-bad
63+ gst_all_1.gst-plugins-ugly
69+ homepage = "https://gitlab.gnome.org/ebassi/amberol";
70+ description = "A small and simple sound and music player";
71+ maintainers = with maintainers; [ linsui ];
72+ license = licenses.gpl3Plus;
73+ platforms = platforms.linux;
pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patchdeleted−355
@@ -1,355 +0,0 @@
1−From deeb435829d73524df851f6f4c2d4be552c99230 Mon Sep 17 00:00:00 2001
2−From: Dmitry Vedenko <dmitry@crsib.me>
3−Date: Fri, 1 Oct 2021 16:21:22 +0300
4−Subject: [PATCH] Use a different approach to estimate the disk space usage
6−New a approach is a bit less precise, but removes the requirement for the "private" SQLite3 table and allows Audacity to be built against system SQLite3.
8− cmake-proxies/sqlite/CMakeLists.txt | 5 -
9− src/DBConnection.h | 4 +-
10− src/ProjectFileIO.cpp | 269 +++++-----------------------
11− 3 files changed, 44 insertions(+), 234 deletions(-)
13−diff --git a/cmake-proxies/sqlite/CMakeLists.txt b/cmake-proxies/sqlite/CMakeLists.txt
14−index 63d70637c..d7b9b95ef 100644
15−--- a/cmake-proxies/sqlite/CMakeLists.txt
16−+++ b/cmake-proxies/sqlite/CMakeLists.txt
17−@@ -19,11 +19,6 @@ list( APPEND INCLUDES
22−- # We need the dbpage table for space calculations.
24−- SQLITE_ENABLE_DBPAGE_VTAB=1
26− # Can't be set after a WAL mode database is initialized, so change
27− # the default here to ensure all project files get the same page
29−diff --git a/src/DBConnection.h b/src/DBConnection.h
30−index 16a7fc9d4..07d3af95e 100644
31−--- a/src/DBConnection.h
32−+++ b/src/DBConnection.h
33−@@ -75,8 +75,8 @@ public:
40−+ GetAllSampleBlocksSize
42− sqlite3_stmt *Prepare(enum StatementID id, const char *sql);
44−diff --git a/src/ProjectFileIO.cpp b/src/ProjectFileIO.cpp
45−index 3b3e2e1fd..c9bc45af4 100644
46−--- a/src/ProjectFileIO.cpp
47−+++ b/src/ProjectFileIO.cpp
48−@@ -35,6 +35,7 @@ Paul Licameli split from AudacityProject.cpp
49− #include "widgets/ProgressDialog.h"
50− #include "wxFileNameWrapper.h"
51− #include "xml/XMLFileReader.h"
52−+#include "MemoryX.h"`
55− #if !defined(__WXMSW__)
56−@@ -2357,255 +2358,69 @@ int64_t ProjectFileIO::GetTotalUsage()
60−-// Returns the amount of disk space used by the specified sample blockid or all
61−-// of the sample blocks if the blockid is 0. It does this by using the raw SQLite
62−-// pages available from the "sqlite_dbpage" virtual table to traverse the SQLite
63−-// table b-tree described here: https://www.sqlite.org/fileformat.html
64−+// Returns the estimation of disk space used by the specified sample blockid or all
65−+// of the sample blocks if the blockid is 0. This does not include small overhead
66−+// of the internal SQLite structures, only the size used by the data
68− int64_t ProjectFileIO::GetDiskUsage(DBConnection &conn, SampleBlockID blockid /* = 0 */)
70−- // Information we need to track our travels through the b-tree
76−- unsigned char data[65536];
78−- std::vector<page> stack;
84−+ sqlite3_stmt* stmt = nullptr;
86−- // Get the rootpage for the sampleblocks table.
87−- sqlite3_stmt *stmt =
88−- conn.Prepare(DBConnection::GetRootPage,
89−- "SELECT rootpage FROM sqlite_master WHERE tbl_name = 'sampleblocks';");
90−- if (stmt == nullptr || sqlite3_step(stmt) != SQLITE_ROW)
96−- // And store it in our first stack frame
97−- stack.push_back({sqlite3_column_int64(stmt, 0)});
98−+ static const char* statement =
100−+ sum(length(blockid) + length(sampleformat) +
101−+ length(summin) + length(summax) + length(sumrms) +
102−+ length(summary256) + length(summary64k) +
104−+FROM sampleblocks;)";
106−- // All done with the statement
107−- sqlite3_clear_bindings(stmt);
108−- sqlite3_reset(stmt);
110−- // Prepare/retrieve statement to read raw database page
111−- stmt = conn.Prepare(DBConnection::GetDBPage,
112−- "SELECT data FROM sqlite_dbpage WHERE pgno = ?1;");
113−- if (stmt == nullptr)
116−+ stmt = conn.Prepare(DBConnection::GetAllSampleBlocksSize, statement);
119−- // Traverse the b-tree until we've visited all of the leaf pages or until
120−- // we find the one corresponding to the passed in sample blockid. Because we
121−- // use an integer primary key for the sampleblocks table, the traversal will
122−- // be in ascending blockid sequence.
126−- // Acces the top stack frame
127−- page &pg = stack.back();
128−+ static const char* statement =
130−+ length(blockid) + length(sampleformat) +
131−+ length(summin) + length(summax) + length(sumrms) +
132−+ length(summary256) + length(summary64k) +
134−+FROM sampleblocks WHERE blockid = ?1;)";
136−- // Read the page from the sqlite_dbpage table if it hasn't yet been loaded
137−- if (pg.numCells == 0)
139−- // Bind the page number
140−- sqlite3_bind_int64(stmt, 1, pg.pgno);
141−+ stmt = conn.Prepare(DBConnection::GetSampleBlockSize, statement);
144−- // And retrieve the page
145−- if (sqlite3_step(stmt) != SQLITE_ROW)
146−+ auto cleanup = finally(
148−+ // Clear statement bindings and rewind statement
149−+ if (stmt != nullptr)
151−- // REVIEW: Likely harmless failure - says size is zero on
153−- // LLL: Yea, but not much else we can do.
155−+ sqlite3_clear_bindings(stmt);
156−+ sqlite3_reset(stmt);
160−- // Copy the page content to the stack frame
162−- sqlite3_column_blob(stmt, 0),
163−- sqlite3_column_bytes(stmt, 0));
165−- // And retrieve the total number of cells within it
166−- pg.numCells = get2(&pg.data[3]);
168−- // Reset statement for next usage
169−- sqlite3_clear_bindings(stmt);
170−- sqlite3_reset(stmt);
173−- //wxLogDebug("%*.*spgno %lld currentCell %d numCells %d", (stack.size() - 1) * 2, (stack.size() - 1) * 2, "", pg.pgno, pg.currentCell, pg.numCells);
175−- // Process an interior table b-tree page
176−- if (pg.data[0] == 0x05)
178−- // Process the next cell if we haven't examined all of them yet
179−- if (pg.currentCell < pg.numCells)
181−- // Remember the right-most leaf page number.
182−- right = get4(&pg.data[8]);
184−- // Iterate over the cells.
186−- // If we're not looking for a specific blockid, then we always push the
187−- // target page onto the stack and leave the loop after a single iteration.
189−- // Otherwise, we match the blockid against the highest integer key contained
190−- // within the cell and if the blockid falls within the cell, we stack the
191−- // page and stop the iteration.
193−- // In theory, we could do a binary search for a specific blockid here, but
194−- // because our sample blocks are always large, we will get very few cells
195−- // per page...usually 6 or less.
197−- // In both cases, the stacked page can be either an internal or leaf page.
198−- bool stacked = false;
199−- while (pg.currentCell < pg.numCells)
201−- // Get the offset to this cell using the offset in the cell pointer
204−- // The cell pointer array starts immediately after the page header
205−- // at offset 12 and the retrieved offset is from the beginning of
207−- int celloff = get2(&pg.data[12 + (pg.currentCell * 2)]);
209−- // Bump to the next cell for the next iteration.
212−- // Get the page number this cell describes
213−- int pagenum = get4(&pg.data[celloff]);
215−- // And the highest integer key, which starts at offset 4 within the cell.
216−- int64_t intkey = 0;
217−- get_varint(&pg.data[celloff + 4], &intkey);
219−- //wxLogDebug("%*.*sinternal - right %lld celloff %d pagenum %d intkey %lld", (stack.size() - 1) * 2, (stack.size() - 1) * 2, " ", right, celloff, pagenum, intkey);
221−- // Stack the described page if we're not looking for a specific blockid
222−- // or if this page contains the given blockid.
223−- if (!blockid || blockid <= intkey)
225−- stack.push_back({pagenum, 0, 0});
231−- // If we pushed a new page onto the stack, we need to jump back up
232−- // to read the page
240−+ int rc = sqlite3_bind_int64(stmt, 1, blockid);
242−- // We've exhausted all the cells with this page, so we stack the right-most
243−- // leaf page. Ensure we only process it once.
246−- stack.push_back({right, 0, 0});
251−- // Process a leaf table b-tree page
252−- else if (pg.data[0] == 0x0d)
253−+ if (rc != SQLITE_OK)
255−- // Iterate over the cells
257−- // If we're not looking for a specific blockid, then just accumulate the
258−- // payload sizes. We will be reading every leaf page in the sampleblocks
261−- // Otherwise we break out when we find the matching blockid. In this case,
262−- // we only ever look at 1 leaf page.
264−- for (int i = 0; i < pg.numCells; i++)
266−- // Get the offset to this cell using the offset in the cell pointer
269−- // The cell pointer array starts immediately after the page header
270−- // at offset 8 and the retrieved offset is from the beginning of
272−- int celloff = get2(&pg.data[8 + (i * 2)]);
274−- // Get the total payload size in bytes of the described row.
275−- int64_t payload = 0;
276−- int digits = get_varint(&pg.data[celloff], &payload);
278−- // Get the integer key for this row.
279−- int64_t intkey = 0;
280−- get_varint(&pg.data[celloff + digits], &intkey);
282−- //wxLogDebug("%*.*sleaf - celloff %4d intkey %lld payload %lld", (stack.size() - 1) * 2, (stack.size() - 1) * 2, " ", celloff, intkey, payload);
284−- // Add this payload size to the total if we're not looking for a specific
290−- // Otherwise, return the payload size for a matching row
291−- else if (blockid == intkey)
296−+ conn.ThrowException(false);
300−- // Done with the current branch, so pop back up to the previous one (if any)
302−- } while (!stack.empty());
304−- // Return the total used for all sample blocks
308−-// Retrieves a 2-byte big-endian integer from the page data
309−-unsigned int ProjectFileIO::get2(const unsigned char *ptr)
311−- return (ptr[0] << 8) | ptr[1];
314−-// Retrieves a 4-byte big-endian integer from the page data
315−-unsigned int ProjectFileIO::get4(const unsigned char *ptr)
317−- return ((unsigned int) ptr[0] << 24) |
318−- ((unsigned int) ptr[1] << 16) |
319−- ((unsigned int) ptr[2] << 8) |
320−- ((unsigned int) ptr[3]);
323−-// Retrieves a variable length integer from the page data. Returns the
324−-// number of digits used to encode the integer and the stores the
325−-// value at the given location.
326−-int ProjectFileIO::get_varint(const unsigned char *ptr, int64_t *out)
330−+ int rc = sqlite3_step(stmt);
332−- for (i = 0; i < 8; ++i)
333−+ if (rc != SQLITE_ROW)
335−- val = (val << 7) + (ptr[i] & 0x7f);
336−- if ((ptr[i] & 0x80) == 0)
341−+ conn.ThrowException(false);
344−- val = (val << 8) + (ptr[i] & 0xff);
346−+ const int64_t size = sqlite3_column_int64(stmt, 0);
352− InvisibleTemporaryProject::InvisibleTemporaryProject()
pkgs/applications/audio/audacity/default.nix+58−35
@@ -3,6 +3,7 @@
3, fetchFromGitHub
3, fetchFromGitHub
4, fetchpatch
4, fetchpatch
6, pkg-config
7, pkg-config
@@ -20,14 +21,17 @@
20, libsndfile
21, libsndfile
25, libid3tag
27, libid3tag
28, soundtouch
31, soundtouch
30−/*, portaudio - given up fighting their portaudio.patch */
33+, portaudio # given up fighting their portaudio.patch?
31, linuxHeaders
35, linuxHeaders
33, at-spi2-core
37, at-spi2-core
@@ -36,11 +40,14 @@
38, libpthreadstubs
42, libpthreadstubs
39, libselinux
44, libselinux
41, libxkbcommon
46, libxkbcommon
42, util-linux
47, util-linux
44, AppKit ? null
51, AppKit ? null
45, AudioToolbox ? null
52, AudioToolbox ? null
46, AudioUnit ? null
53, AudioUnit ? null
@@ -58,12 +65,14 @@
60 inherit (lib) optionals;
67 inherit (lib) optionals;
62 wxWidgets_src = fetchFromGitHub {
71 wxWidgets_src = fetchFromGitHub {
63− owner = "audacity";
72+ owner = pname;
64 repo = "wxWidgets";
73 repo = "wxWidgets";
65− rev = "07e7d832c7a337aedba3537b90b2c98c4d8e2985";
74+ rev = "v${version}-${pname}";
66− sha256 = "1mawnkcrmqj98jp0jxlnh9xkc950ca033ccb51c7035pzmi9if9a";
75+ sha256 = "sha256-KrmYYv23DHBYKIuxMYBioCQ2e4KWdgmuREnimtm0XNU=";
67 fetchSubmodules = true;
76 fetchSubmodules = true;
@@ -74,41 +83,20 @@ let
74 wxmac' = wxmac.overrideAttrs (oldAttrs: rec {
83 wxmac' = wxmac.overrideAttrs (oldAttrs: rec {
75 src = wxWidgets_src;
84 src = wxWidgets_src;
79−stdenv.mkDerivation rec {
86+in stdenv.mkDerivation rec {
81− # nixpkgs-update: no auto update
82− # Humans too! Let's wait to see how the situation with
83− # https://github.com/audacity/audacity/issues/1213 develops before
84− # pulling any updates that are subject to this privacy policy. We
85− # may wish to switch to a fork, but at the time of writing
86− # (2021-07-05) it's too early to tell how well any of the forks will
88− version = "3.0.2";
87+ inherit pname version;
90 src = fetchFromGitHub {
89 src = fetchFromGitHub {
91− owner = "audacity";
90+ owner = pname;
92− repo = "audacity";
91+ repo = pname;
93 rev = "Audacity-${version}";
92 rev = "Audacity-${version}";
94− sha256 = "035qq2ff16cdl2cb9iply2bfjmhfl1dpscg79x6c9l0i9m8k41zj";
93+ sha256 = "sha256-sdI4paxIHDZgoWTCekjrkFR4JFpQC6OatcnJdVXCCZk=";
99− url = "https://github.com/audacity/audacity/commit/7f8135e112a0e1e8e906abab9339680d1e491441.patch";
100− sha256 = "0zp2iydd46analda9cfnbmzdkjphz5m7dynrdj5qdnmq6j3px9fw";
101− name = "audacity_xdg_paths.patch";
103− # This is required to make audacity work with nixpkgs’ sqlite
104− # https://github.com/audacity/audacity/pull/1802 rebased onto 3.0.2
105− ./0001-Use-a-different-approach-to-estimate-the-disk-space-.patch
108 postPatch = ''
96 postPatch = ''
109− touch src/RevisionIdent.h
97+ mkdir src/private
110 '' + lib.optionalString stdenv.isLinux ''
98 '' + lib.optionalString stdenv.isLinux ''
111− substituteInPlace src/FileNames.cpp \
99+ substituteInPlace libraries/lib-files/FileNames.cpp \
112 --replace /usr/include/linux/magic.h ${linuxHeaders}/include/linux/magic.h
100 --replace /usr/include/linux/magic.h ${linuxHeaders}/include/linux/magic.h
@@ -119,6 +107,7 @@ stdenv.mkDerivation rec {
120 ] ++ optionals stdenv.isLinux [
108 ] ++ optionals stdenv.isLinux [
121 linuxHeaders
109 linuxHeaders
124 buildInputs = [
113 buildInputs = [
@@ -126,15 +115,18 @@ stdenv.mkDerivation rec {
129 libid3tag
119 libid3tag
133 libsndfile
124 libsndfile
134 libvorbis
125 libvorbis
140 soundtouch
132 soundtouch
@@ -143,6 +135,7 @@ stdenv.mkDerivation rec {
146 ] ++ optionals stdenv.isLinux [
139 ] ++ optionals stdenv.isLinux [
147 alsa-lib # for portaudio
140 alsa-lib # for portaudio
148 at-spi2-core
141 at-spi2-core
@@ -154,6 +147,7 @@ stdenv.mkDerivation rec {
154 libxkbcommon
147 libxkbcommon
155 libselinux
148 libselinux
157 util-linux
151 util-linux
159 wxGTK'.gtk
153 wxGTK'.gtk
@@ -163,20 +157,49 @@ stdenv.mkDerivation rec {
164 CoreAudioKit
158 CoreAudioKit
165 AudioUnit AudioToolbox CoreAudio CoreServices Carbon # for portaudio
159 AudioUnit AudioToolbox CoreAudio CoreServices Carbon # for portaudio
168 cmakeFlags = [
164 cmakeFlags = [
169− "-Daudacity_use_ffmpeg=linked"
165+ "-DAUDACITY_REV_LONG=nixpkgs"
166+ "-DAUDACITY_REV_TIME=nixpkgs"
170 "-DDISABLE_DYNAMIC_LOADING_FFMPEG=ON"
167 "-DDISABLE_DYNAMIC_LOADING_FFMPEG=ON"
168+ "-Daudacity_conan_enabled=Off"
169+ "-Daudacity_use_ffmpeg=loaded"
173 doCheck = false; # Test fails
172 doCheck = false; # Test fails
174+ # Replace audacity's wrapper, to:
175+ # - put it in the right place, it shouldn't be in "$out/audacity"
176+ # - Add the ffmpeg dynamic dependency
177+ postInstall = lib.optionalString stdenv.isLinux ''
179+ wrapProgram "$out/bin/audacity" \
180+ --prefix LD_LIBRARY_PATH : "$out/lib/audacity":${lib.makeLibraryPath [ ffmpeg_4 ]} \
181+ --suffix AUDACITY_MODULES_PATH : "$out/lib/audacity/modules" \
182+ --suffix AUDACITY_PATH : "$out/share/audacity"
175 meta = with lib; {
185 meta = with lib; {
176 description = "Sound editor with graphical UI";
186 description = "Sound editor with graphical UI";
177− homepage = "https://www.audacityteam.org/";
187+ homepage = "https://www.audacityteam.org";
188+ changelog = "https://github.com/audacity/audacity/releases";
178− license = licenses.gpl2Plus;
189+ license = with licenses; [
191+ # Must be GPL3 when building with "technologies that require it,
192+ # such as the VST3 audio plugin interface".
193+ # https://github.com/audacity/audacity/discussions/2142.
179 maintainers = with maintainers; [ lheckemann veprbl ];
198 maintainers = with maintainers; [ lheckemann veprbl ];
180 platforms = platforms.unix;
199 platforms = platforms.unix;
200+ # darwin-aarch due to qtbase broken for it.
201+ # darwin-x86_64 due to
202+ # https://logs.nix.ci/?attempt_id=5cbc4581-09b4-4148-82fe-0326411a56b3&key=nixos%2Fnixpkgs.152273.
203+ broken = stdenv.isDarwin;
pkgs/applications/audio/audio-recorder/default.nix+1−1
@@ -2,7 +2,7 @@
2, pkg-config, intltool
2, pkg-config, intltool
3, glib, dbus, gtk3, libappindicator-gtk3, gst_all_1
3, glib, dbus, gtk3, libappindicator-gtk3, gst_all_1
4, librsvg, wrapGAppsHook
4, librsvg, wrapGAppsHook
5−, pulseaudioSupport ? true, libpulseaudio ? null }:
5+, pulseaudioSupport ? true, libpulseaudio }:
7stdenv.mkDerivation rec {
7stdenv.mkDerivation rec {
8 pname = "audio-recorder";
8 pname = "audio-recorder";
pkgs/applications/audio/bespokesynth/default.nix+1
@@ -142,6 +142,7 @@ stdenv.mkDerivation rec {
143 ] ++ lib.optional enableVST2 unfree;
143 ] ++ lib.optional enableVST2 unfree;
144 maintainers = with maintainers; [ astro tobiasBora OPNA2608 ];
144 maintainers = with maintainers; [ astro tobiasBora OPNA2608 ];
145+ mainProgram = "BespokeSynth";
145 platforms = platforms.all;
146 platforms = platforms.all;
pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix+2−2
@@ -6,11 +6,11 @@
7stdenv.mkDerivation rec {
7stdenv.mkDerivation rec {
8 pname = "bitwig-studio";
8 pname = "bitwig-studio";
9− version = "4.2.1";
9+ version = "4.2.3";
11 src = fetchurl {
11 src = fetchurl {
12 url = "https://downloads.bitwig.com/stable/${version}/${pname}-${version}.deb";
12 url = "https://downloads.bitwig.com/stable/${version}/${pname}-${version}.deb";
13− sha256 = "sha256-kkpb8tLuj4QO+TBW2yNDugS4c6dCQ9Lddv6Z8NS0uio=";
13+ sha256 = "sha256-UCafrjrEwwHkhPum7sTOjtXzy7PNeK5/aeKg+b3CGJU=";
16 nativeBuildInputs = [ dpkg makeWrapper wrapGAppsHook ];
16 nativeBuildInputs = [ dpkg makeWrapper wrapGAppsHook ];
pkgs/applications/audio/blanket/default.nix+7−7
@@ -9,21 +9,21 @@
9, appstream-glib
9, appstream-glib
10, python3Packages
10, python3Packages
13−, libhandy
13+, libadwaita
14, gobject-introspection
14, gobject-introspection
15, gst_all_1
15, gst_all_1
18python3Packages.buildPythonApplication rec {
18python3Packages.buildPythonApplication rec {
19 pname = "blanket";
19 pname = "blanket";
20− version = "0.5.0";
20+ version = "0.6.0";
22 src = fetchFromGitHub {
22 src = fetchFromGitHub {
23 owner = "rafaelmardojai";
23 owner = "rafaelmardojai";
24 repo = "blanket";
24 repo = "blanket";
25− rev = version;
25+ rev = "refs/tags/${version}";
26− sha256 = "00i821zqfbigxmc709322r16z75qsw4rg23yhv35gza9sl65bzkg";
26+ sha256 = "sha256-4gthT1x76IfXWkLaLMPtFS4TRlRGk5Enbu/k1jAHzwE=";
29 nativeBuildInputs = [
29 nativeBuildInputs = [
@@ -37,8 +37,8 @@ python3Packages.buildPythonApplication rec {
38 buildInputs = [
38 buildInputs = [
41− libhandy
41+ libadwaita
42 gobject-introspection
42 gobject-introspection
43 gst_all_1.gstreamer
43 gst_all_1.gstreamer
44 gst_all_1.gst-plugins-base
44 gst_all_1.gst-plugins-base
pkgs/applications/audio/callaudiod/default.nix+2−2
@@ -11,14 +11,14 @@
12stdenv.mkDerivation rec {
12stdenv.mkDerivation rec {
13 pname = "callaudiod";
13 pname = "callaudiod";
14− version = "0.1.3";
14+ version = "0.1.4";
16 src = fetchFromGitLab {
16 src = fetchFromGitLab {
17 domain = "gitlab.com";
17 domain = "gitlab.com";
18 owner = "mobian1";
18 owner = "mobian1";
19 repo = pname;
19 repo = pname;
20 rev = version;
20 rev = version;
21− sha256 = "sha256-WZ23jacCsZiNeMJfnYMaGdHXY9OCIBbeU9dWGDroaHE=";
21+ sha256 = "sha256-71+9ALz55aqxXRBRwOcs9fwiQK31pJ9E72pGRmt0OkE=";
24 strictDeps = true;
24 strictDeps = true;
pkgs/applications/audio/cardinal/default.nix+2−11
@@ -23,23 +23,14 @@
24stdenv.mkDerivation rec {
24stdenv.mkDerivation rec {
25 pname = "cardinal";
25 pname = "cardinal";
26− version = "22.02";
26+ version = "22.04";
28 src = fetchurl {
28 src = fetchurl {
30 "https://github.com/DISTRHO/Cardinal/releases/download/${version}/cardinal-${version}.tar.xz";
30 "https://github.com/DISTRHO/Cardinal/releases/download/${version}/cardinal-${version}.tar.xz";
31− sha256 = "sha256-IVlAROFGFffTEU00NCmv74w1DRb7dNMp20FeBVoDrdM=";
31+ sha256 = "sha256-7As4CckwByrTynOOpwAXa1R9Bpp/ft537f+PvAgz/BE=";
35− # see https://github.com/DISTRHO/Cardinal/issues/151#issuecomment-1041886260
38− "https://github.com/DISTRHO/Cardinal/commit/13e9ef37c5dd35d77a54b1cb006767be7a72ac69.patch";
39− sha256 = "sha256-NYUYLbLeBX1WEzjPi0s/T1N+EXQKyi0ifbPxgBYDjRs=";
43 prePatch = ''
34 prePatch = ''
44 patchShebangs ./dpf/utils/generate-ttl.sh
35 patchShebangs ./dpf/utils/generate-ttl.sh
pkgs/applications/audio/carla/default.nix+2−2
@@ -15,13 +15,13 @@ assert withGtk3 -> gtk3 != null;
16stdenv.mkDerivation rec {
16stdenv.mkDerivation rec {
17 pname = "carla";
17 pname = "carla";
18− version = "2.4.2";
18+ version = "2.4.3";
20 src = fetchFromGitHub {
20 src = fetchFromGitHub {
21 owner = "falkTX";
21 owner = "falkTX";
22 repo = pname;
22 repo = pname;
23 rev = "v${version}";
23 rev = "v${version}";
24− sha256 = "sha256-A0QmyphjsNU06kh2f9rXrR+GkDEI5HqXRA9J82E6qJU=";
24+ sha256 = "sha256-FAQTIM5NpcOhLNMf62qiKaxg6QtK5uIJF/XT6KJVnUc=";
27 nativeBuildInputs = [
27 nativeBuildInputs = [
pkgs/applications/audio/caudec/default.nix+2−2
@@ -1,4 +1,4 @@
1−{ lib, stdenv, fetchurl, makeWrapper, bash, bc, findutils, flac, lame, opusTools, procps, sox }:
1+{ lib, stdenv, fetchurl, makeWrapper, bc, findutils, flac, lame, opusTools, procps, sox }:
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "caudec";
4 pname = "caudec";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
13 patchShebangs ./install.sh
13 patchShebangs ./install.sh
16− nativeBuildInputs = [ bash makeWrapper ];
16+ nativeBuildInputs = [ makeWrapper ];
18 installPhase = ''
18 installPhase = ''
19 ./install.sh --prefix=$out/bin
19 ./install.sh --prefix=$out/bin
pkgs/applications/audio/cider/default.nix+3−3
@@ -2,11 +2,11 @@
3appimageTools.wrapType2 rec {
3appimageTools.wrapType2 rec {
4 pname = "cider";
4 pname = "cider";
5− version = "1.3.1308";
5+ version = "1.4.1.1680";
7 src = fetchurl {
7 src = fetchurl {
8− url = "https://1308-429851205-gh.circle-artifacts.com/0/%7E/Cider/dist/artifacts/Cider-${version}.AppImage";
8+ url = "https://github.com/ciderapp/cider-releases/releases/download/v${version}/Cider-${builtins.concatStringsSep "." (lib.take 3 (lib.splitVersion version))}-alpha.${builtins.elemAt (lib.splitVersion version) 3}.AppImage";
9− sha256 = "1lbyvn1c8155p039qfzx7jwad7km073phkmrzjm0w3ahdpwz3wgi";
9+ sha256 = "sha256-hEv+vfMMH+Trwa1UF5R8EtyYeyiRVLP0BrXOK2+1q8M=";
12 extraInstallCommands =
12 extraInstallCommands =
pkgs/applications/audio/clementine/default.nix+3−10
@@ -51,24 +51,17 @@ let
51 withCD = config.clementine.cd or true;
51 withCD = config.clementine.cd or true;
52 withCloud = config.clementine.cloud or true;
52 withCloud = config.clementine.cloud or true;
54− # On the update after all 1.4rc, qt5.15 and protobuf 3.15 will be supported.
54+ version = "unstable-2022-04-11";
55− version = "1.4.0rc1";
57 src = fetchFromGitHub {
56 src = fetchFromGitHub {
58 owner = "clementine-player";
57 owner = "clementine-player";
59 repo = "Clementine";
58 repo = "Clementine";
60− rev = version;
59+ rev = "250024e117fbe5fae7c62b9c8e655d66412a6ed7";
61− sha256 = "1rqk0hrsn8f8bjk0j0vq1af0ygy6xx7qi9fw0jjw2cmj6kzckyi2";
60+ sha256 = "06fcbs3wig3mh711iypyj49qm5246f7qhvgvv8brqfrd8cqyh6qf";
64 patches = [
63 patches = [
65 ./clementine-spotify-blob.patch
64 ./clementine-spotify-blob.patch
67− # "short-term" fix for execution on wayland (1.4.0rc1-131-g2179027a6)
68− # for https://github.com/clementine-player/Clementine/issues/6587
69− url = "https://github.com/clementine-player/Clementine/commit/2179027a6d97530c857e43be873baacd696ff332.patch";
70− sha256 = "0344bfcyvjim5ph8w4km6zkg96rj5g9ybp9x14qgyw2gkdksimn6";
74 nativeBuildInputs = [
67 nativeBuildInputs = [
pkgs/applications/audio/cmus/default.nix+2−2
@@ -1,5 +1,5 @@
1{ config, lib, stdenv, fetchFromGitHub, runCommand, ncurses, pkg-config
1{ config, lib, stdenv, fetchFromGitHub, runCommand, ncurses, pkg-config
2−, libiconv, CoreAudio, AudioUnit
2+, libiconv, CoreAudio, AudioUnit, VideoToolbox
4, alsaSupport ? stdenv.isLinux, alsa-lib ? null
4, alsaSupport ? stdenv.isLinux, alsa-lib ? null
5# simple fallback for everyone else
5# simple fallback for everyone else
@@ -121,7 +121,7 @@ stdenv.mkDerivation rec {
121 nativeBuildInputs = [ pkg-config ];
121 nativeBuildInputs = [ pkg-config ];
122 buildInputs = [ ncurses ]
122 buildInputs = [ ncurses ]
123 ++ lib.optional stdenv.cc.isClang clangGCC
123 ++ lib.optional stdenv.cc.isClang clangGCC
124− ++ lib.optionals stdenv.isDarwin [ libiconv CoreAudio AudioUnit ]
124+ ++ lib.optionals stdenv.isDarwin [ libiconv CoreAudio AudioUnit VideoToolbox ]
125 ++ flatten (concatMap (a: a.deps) opts);
125 ++ flatten (concatMap (a: a.deps) opts);
127 makeFlags = [ "LD=$(CC)" ];
127 makeFlags = [ "LD=$(CC)" ];
pkgs/applications/audio/denemo/default.nix+2−2
@@ -6,11 +6,11 @@
7stdenv.mkDerivation rec {
7stdenv.mkDerivation rec {
8 pname = "denemo";
8 pname = "denemo";
9− version = "2.5.0";
9+ version = "2.6.0";
11 src = fetchurl {
11 src = fetchurl {
12 url = "https://ftp.gnu.org/gnu/denemo/denemo-${version}.tar.gz";
12 url = "https://ftp.gnu.org/gnu/denemo/denemo-${version}.tar.gz";
13− sha256 = "sha256-B6GbBL/o/z0emT+Iw6XvWmAsJCmIwSGCyV1DkhDyfBY=";
13+ sha256 = "sha256-S+WXDGmEf5fx+HYnXJdE5QNOfJg7EqEEX7IMI2SUtV0=";
16 buildInputs = [
16 buildInputs = [
pkgs/applications/audio/dragonfly-reverb/default.nix+2−2
@@ -2,13 +2,13 @@
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "dragonfly-reverb";
4 pname = "dragonfly-reverb";
5− version = "3.2.5";
5+ version = "3.2.6";
7 src = fetchFromGitHub {
7 src = fetchFromGitHub {
8 owner = "michaelwillis";
8 owner = "michaelwillis";
9 repo = "dragonfly-reverb";
9 repo = "dragonfly-reverb";
10 rev = version;
10 rev = version;
11− sha256 = "14kia9wjs0nqfx4psnr3vf4x6hihkf80gb0mjzmdnnnk4cnrdydm";
11+ sha256 = "sha256-hTapy/wXt1rRZVdkx2RDW8LS/DcY30p+WaAWgemGqVo=";
12 fetchSubmodules = true;
12 fetchSubmodules = true;
pkgs/applications/audio/faust/faust2.nix+2−2
@@ -20,13 +20,13 @@ with lib.strings;
23− version = "2.37.3";
23+ version = "2.40.0";
25 src = fetchFromGitHub {
25 src = fetchFromGitHub {
26 owner = "grame-cncm";
26 owner = "grame-cncm";
27 repo = "faust";
27 repo = "faust";
28 rev = version;
28 rev = version;
29− sha256 = "sha256-Jzauw8+vBjtbK73Bh4huhX1ql1cWmh80EzEET3x03rc=";
29+ sha256 = "sha256-IsrLaoMDwrDPxtqCXIy/7tZCdogTUkJ00obSco9SR/A=";
30 fetchSubmodules = true;
30 fetchSubmodules = true;
pkgs/applications/audio/faust/faustlive.nix+9−12
@@ -1,37 +1,34 @@
1{ lib, stdenv, fetchFromGitHub
1{ lib, stdenv, fetchFromGitHub
2, llvm_10, qt5, qrencode, libmicrohttpd, libjack2, alsa-lib, faust, curl
2, llvm_10, qt5, qrencode, libmicrohttpd, libjack2, alsa-lib, faust, curl
3−, bc, coreutils, which, libsndfile, pkg-config, libxcb
3+, bc, coreutils, which, libsndfile, flac, libogg, libvorbis, libopus, pkg-config, libxcb, cmake, gnutls, libtasn1, p11-kit
6stdenv.mkDerivation rec {
6stdenv.mkDerivation rec {
7 pname = "faustlive";
7 pname = "faustlive";
8− version = "2.5.5";
8+ version = "2.5.8";
9 src = fetchFromGitHub {
9 src = fetchFromGitHub {
10 owner = "grame-cncm";
10 owner = "grame-cncm";
11 repo = "faustlive";
11 repo = "faustlive";
12 rev = version;
12 rev = version;
13− sha256 = "0qbn05nq170ckycwalkk5fppklc4g457mapr7p7ryrhc1hwzffm9";
13+ sha256 = "sha256-dt5YlvaCZ6JiNGPwVXPrKzVGWxnhdyP4lnKgck7ZSF8=";
14 fetchSubmodules = true;
14 fetchSubmodules = true;
17− nativeBuildInputs = [ pkg-config qt5.wrapQtAppsHook ];
17+ nativeBuildInputs = [ pkg-config qt5.wrapQtAppsHook cmake ];
19 buildInputs = [
19 buildInputs = [
20 llvm_10 qt5.qtbase qrencode libmicrohttpd libjack2 alsa-lib faust curl
20 llvm_10 qt5.qtbase qrencode libmicrohttpd libjack2 alsa-lib faust curl
21− bc coreutils which libsndfile libxcb
21+ bc coreutils which libsndfile flac libogg libvorbis libopus libxcb gnutls libtasn1 p11-kit
24 makeFlags = [ "PREFIX=$(out)" ];
24 makeFlags = [ "PREFIX=$(out)" ];
26− postPatch = "cd Build";
26+ postInstall = ''
27−
27+ wrapProgram $out/bin/FaustLive --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libmicrohttpd libsndfile faust llvm_10 ]}"
29− install -d "$out/bin"
30− install -d "$out/share/applications"
31− install FaustLive/FaustLive "$out/bin"
32− install rsrc/FaustLive.desktop "$out/share/applications"
30+ postPatch = "cd Build";
35 meta = with lib; {
32 meta = with lib; {
36 description = "A standalone just-in-time Faust compiler";
33 description = "A standalone just-in-time Faust compiler";
37 longDescription = ''
34 longDescription = ''
pkgs/applications/audio/faustPhysicalModeling/default.nix+2−2
@@ -1,13 +1,13 @@
1{ stdenv, lib, fetchFromGitHub, faust2jaqt, faust2lv2 }:
1{ stdenv, lib, fetchFromGitHub, faust2jaqt, faust2lv2 }:
2stdenv.mkDerivation rec {
2stdenv.mkDerivation rec {
3 pname = "faustPhysicalModeling";
3 pname = "faustPhysicalModeling";
4− version = "2.37.3";
4+ version = "2.40.0";
6 src = fetchFromGitHub {
6 src = fetchFromGitHub {
7 owner = "grame-cncm";
7 owner = "grame-cncm";
8 repo = "faust";
8 repo = "faust";
9 rev = version;
9 rev = version;
10− sha256 = "sha256-h6L+qRkN2chnI4821WrjD3uRFw3J0sUYVLL8w57vR1U=";
10+ sha256 = "sha256-t3I3j5s2ACHfub+fxxaTwu+5ptEwH0JQpVdmHYOzbCA=";
13 buildInputs = [ faust2jaqt faust2lv2 ];
13 buildInputs = [ faust2jaqt faust2lv2 ];
pkgs/applications/audio/flac/default.nix+2−10
@@ -2,21 +2,13 @@
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "flac";
4 pname = "flac";
5− version = "1.3.3";
5+ version = "1.3.4";
7 src = fetchurl {
7 src = fetchurl {
8 url = "http://downloads.xiph.org/releases/flac/${pname}-${version}.tar.xz";
8 url = "http://downloads.xiph.org/releases/flac/${pname}-${version}.tar.xz";
9− sha256 = "0j0p9sf56a2fm2hkjnf7x3py5ir49jyavg4q5zdyd7bcf6yq4gi1";
9+ sha256 = "0dz7am8kbc97a6afml1h4yp085274prg8j7csryds8m3fmz61w4g";
14− name = "CVE-2020-0499.patch";
15− url = "https://github.com/xiph/flac/commit/2e7931c27eb15e387da440a37f12437e35b22dd4.patch";
16− sha256 = "160qzq9ms5addz7sx06pnyjjkqrffr54r4wd8735vy4x008z71ah";
20 buildInputs = [ libogg ];
12 buildInputs = [ libogg ];
22 #doCheck = true; # takes lots of time
14 #doCheck = true; # takes lots of time
pkgs/applications/audio/fluidsynth/default.nix+2−2
@@ -5,13 +5,13 @@
6stdenv.mkDerivation rec {
6stdenv.mkDerivation rec {
7 pname = "fluidsynth";
7 pname = "fluidsynth";
8− version = "2.2.3";
8+ version = "2.2.5";
10 src = fetchFromGitHub {
10 src = fetchFromGitHub {
11 owner = "FluidSynth";
11 owner = "FluidSynth";
12 repo = "fluidsynth";
12 repo = "fluidsynth";
13 rev = "v${version}";
13 rev = "v${version}";
14− sha256 = "0x5808d03ym23np17nl8gfbkx3c4y3d7jyyr2222wn2prswbb6x3";
14+ sha256 = "sha256-aR8TLxl6OziP+DMSNro0DB/UtvzXDeDYQ3o/iy70XD4=";
17 nativeBuildInputs = [ buildPackages.stdenv.cc pkg-config cmake ];
17 nativeBuildInputs = [ buildPackages.stdenv.cc pkg-config cmake ];
pkgs/applications/audio/foo-yc20/default.nixdeleted−29
@@ -1,29 +0,0 @@
1−{ lib, stdenv, fetchFromGitHub, libjack2, gtk2, lv2, faust, pkg-config }:
4− version = "unstable-2015-05-21";
6− src = fetchFromGitHub {
9− rev = "edd9d14c91229429b14270a181743e1046160ca8";
10− sha256 = "0i8261n95n4xic766h70xkrpbvw3sag96n1883ahmg6h7yb94avq";
13− nativeBuildInputs = [ pkg-config ];
14− buildInputs = [ libjack2 gtk2 lv2 faust ];
16− makeFlags = [ "PREFIX=$(out)" ];
18− # remove lv2 until https://github.com/sampov2/foo-yc20/issues/6 is resolved
19− postInstallFixup = "rm -rf $out/lib/lv2";
22− broken = true; # see: https://github.com/sampov2/foo-yc20/issues/7
23− description = "A Faust implementation of a 1969 designed Yamaha combo organ, the YC-20";
24− homepage = "https://github.com/sampov2/foo-yc20";
25− license = with licenses; [ bsd3 lgpl21 mpl11 ];
26− maintainers = [ maintainers.magnetophon ];
27− platforms = platforms.linux;
pkgs/applications/audio/ft2-clone/default.nix+2−2
@@ -13,13 +13,13 @@
14stdenv.mkDerivation rec {
14stdenv.mkDerivation rec {
15 pname = "ft2-clone";
15 pname = "ft2-clone";
16− version = "1.52";
16+ version = "1.54";
18 src = fetchFromGitHub {
18 src = fetchFromGitHub {
19 owner = "8bitbubsy";
19 owner = "8bitbubsy";
20 repo = "ft2-clone";
20 repo = "ft2-clone";
21 rev = "v${version}";
21 rev = "v${version}";
22− sha256 = "sha256-RyZ3PV7jaTN3DEYMT0BqKDHbb+7/IgiRaCra1xA0h1A=";
22+ sha256 = "sha256-lNiQ0X2vvPGubb4Pde+eh0Z6ClCQgigIUM+PddaiVUg=";
25 # Adapt the linux-only CMakeLists to darwin (more reliable than make-macos.sh)
25 # Adapt the linux-only CMakeLists to darwin (more reliable than make-macos.sh)
pkgs/applications/audio/furnace/default.nix+2−2
@@ -1,7 +1,7 @@
3, gitUpdater
3, gitUpdater
4−, testVersion
4+, testers
6, fetchFromGitHub
6, fetchFromGitHub
@@ -83,7 +83,7 @@ stdenv.mkDerivation rec {
83 inherit pname version;
83 inherit pname version;
84 rev-prefix = "v";
84 rev-prefix = "v";
86− tests.version = testVersion {
86+ tests.version = testers.testVersion {
87 package = furnace;
87 package = furnace;
88 # The command always exits with code 1
88 # The command always exits with code 1
89 command = "(furnace --version || [ $? -eq 1 ])";
89 command = "(furnace --version || [ $? -eq 1 ])";
pkgs/applications/audio/greg/default.nix+3−3
@@ -2,15 +2,15 @@
3with pythonPackages; buildPythonApplication rec {
3with pythonPackages; buildPythonApplication rec {
4 pname = "greg";
4 pname = "greg";
5− version = "0.4.7";
5+ version = "0.4.8";
7 disabled = !isPy3k;
7 disabled = !isPy3k;
9 src = fetchFromGitHub {
9 src = fetchFromGitHub {
10 owner = "manolomartinez";
10 owner = "manolomartinez";
11 repo = pname;
11 repo = pname;
12− rev = "v" + version;
12+ rev = "refs/tags/v${version}";
13− sha256 = "0bdzgh2k1ppgcvqiasxwp3w89q44s4jgwjidlips3ixx1bzm822v";
13+ sha256 = "sha256-o4+tXVJTgT52JyJOC+Glr2cvZjbTaZL8TIsmz+A4vE4=";
16 propagatedBuildInputs = [ setuptools feedparser ];
16 propagatedBuildInputs = [ setuptools feedparser ];
pkgs/applications/audio/gspeech/default.nix+2−2
@@ -20,13 +20,13 @@
21python3.pkgs.buildPythonApplication rec {
21python3.pkgs.buildPythonApplication rec {
22 pname = "gSpeech";
22 pname = "gSpeech";
23− version = "0.10.1";
23+ version = "0.11.0";
25 src = fetchFromGitHub {
25 src = fetchFromGitHub {
26 owner = "mothsart";
26 owner = "mothsart";
27 repo = pname;
27 repo = pname;
28 rev = version;
28 rev = version;
29− sha256 = "1i0jwgxcn94nsi7c0ad0w77y04g04ka2szijzfqzqfnacdmdyrfc";
29+ sha256 = "0z11yxvgi8m2xjmmf56zla91jpmf0a4imwi9qqz6bp51pw4sk8gp";
32 nativeBuildInputs = [
32 nativeBuildInputs = [
pkgs/applications/audio/guitarix/default.nix+2
@@ -108,6 +108,8 @@ stdenv.mkDerivation rec {
108 "--install-roboto-font"
108 "--install-roboto-font"
109 ] ++ optional optimizationSupport "--optimization";
109 ] ++ optional optimizationSupport "--optimization";
111+ NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
111 meta = with lib; {
113 meta = with lib; {
112 description = "A virtual guitar amplifier for Linux running with JACK";
114 description = "A virtual guitar amplifier for Linux running with JACK";
113 longDescription = ''
115 longDescription = ''
pkgs/applications/audio/helio-workstation/default.nix+2−2
@@ -5,14 +5,14 @@
6stdenv.mkDerivation rec {
6stdenv.mkDerivation rec {
7 pname = "helio-workstation";
7 pname = "helio-workstation";
8− version = "3.8";
8+ version = "3.9";
10 src = fetchFromGitHub {
10 src = fetchFromGitHub {
11 owner = "helio-fm";
11 owner = "helio-fm";
12 repo = pname;
12 repo = pname;
13 rev = version;
13 rev = version;
14 fetchSubmodules = true;
14 fetchSubmodules = true;
15− sha256 = "sha256-uwRSOJ5WvDH4mfL9pCTCGzuSRT8SIBrI+Wsbumzejv0=";
15+ sha256 = "sha256-AtgKgw+F5lc0Ma3zOxmk3iaZQp2KZb2FP5F8QvvYTT4=";
18 buildInputs = [
18 buildInputs = [
pkgs/applications/audio/hivelytracker/default.nix+1−1
@@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
60 # files passed as arguments anyway, so this works well enough until the
60 # files passed as arguments anyway, so this works well enough until the
61 # issue is fixed.
61 # issue is fixed.
62 wrapProgram $out/bin/hivelytracker \
62 wrapProgram $out/bin/hivelytracker \
63− --run "cd $out/share/hivelytracker"
63+ --chdir "$out/share/hivelytracker"
65 # Also install the hvl2wav tool
65 # Also install the hvl2wav tool
66 install -Dm755 hvl2wav/hvl2wav $out/bin/hvl2wav
66 install -Dm755 hvl2wav/hvl2wav $out/bin/hvl2wav
pkgs/applications/audio/hqplayer-desktop/default.nix+1
@@ -86,6 +86,7 @@ mkDerivation rec {
86 homepage = "https://www.signalyst.com/custom.html";
86 homepage = "https://www.signalyst.com/custom.html";
87 description = "High-end upsampling multichannel software HD-audio player";
87 description = "High-end upsampling multichannel software HD-audio player";
88 license = licenses.unfree;
88 license = licenses.unfree;
89+ platforms = [ "x86_64-linux" ];
89 maintainers = with maintainers; [ lovesegfault ];
90 maintainers = with maintainers; [ lovesegfault ];
pkgs/applications/audio/jacktrip/default.nixnew file+61
@@ -0,0 +1,61 @@
1+{ lib, mkDerivation, fetchFromGitHub
21+ src = fetchFromGitHub {
25+ sha256 = "sha256-sfAYMTnBjT4LkgksyzDGGy97NLX5ljjhNDFioQnTzLs=";
40+ nativeBuildInputs = [
52+ qmakeFlags = [ "jacktrip.pro" ];
55+ description = "Multi-machine audio network performance over the Internet";
56+ homepage = "https://jacktrip.github.io/jacktrip/";
57+ license = with licenses; [ gpl3 lgpl3 mit ];
58+ maintainers = [ maintainers.iwanb ];
59+ platforms = platforms.linux;
pkgs/applications/audio/jamesdsp/default.nix+40−5
This diff is too big to show here.
pkgs/applications/audio/jmusicbot/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/libopenmpt/default.nixdeleted−42
This diff is too big to show here.
pkgs/applications/audio/lollypop/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/losslessaudiochecker/default.nix+1−1
This diff is too big to show here.
pkgs/applications/audio/lyrebird/default.nix+1−1
This diff is too big to show here.
pkgs/applications/audio/moc/default.nix+5−3
This diff is too big to show here.
pkgs/applications/audio/mopidy/mopidy.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/musikcube/default.nix+5−3
This diff is too big to show here.
pkgs/applications/audio/ncspot/default.nix+3−7
This diff is too big to show here.
pkgs/applications/audio/ncspot/rust_1_57_support.patchdeleted−21
This diff is too big to show here.
pkgs/applications/audio/noise-repellent/default.nix+11−9
This diff is too big to show here.
pkgs/applications/audio/ocenaudio/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/odin2/default.nixnew file+79
This diff is too big to show here.
pkgs/applications/audio/osdlyrics/default.nixnew file+87
This diff is too big to show here.
pkgs/applications/audio/parlatype/default.nixdeleted−66
This diff is too big to show here.
pkgs/applications/audio/pianobar/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/pipecontrol/default.nixnew file+50
This diff is too big to show here.
pkgs/applications/audio/plexamp/default.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/praat/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/pt2-clone/default.nix+2−2
This diff is too big to show here.
pkgs/applications/audio/puddletag/default.nix+1
This diff is too big to show here.
pkgs/applications/audio/pulseaudio-modules-bt/default.nixdeleted−91
This diff is too big to show here.
pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patchdeleted−11
This diff is too big to show here.
pkgs/applications/audio/pyradio/default.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/qpwgraph/default.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/sfizz/default.nix+6−1
This diff is too big to show here.
pkgs/applications/audio/sfxr-qt/default.nix+7
This diff is too big to show here.
pkgs/applications/audio/shortwave/default.nix+9−12
This diff is too big to show here.
pkgs/applications/audio/sonixd/default.nixnew file+27
This diff is too big to show here.
pkgs/applications/audio/soundwireserver/default.nix+1
This diff is too big to show here.
pkgs/applications/audio/spot/default.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/spotify-tui/default.nix+1
This diff is too big to show here.
pkgs/applications/audio/spotify/default.nix+3−3
This diff is too big to show here.
pkgs/applications/audio/strawberry/default.nix+1
This diff is too big to show here.
pkgs/applications/audio/viper4linux-gui/default.nixnew file+82
This diff is too big to show here.
pkgs/applications/audio/viper4linux/default.nixnew file+61
This diff is too big to show here.
pkgs/applications/audio/whipper/default.nix+8
This diff is too big to show here.
pkgs/applications/audio/x42-plugins/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/alfis/default.nix+3−3
This diff is too big to show here.
pkgs/applications/blockchains/bisq-desktop/default.nix+1−2
This diff is too big to show here.
pkgs/applications/blockchains/bitcoin/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/btcpayserver/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/btcpayserver/deps.nix+29−29
This diff is too big to show here.
pkgs/applications/blockchains/chia-plotter/default.nix+13−6
This diff is too big to show here.
pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11
This diff is too big to show here.
pkgs/applications/blockchains/clightning/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/electrs/default.nix+3−3
This diff is too big to show here.
pkgs/applications/blockchains/ledger-live-desktop/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/lightning-loop/default.nix+3−3
This diff is too big to show here.
pkgs/applications/blockchains/lnd/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/lndmanage/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/monero-cli/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/monero-gui/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/namecoin/default.nix+5−6
This diff is too big to show here.
pkgs/applications/blockchains/nbxplorer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/blockchains/nbxplorer/deps.nix+15
This diff is too big to show here.
pkgs/applications/blockchains/nearcore/default.nixnew file+42
This diff is too big to show here.
pkgs/applications/blockchains/openethereum/default.nix+3−3
This diff is too big to show here.
pkgs/applications/blockchains/polkadot/default.nix+2−1
This diff is too big to show here.
pkgs/applications/blockchains/solana/default.nix+9−4
This diff is too big to show here.
pkgs/applications/blockchains/solana/pin.jsonnew file+5
This diff is too big to show here.
pkgs/applications/blockchains/solana/update.shnew file+33
This diff is too big to show here.
pkgs/applications/blockchains/stellar-core/default.nix+7−3
This diff is too big to show here.
pkgs/applications/blockchains/wasabibackend/default.nix+1−1
This diff is too big to show here.
pkgs/applications/blockchains/zcash/default.nix+6−6
This diff is too big to show here.
pkgs/applications/editors/android-studio/common.nix+5−3
This diff is too big to show here.
pkgs/applications/editors/android-studio/default.nix+8−7
This diff is too big to show here.
pkgs/applications/editors/apostrophe/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/bluej/default.nix+35−8
This diff is too big to show here.
pkgs/applications/editors/cudatext/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/cudatext/deps.json+12−12
This diff is too big to show here.
pkgs/applications/editors/eclipse/default.nix+13−13
This diff is too big to show here.
pkgs/applications/editors/eclipse/plugins.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/emacs/27.nixdeleted−11
This diff is too big to show here.
pkgs/applications/editors/emacs/28.nixnew file+5
This diff is too big to show here.
pkgs/applications/editors/emacs/at-fdcwd.patchdeleted−15
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/cedet/default.nixdeleted−52
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/control-lock/default.nixnew file+23
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+124−45
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/ement/default.nix+11−3
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nixnew file+30
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+7−1
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+26−32
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+2254−1744
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default-grammars.jsonnew file+32
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default.nixnew file+44
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/update-defaults.pynew file+74
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tsc/default.nixnew file+89
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tsc/src.jsonnew file+10
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/tsc/update.pynew file+122
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/updatenew file+10
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/update-manualnew file+7
This diff is too big to show here.
pkgs/applications/editors/emacs/elisp-packages/update-manual.nixnew file+11
This diff is too big to show here.
pkgs/applications/editors/emacs/generic.nix+9−5
This diff is too big to show here.
pkgs/applications/editors/gnome-builder/default.nix+2−13
This diff is too big to show here.
pkgs/applications/editors/helix/default.nix+13−10
This diff is too big to show here.
pkgs/applications/editors/jetbrains/default.nix+20−17
This diff is too big to show here.
pkgs/applications/editors/jetbrains/update.py+17−14
This diff is too big to show here.
pkgs/applications/editors/jetbrains/versions.json+132−132
This diff is too big to show here.
pkgs/applications/editors/jupyter-kernels/octave/kernel.nix+4−6
This diff is too big to show here.
pkgs/applications/editors/jupyter-kernels/wolfram/default.nixnew file+22
This diff is too big to show here.
pkgs/applications/editors/jupyter-kernels/wolfram/kernel.nixnew file+32
This diff is too big to show here.
pkgs/applications/editors/kakoune/plugins/default.nix+1−1
This diff is too big to show here.
pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19
This diff is too big to show here.
pkgs/applications/editors/lapce/default.nix+23−7
This diff is too big to show here.
pkgs/applications/editors/lapce/fix-version.patchdeleted−31
This diff is too big to show here.
pkgs/applications/editors/lifeograph/default.nix+5−5
This diff is too big to show here.
pkgs/applications/editors/marker/default.nix+4−1
This diff is too big to show here.
pkgs/applications/editors/mg/default.nix+4
This diff is too big to show here.
pkgs/applications/editors/mle/default.nix+11−1
This diff is too big to show here.
pkgs/applications/editors/neovim/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/neovim/neovide/default.nix+6−6
This diff is too big to show here.
pkgs/applications/editors/neovim/ruby_provider/Gemfile.lock+2−2
This diff is too big to show here.
pkgs/applications/editors/neovim/ruby_provider/gemset.nix+5−5
This diff is too big to show here.
pkgs/applications/editors/oed/default.nix+9
This diff is too big to show here.
pkgs/applications/editors/okteta/default.nix+2
This diff is too big to show here.
pkgs/applications/editors/oni2/common.nix−1
This diff is too big to show here.
pkgs/applications/editors/pinegrow/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/poke/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/rstudio/default.nix+1−1
This diff is too big to show here.
pkgs/applications/editors/setzer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/texmaker/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/texstudio/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/tiled/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/vim/common.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+2
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/default.nix+8−3
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/generated.nix+1344−1308
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/overrides.nix+4−5
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/update.py+47−16
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/vim-command-check-hook.shnew file+25
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/vim-plugin-names+1014−1010
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/vim-utils.nix+18−2
This diff is too big to show here.
pkgs/applications/editors/vscode/extensions/default.nix+27−15
This diff is too big to show here.
pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix−1
This diff is too big to show here.
pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+2−2
This diff is too big to show here.
pkgs/applications/editors/vscode/generic.nix+9−3
This diff is too big to show here.
pkgs/applications/editors/vscode/update-vscodium.sh+16−12
This diff is too big to show here.
pkgs/applications/editors/vscode/vscode.nix+6−6
This diff is too big to show here.
pkgs/applications/editors/vscode/vscodium.nix+10−13
This diff is too big to show here.
pkgs/applications/editors/xedit/default.nix+2−2
This diff is too big to show here.
pkgs/applications/emulators/basiliskii/default.nixnew file+28
This diff is too big to show here.
pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patchnew file+10
This diff is too big to show here.
pkgs/applications/emulators/ares/default.nix → pkgs/applications/emulators/bsnes/ares/default.nixrenamed
The content is the same.
pkgs/applications/emulators/ares/fix-ruby.patch → pkgs/applications/emulators/bsnes/ares/fix-ruby.patchrenamed
The content is the same.
pkgs/applications/emulators/bsnes-hd/default.nix → pkgs/applications/emulators/bsnes/bsnes-hd/default.nixrenamed
The content is the same.
pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patchrenamed
The content is the same.
pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patchrenamed
The content is the same.
pkgs/applications/emulators/higan/001-include-cmath.patch → pkgs/applications/emulators/bsnes/higan/001-include-cmath.patchrenamed
The content is the same.
pkgs/applications/emulators/higan/002-sips-to-png2icns.patch → pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patchrenamed
The content is the same.
pkgs/applications/emulators/higan/default.nix → pkgs/applications/emulators/bsnes/higan/default.nixrenamed
The content is the same.
pkgs/applications/emulators/commanderx16/emulator.nix+7−5
This diff is too big to show here.
pkgs/applications/emulators/commanderx16/rom.nix+12−6
This diff is too big to show here.
pkgs/applications/emulators/dolphin-emu/master.nix+4−4
This diff is too big to show here.
pkgs/applications/emulators/dolphin-emu/primehack.nix+2−2
This diff is too big to show here.
pkgs/applications/emulators/epsxe/default.nixdeleted−52
This diff is too big to show here.
pkgs/applications/emulators/fakenes/build.patchdeleted−84
This diff is too big to show here.
pkgs/applications/emulators/fakenes/default.nixdeleted−34
This diff is too big to show here.
pkgs/applications/emulators/flycast/default.nix+2−2
This diff is too big to show here.
pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patchnew file+37
This diff is too big to show here.
pkgs/applications/emulators/mame/default.nix+64−14
This diff is too big to show here.
pkgs/applications/emulators/proton-caller/default.nix+4−3
This diff is too big to show here.
pkgs/applications/emulators/qmc2/default.nixdeleted−41
This diff is too big to show here.
pkgs/applications/emulators/retroarch/cores.nix+16−43
This diff is too big to show here.
pkgs/applications/emulators/retroarch/default.nix+25−8
This diff is too big to show here.
pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patchdeleted−13
This diff is too big to show here.
pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch → pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patchrenamed+1−1
This diff is too big to show here.
pkgs/applications/emulators/retroarch/hashes.json+139−150
This diff is too big to show here.
pkgs/applications/emulators/retroarch/update.py → pkgs/applications/emulators/retroarch/update_cores.pyrenamed+7−13
This diff is too big to show here.
pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch → pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patchrenamed+21−17
This diff is too big to show here.
pkgs/applications/emulators/retroarch/wrapper.nix+10−6
This diff is too big to show here.
pkgs/applications/emulators/ripes/default.nixnew file+50
This diff is too big to show here.
pkgs/applications/emulators/ryujinx/default.nix+7−3
This diff is too big to show here.
pkgs/applications/emulators/ryujinx/deps.nix+9−10
This diff is too big to show here.
pkgs/applications/emulators/ryujinx/updater.sh+51−24
This diff is too big to show here.
pkgs/applications/emulators/snes9x-gtk/default.nixdeleted−37
This diff is too big to show here.
pkgs/applications/emulators/snes9x/default.nixnew file+130
This diff is too big to show here.
pkgs/applications/emulators/tinyemu/default.nix+6−1
This diff is too big to show here.
pkgs/applications/emulators/yuzu/base.nixdeleted−86
This diff is too big to show here.
pkgs/applications/emulators/yuzu/compatibility-list.jsonnew file+1
This diff is too big to show here.
pkgs/applications/emulators/yuzu/default.nix+22−10
This diff is too big to show here.
pkgs/applications/emulators/yuzu/generic.nixnew file+157
This diff is too big to show here.
pkgs/applications/emulators/yuzu/update.shnew file+102
This diff is too big to show here.
pkgs/applications/emulators/zesarux/default.nix+8
This diff is too big to show here.
pkgs/applications/finance/irpf/default.nix+10−3
This diff is too big to show here.
pkgs/applications/gis/grass/default.nix+10−36
This diff is too big to show here.
pkgs/applications/gis/qgis/unwrapped-ltr.nix+2−2
This diff is too big to show here.
pkgs/applications/gis/qgis/unwrapped.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/ImageMagick/7.0.nix+6−11
This diff is too big to show here.
pkgs/applications/graphics/apitrace/default.nix+6
This diff is too big to show here.
pkgs/applications/graphics/apitrace/glibc-2.34-compat.patchnew file+13
This diff is too big to show here.
pkgs/applications/graphics/awesomebump/default.nix+1−1
This diff is too big to show here.
pkgs/applications/graphics/cloudcompare/default.nix+47−12
This diff is too big to show here.
pkgs/applications/graphics/cq-editor/default.nix+1−1
This diff is too big to show here.
pkgs/applications/graphics/darktable/default.nix+2
This diff is too big to show here.
pkgs/applications/graphics/digikam/default.nix+14−3
This diff is too big to show here.
pkgs/applications/graphics/drawing/default.nix+11
This diff is too big to show here.
pkgs/applications/graphics/drawio/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/foxotron/default.nix+1−1
This diff is too big to show here.
pkgs/applications/graphics/geeqie/default.nix+4−4
This diff is too big to show here.
pkgs/applications/graphics/gimp/plugins/default.nix+40−1
This diff is too big to show here.
pkgs/applications/graphics/graphicsmagick/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/gscan2pdf/default.nix+2−4
This diff is too big to show here.
pkgs/applications/graphics/gthumb/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/hydrus/default.nix+3−3
This diff is too big to show here.
pkgs/applications/graphics/imgbrd-grabber/default.nix+1−1
This diff is too big to show here.
pkgs/applications/graphics/inkscape/default.nix+1
This diff is too big to show here.
pkgs/applications/graphics/jpegrescan/default.nix+5−1
This diff is too big to show here.
pkgs/applications/graphics/mypaint/default.nix+10
This diff is too big to show here.
pkgs/applications/graphics/ocrfeeder/default.nix+5−8
This diff is too big to show here.
pkgs/applications/graphics/openboard/default.nix+3−4
This diff is too big to show here.
pkgs/applications/graphics/openscad/default.nix+4
This diff is too big to show here.
pkgs/applications/graphics/ovito/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/photivo/default.nixdeleted−54
This diff is too big to show here.
pkgs/applications/graphics/photivo/gcc6.patchdeleted−13
This diff is too big to show here.
pkgs/applications/graphics/pixeluvo/default.nix+1
This diff is too big to show here.
pkgs/applications/graphics/rawtherapee/default.nix+3
This diff is too big to show here.
pkgs/applications/graphics/rawtherapee/fix-6324.patchnew file+356
This diff is too big to show here.
pkgs/applications/graphics/sane/backends/brscan4/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/sane/backends/brscan5/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/shotwell/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/synfigstudio/default.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/tesseract/default.nix+6
This diff is too big to show here.
pkgs/applications/graphics/tesseract/fetch-language-hashes+2−2
This diff is too big to show here.
pkgs/applications/graphics/tesseract/languages.nix+245−245
This diff is too big to show here.
pkgs/applications/graphics/tesseract/tesseract3.nix+14−3
This diff is too big to show here.
pkgs/applications/graphics/tesseract/tesseract4.nix+15−3
This diff is too big to show here.
pkgs/applications/graphics/tesseract/tesseract5.nixnew file+39
This diff is too big to show here.
pkgs/applications/graphics/tesseract/wrapper.nix+29−3
This diff is too big to show here.
pkgs/applications/graphics/unigine-sanctuary/default.nixnew file+97
This diff is too big to show here.
pkgs/applications/graphics/unigine-tropics/default.nixnew file+95
This diff is too big to show here.
pkgs/applications/graphics/unigine-valley/default.nix+120−99
This diff is too big to show here.
pkgs/applications/graphics/yed/default.nix+2−2
This diff is too big to show here.
pkgs/applications/kde/default.nix+4−1
This diff is too big to show here.
pkgs/applications/networking/browsers/falkon/default.nix → pkgs/applications/kde/falkon.nixrenamed+4−13
This diff is too big to show here.
pkgs/applications/kde/fetch.sh+1−1
This diff is too big to show here.
pkgs/applications/kde/kaddressbook.nix+4
This diff is too big to show here.
pkgs/applications/kde/kalarm.nix+2−2
This diff is too big to show here.
pkgs/applications/kde/kalarmcal.nixdeleted−19
This diff is too big to show here.
pkgs/applications/office/kalendar/default.nix → pkgs/applications/kde/kalendar.nixrenamed+1−10
This diff is too big to show here.
pkgs/applications/kde/kdegraphics-thumbnailers.nix+2−2
This diff is too big to show here.
pkgs/applications/kde/kdepim-addons.nix+2−2
This diff is too big to show here.
pkgs/applications/kde/kdepim-runtime/default.nix+2−2
This diff is too big to show here.
pkgs/applications/kde/kitinerary.nix+1−10
This diff is too big to show here.
pkgs/applications/kde/kmousetool.nixnew file+35
This diff is too big to show here.
pkgs/applications/kde/picmi.nix+1−11
This diff is too big to show here.
pkgs/applications/kde/pimcommon.nix+2−2
This diff is too big to show here.
pkgs/applications/graphics/skanpage/default.nix → pkgs/applications/kde/skanpage.nixrenamed+3−7
This diff is too big to show here.
pkgs/applications/kde/srcs.nix+937−921
This diff is too big to show here.
pkgs/applications/kde/yakuake.nix+2
This diff is too big to show here.
pkgs/applications/logging/sosreport/default.nixnew file+51
This diff is too big to show here.
pkgs/applications/misc/1password-gui/beta.nixnew file+132
This diff is too big to show here.
pkgs/applications/misc/1password-gui/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/1password/default.nix+5−5
This diff is too big to show here.
pkgs/applications/misc/ArchiSteamFarm/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+17−18
This diff is too big to show here.
pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+17−18
This diff is too big to show here.
pkgs/applications/misc/ablog/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/anytype/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/archivy/default.nix+9−3
This diff is too big to show here.
pkgs/applications/misc/audio/wavesurfer/default.nixdeleted−30
This diff is too big to show here.
pkgs/applications/misc/authy/default.nix+30−7
This diff is too big to show here.
pkgs/applications/misc/autospotting/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/azuredatastudio/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/barrier/default.nix+12−1
This diff is too big to show here.
pkgs/applications/misc/bikeshed/default.nixnew file+77
This diff is too big to show here.
pkgs/applications/misc/blender/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/bottles/default.nix+7−17
This diff is too big to show here.
pkgs/applications/misc/bottles/update.pydeleted−65
This diff is too big to show here.
pkgs/applications/misc/buku/default.nix+2−1
This diff is too big to show here.
pkgs/applications/misc/calcoo/0001-javac-encoding.diffnew file+21
This diff is too big to show here.
pkgs/applications/misc/calcoo/default.nixnew file+58
This diff is too big to show here.
pkgs/applications/misc/calcurse/default.nix+4−3
This diff is too big to show here.
pkgs/applications/misc/calibre/default.nix+5−1
This diff is too big to show here.
pkgs/applications/misc/catclock/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/charm/default.nix+3−5
This diff is too big to show here.
pkgs/applications/misc/copyq/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/cubiomes-viewer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/dasel/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/dbeaver/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/debian-goodies/default.nixnew file+70
This diff is too big to show here.
pkgs/applications/misc/dunst/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/electrum-grs/default.nix+3−21
This diff is too big to show here.
pkgs/applications/misc/evtest/default.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/faircamp/default.nix+4−4
This diff is too big to show here.
pkgs/applications/misc/ff2mpv/default.nixnew file+34
This diff is too big to show here.
pkgs/applications/misc/firestarter/default.nix+3−1
This diff is too big to show here.
pkgs/applications/misc/fluidd/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/foxitreader/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/fspy/default.nix+2−3
This diff is too big to show here.
pkgs/applications/misc/gallery-dl/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/globe-cli/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/gnome-firmware-updater/default.nixdeleted−75
This diff is too big to show here.
pkgs/applications/misc/gnome-firmware/default.nixnew file+63
This diff is too big to show here.
pkgs/applications/misc/gnome-secrets/default.nix+4−10
This diff is too big to show here.
pkgs/applications/misc/gnome-solanum/default.nix+10
This diff is too big to show here.
pkgs/applications/misc/gpsprune/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/gremlin-console/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/gsctl/default.nix+13−7
This diff is too big to show here.
pkgs/applications/misc/hello/default.nix+11−9
This diff is too big to show here.
pkgs/applications/misc/hello/test.nixnew file+8
This diff is too big to show here.
pkgs/applications/misc/hubstaff/default.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/hugo/default.nix+6−6
This diff is too big to show here.
pkgs/applications/misc/index-fm/default.nix−2
This diff is too big to show here.
pkgs/applications/misc/ipmiview/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/join-desktop/default.nixnew file+73
This diff is too big to show here.
pkgs/applications/misc/joplin-desktop/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/josm/default.nix+4−4
This diff is too big to show here.
pkgs/applications/misc/k4dirstat/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/keylight-controller-mschneider82/default.nixnew file+53
This diff is too big to show here.
pkgs/applications/misc/kiln/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/kjv/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/kratos/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/libosmocore/default.nix+21−6
This diff is too big to show here.
pkgs/applications/misc/lighthouse/default.nixdeleted−35
This diff is too big to show here.
pkgs/applications/misc/lutris/default.nix+14−12
This diff is too big to show here.
pkgs/applications/misc/lutris/fixes.patchdeleted−67
This diff is too big to show here.
pkgs/applications/misc/marktext/default.nix+5−6
This diff is too big to show here.
pkgs/applications/misc/masterpdfeditor/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/mediainfo/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/megacmd/default.nix+5−10
This diff is too big to show here.
pkgs/applications/misc/megasync/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/mepo/default.nix+34−8
This diff is too big to show here.
pkgs/applications/misc/metadata-cleaner/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/minigalaxy/default.nix+4
This diff is too big to show here.
pkgs/applications/misc/mob/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/moonlight-qt/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/mop/default.nix+7−8
This diff is too big to show here.
pkgs/applications/misc/mop/deps.nixdeleted−11
This diff is too big to show here.
pkgs/applications/misc/multibootusb/default.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/nnn/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/notejot/default.nix+4−11
This diff is too big to show here.
pkgs/applications/misc/nut/default.nix+2
This diff is too big to show here.
pkgs/applications/misc/obsidian/default.nix+25−25
This diff is too big to show here.
pkgs/applications/misc/octoprint/default.nix+7−245
This diff is too big to show here.
pkgs/applications/misc/opencpn/default.nix+85−16
This diff is too big to show here.
pkgs/applications/misc/organicmaps/default.nix+7−12
This diff is too big to show here.
pkgs/applications/misc/osmscout-server/default.nix+3−24
This diff is too big to show here.
pkgs/applications/misc/otpclient/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/pdfslicer/default.nix+6
This diff is too big to show here.
pkgs/applications/misc/pdfstudio/default.nix+4−4
This diff is too big to show here.
pkgs/applications/misc/phwmon/default.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/polybar/default.nix+12−2
This diff is too big to show here.
pkgs/applications/misc/polybar/remove-hardcoded-etc.diffnew file+13
This diff is too big to show here.
pkgs/applications/misc/portfolio-filemanager/default.nix+6−2
This diff is too big to show here.
pkgs/applications/misc/prusa-slicer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/prusa-slicer/super-slicer.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/pure-maps/default.nix+3−2
This diff is too big to show here.
pkgs/applications/misc/pytrainer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/ranger/default.nix+13−4
This diff is too big to show here.
pkgs/applications/misc/rm-improved/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/sampler/default.nix+5−2
This diff is too big to show here.
pkgs/applications/misc/seatd/default.nix+7−3
This diff is too big to show here.
pkgs/applications/misc/sigal/default.nix+17−13
This diff is too big to show here.
pkgs/applications/misc/sigi/default.nix+7−10
This diff is too big to show here.
pkgs/applications/misc/sioyek/default.nixnew file+56
This diff is too big to show here.
pkgs/applications/misc/skate/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/skytemple/default.nix+5−2
This diff is too big to show here.
pkgs/applications/misc/slides/default.nix+5−4
This diff is too big to show here.
pkgs/applications/misc/solaar/default.nix+3−2
This diff is too big to show here.
pkgs/applications/misc/sqls/default.nix+5−3
This diff is too big to show here.
pkgs/applications/misc/stork/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/taskwarrior/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/terminal-typeracer/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/timewarrior/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/toipe/default.nixnew file+20
This diff is too big to show here.
pkgs/applications/misc/trenchbroom/default.nix+13
This diff is too big to show here.
pkgs/applications/misc/tty-solitaire/default.nix+1
This diff is too big to show here.
pkgs/applications/misc/tut/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/tvbrowser/bin.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/udiskie/default.nix+30−25
This diff is too big to show here.
pkgs/applications/misc/udiskie/locale-path.patchnew file+17
This diff is too big to show here.
pkgs/applications/misc/upwork/default.nix+14−4
This diff is too big to show here.
pkgs/applications/misc/veracrypt/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/vit/default.nix+3−5
This diff is too big to show here.
pkgs/applications/misc/wlclock/default.nixnew file+46
This diff is too big to show here.
pkgs/applications/misc/xmrig/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/xmrig/moneroocean.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/xpdf/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/xplr/default.nix+3−3
This diff is too big to show here.
pkgs/applications/misc/xteddy/default.nix+1−1
This diff is too big to show here.
pkgs/applications/misc/ydict/default.nixnew file+28
This diff is too big to show here.
pkgs/applications/misc/zathura/core/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/zettlr/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/zola/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/alpnpass/default.nixnew file+34
This diff is too big to show here.
pkgs/applications/networking/appgate-sdp/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/bee/bee.nix+1−3
This diff is too big to show here.
pkgs/applications/networking/browsers/brave/default.nix+72−53
This diff is too big to show here.
pkgs/applications/networking/browsers/chromium/common.nix+16−9
This diff is too big to show here.
pkgs/applications/networking/browsers/chromium/default.nix+1−3
This diff is too big to show here.
pkgs/applications/networking/browsers/chromium/get-commit-message.py+3−3
This diff is too big to show here.
pkgs/applications/networking/browsers/chromium/upstream-info.json+30−30
This diff is too big to show here.
pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix+393−393
This diff is too big to show here.
pkgs/applications/networking/browsers/firefox-bin/release_sources.nix+393−393
This diff is too big to show here.
pkgs/applications/networking/browsers/firefox/common.nix+3−14
This diff is too big to show here.
pkgs/applications/networking/browsers/firefox/librewolf/src.json+5−5
This diff is too big to show here.
pkgs/applications/networking/browsers/firefox/packages.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/browsers/google-chrome/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/browsers/lagrange/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/browsers/links2/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/browsers/microsoft-edge/default.nix+6−6
This diff is too big to show here.
pkgs/applications/networking/browsers/palemoon/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/browsers/qtchan/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/browsers/qutebrowser/default.nix+6−3
This diff is too big to show here.
pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix+11−4
This diff is too big to show here.
pkgs/applications/networking/browsers/vieb/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/browsers/vivaldi/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/browsers/vivaldi/widevine.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/c14/default.nixdeleted−22
This diff is too big to show here.
pkgs/applications/networking/cloudflare-dyndns/default.nixnew file+53
This diff is too big to show here.
pkgs/applications/networking/cloudflared/default.nix+17−6
This diff is too big to show here.
pkgs/applications/networking/cluster/argo/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/argocd-autopilot/default.nix+4−5
This diff is too big to show here.
pkgs/applications/networking/cluster/argocd/default.nix+7−11
This diff is too big to show here.
pkgs/applications/networking/cluster/arkade/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/cluster/atlantis/default.nix+8−5
This diff is too big to show here.
pkgs/applications/networking/cluster/cilium/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/cmctl/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/driftctl/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/flink/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/fluxcd/default.nix+5−5
This diff is too big to show here.
pkgs/applications/networking/cluster/fluxcd/update.sh+38−31
This diff is too big to show here.
pkgs/applications/networking/cluster/hadoop/default.nix+5
This diff is too big to show here.
pkgs/applications/networking/cluster/helm-docs/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/helm/default.nix+21−9
This diff is too big to show here.
pkgs/applications/networking/cluster/helmfile/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/istioctl/default.nix+9−6
This diff is too big to show here.
pkgs/applications/networking/cluster/k3s/default.nix+23−8
This diff is too big to show here.
pkgs/applications/networking/cluster/k3s/patches/0002-Don-t-build-a-static-binary-in-package-cli.patchdeleted−37
This diff is too big to show here.
pkgs/applications/networking/cluster/kn/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/kompose/default.nix+17−7
This diff is too big to show here.
pkgs/applications/networking/cluster/kops/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/krane/Gemfile.lock+12−12
This diff is too big to show here.
pkgs/applications/networking/cluster/krane/gemset.nix+20−20
This diff is too big to show here.
pkgs/applications/networking/cluster/kube3d/default.nix+29−12
This diff is too big to show here.
pkgs/applications/networking/cluster/kubecfg/default.nix+7−7
This diff is too big to show here.
pkgs/applications/networking/cluster/kubeless/default.nixdeleted−38
This diff is too big to show here.
pkgs/applications/networking/cluster/kubernetes/kubectl.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/kubeseal/default.nix−2
This diff is too big to show here.
pkgs/applications/networking/cluster/kuttl/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/nerdctl/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/nomad-pack/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/cluster/nomad/1.1.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/ocm/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/odo/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/openshift/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/cluster/pachyderm/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/pgo-client/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/popeye/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/sonobuoy/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/cluster/spark/default.nix+6−2
This diff is too big to show here.
pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix+9−4
This diff is too big to show here.
pkgs/applications/networking/cluster/starboard/default.nix+15−9
This diff is too big to show here.
pkgs/applications/networking/cluster/talosctl/default.nix+11−9
This diff is too big to show here.
pkgs/applications/networking/cluster/tanka/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/tektoncd-cli/default.nix+2−1
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform-providers/default.nix+6−2
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform-providers/providers.json+303−278
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform/default.nix+5−4
This diff is too big to show here.
pkgs/applications/networking/cluster/waypoint/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/werf/default.nix+11−4
This diff is too big to show here.
pkgs/applications/networking/feedreaders/rss2email/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/firewalld/default.nixnew file+104
This diff is too big to show here.
pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patchnew file+13
This diff is too big to show here.
pkgs/applications/networking/flexget/default.nix+6−3
This diff is too big to show here.
pkgs/applications/networking/gmailctl/default.nix+4−6
This diff is too big to show here.
pkgs/applications/networking/gns3/default.nix+7−8
This diff is too big to show here.
pkgs/applications/networking/gns3/gui.nix+29−7
This diff is too big to show here.
pkgs/applications/networking/gns3/server.nix+36−22
This diff is too big to show here.
pkgs/applications/networking/ids/zeek/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/alfaview/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/bluejeans/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nixnew file+50
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nixnew file+35
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/caprine-bin/default.nixnew file+25
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/chatty/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix+6−5
This diff is too big to show here.
pkgs/development/libraries/libdeltachat/darwin-dylib.patch → pkgs/applications/networking/instant-messengers/deltachat-desktop/libdeltachat-darwin-dylib.patchrenamed
The content is the same.
pkgs/applications/networking/instant-messengers/deltachat-desktop/package.json+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/discord/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/element/element-desktop-package.json+2−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/element/pin.json+4−4
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/ferdi/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/franz/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/gajim/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/gotktrix/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/gtmess/default.nixdeleted−20
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix+4−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/kaidan/default.nix+2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/kdeltachat/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/linphone/default.nix+40−13
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch+56−31
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patchnew file+27
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch+6−6
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/pond/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/psi-plus/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/ripcord/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/session-desktop-appimage/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/signal-desktop/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/slack/default.nix+7−7
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/teams/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix+1−21
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patchnew file+57
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kotato-10.12-sdk.patch+31−22
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt-10.12-sdk.patch+17−4
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix+15−7
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nixnew file+23
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix+8
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/telegram/tdesktop/kf594.diffnew file+57
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/threema-desktop/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/torchat/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/wire-desktop/default.nix+6−5
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/zoom-us/default.nix+47−8
This diff is too big to show here.
pkgs/applications/networking/instant-messengers/zulip/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/ipfs-cluster/default.nix+3−12
This diff is too big to show here.
pkgs/applications/networking/ipfs/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/irc/senpai/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/irc/weechat/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/aerc/default.nix+23−14
This diff is too big to show here.
pkgs/applications/networking/mailreaders/aerc/runtime-sharedir.patch+86−56
This diff is too big to show here.
pkgs/applications/networking/mailreaders/claws-mail/default.nix+6−14
This diff is too big to show here.
pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/evolution/evolution/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/mailspring/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/mailreaders/meli/default.nix+1−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/mutt/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/neomutt/default.nix+2−12
This diff is too big to show here.
pkgs/applications/networking/mailreaders/notbit/default.nixdeleted−30
This diff is too big to show here.
pkgs/applications/networking/mailreaders/notmuch-bower/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/notmuch/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix+261−261
This diff is too big to show here.
pkgs/applications/networking/mailreaders/thunderbird/packages.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/modem-manager-gui/default.nix+15
This diff is too big to show here.
pkgs/applications/networking/n8n/node-packages.nix+706−774
This diff is too big to show here.
pkgs/applications/networking/newsreaders/liferea/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/nextcloud-client/default.nix+26−3
This diff is too big to show here.
pkgs/applications/networking/nextdns/default.nix+3−5
This diff is too big to show here.
pkgs/applications/networking/owncloud-client/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/p2p/gnunet/default.nix+2−2
This diff is too big to show here.
pkgs/tools/networking/p2p/jesec-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/default.nixrenamed+3−3
This diff is too big to show here.
pkgs/tools/networking/p2p/jesec-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nixrenamed+7−3
This diff is too big to show here.
pkgs/applications/networking/p2p/qbittorrent/default.nix+2−2
This diff is too big to show here.
pkgs/tools/networking/p2p/rakshasa-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nixrenamed
The content is the same.
pkgs/tools/networking/p2p/rakshasa-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nixrenamed
The content is the same.
pkgs/applications/networking/p2p/tribler/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/p2p/twister/default.nixdeleted−70
This diff is too big to show here.
pkgs/applications/networking/ping/default.nixdeleted−76
This diff is too big to show here.
pkgs/applications/networking/pjsip/default.nix+7−1
This diff is too big to show here.
pkgs/applications/networking/protonvpn-gui/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/remote/freerdp/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/remote/rustdesk/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/remote/vmware-horizon-client/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/resilio-sync/default.nix+19−19
This diff is too big to show here.
pkgs/applications/networking/seafile-client/default.nix+5−3
This diff is too big to show here.
pkgs/applications/networking/seahub/default.nix+12−5
This diff is too big to show here.
pkgs/applications/networking/seaweedfs/default.nix+6−5
This diff is too big to show here.
pkgs/applications/networking/shellhub-agent/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/sniffers/wireshark/default.nix+20−5
This diff is too big to show here.
pkgs/applications/networking/soju/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/sync/onedrive/default.nix+2−2
This diff is too big to show here.
pkgs/applications/networking/sync/rclone/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/syncplay/default.nix+6−4
This diff is too big to show here.
pkgs/applications/networking/syncthing/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/synology-drive-client/default.nix+4−4
This diff is too big to show here.
pkgs/applications/networking/termius/default.nix+3−3
This diff is too big to show here.
pkgs/applications/networking/tetrd/default.nix+1−1
This diff is too big to show here.
pkgs/applications/networking/zerobin/default.nix+1−1
This diff is too big to show here.
pkgs/applications/office/banking/default.nix+10−8
This diff is too big to show here.
pkgs/applications/office/beamerpresenter/default.nix+45−22
This diff is too big to show here.
pkgs/applications/office/bookworm/default.nix−2
This diff is too big to show here.
pkgs/applications/office/buho/default.nixnew file+58
This diff is too big to show here.
pkgs/applications/office/calligra/default.nix+16
This diff is too big to show here.
pkgs/applications/office/fava/default.nix+15−3
This diff is too big to show here.
pkgs/applications/office/foliate/default.nix−1
This diff is too big to show here.
pkgs/applications/office/gnumeric/default.nix+3−2
This diff is too big to show here.
pkgs/applications/office/jameica/default.nix+1−1
This diff is too big to show here.
pkgs/applications/office/khronos/default.nix+2−9
This diff is too big to show here.
pkgs/applications/office/ledger/default.nix+2−2
This diff is too big to show here.
pkgs/applications/office/libreoffice/soffice-template.desktopnew file+6
This diff is too big to show here.
pkgs/applications/office/libreoffice/wrapper.nix+25−12
This diff is too big to show here.
pkgs/applications/office/morgen/default.nix+2−2
This diff is too big to show here.
pkgs/applications/office/paperless-ng/default.nix → pkgs/applications/office/paperless-ngx/default.nixrenamed+16−34
This diff is too big to show here.
pkgs/applications/office/paperwork/paperwork-gtk.nix+1−1
This diff is too big to show here.
pkgs/applications/office/portfolio/default.nix+3−3
This diff is too big to show here.
pkgs/applications/office/qownnotes/default.nix+2−2
This diff is too big to show here.
pkgs/applications/office/trilium/default.nix+3−3
This diff is too big to show here.
pkgs/applications/office/tusk/default.nix+3−2
This diff is too big to show here.
pkgs/applications/office/vnote/default.nix+2−2
This diff is too big to show here.
pkgs/applications/office/zotero/default.nix+2−2
This diff is too big to show here.
pkgs/applications/radio/cubicsdr/default.nix+3−21
This diff is too big to show here.
pkgs/applications/radio/flex-ncat/default.nix+1
This diff is too big to show here.
pkgs/applications/radio/flrig/default.nix+4−2
This diff is too big to show here.
pkgs/applications/radio/gnss-sdr/default.nix+6
This diff is too big to show here.
pkgs/applications/radio/gnuradio/3.9.nix+8−2
This diff is too big to show here.
pkgs/applications/radio/gnuradio/default.nix+10−3
This diff is too big to show here.
pkgs/applications/radio/gnuradio/wrapper.nix+1−1
This diff is too big to show here.
pkgs/applications/radio/gqrx/default.nix+2−2
This diff is too big to show here.
pkgs/applications/radio/kalibrate-rtl/default.nix+5−5
This diff is too big to show here.
pkgs/applications/radio/rtl-ais/default.nix+1
This diff is too big to show here.
pkgs/applications/radio/rtl-sdr/default.nix+11−7
This diff is too big to show here.
pkgs/applications/radio/splat/default.nixnew file+55
This diff is too big to show here.
pkgs/applications/radio/uhd/default.nix+2
This diff is too big to show here.
pkgs/applications/science/astronomy/astrolabe-generator/default.nix+1
This diff is too big to show here.
pkgs/applications/science/astronomy/openspace/assets.patchdeleted−100
This diff is too big to show here.
pkgs/applications/science/astronomy/openspace/config.patchdeleted−49
This diff is too big to show here.
pkgs/applications/science/astronomy/openspace/constexpr.patchdeleted−91
This diff is too big to show here.
pkgs/applications/science/astronomy/openspace/default.nixdeleted−90
This diff is too big to show here.
pkgs/applications/science/astronomy/openspace/vrpn.patchdeleted−13
This diff is too big to show here.
pkgs/applications/science/astronomy/stellarium/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/biology/bayescan/default.nix+1
This diff is too big to show here.
pkgs/applications/science/biology/blast/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/biology/bwa/default.nix+2
This diff is too big to show here.
pkgs/applications/science/biology/clustal-omega/default.nix+1
This diff is too big to show here.
pkgs/applications/science/biology/cmtk/default.nix+4−1
This diff is too big to show here.
pkgs/applications/science/biology/dcm2niix/default.nix+42−7
This diff is too big to show here.
pkgs/applications/science/biology/dcm2niix/dont-fetch-external-libs.patchnew file+36
This diff is too big to show here.
pkgs/applications/science/biology/eggnog-mapper/default.nix+30−16
This diff is too big to show here.
pkgs/applications/science/biology/megahit/default.nix+3
This diff is too big to show here.
pkgs/applications/science/biology/ncbi-tools/default.nixdeleted−34
This diff is too big to show here.
pkgs/applications/science/biology/picard-tools/default.nix+1
This diff is too big to show here.
pkgs/applications/science/biology/quast/default.nix+1−3
This diff is too big to show here.
pkgs/applications/science/biology/samtools/default.nix+8−1
This diff is too big to show here.
pkgs/applications/science/biology/tebreak/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/chemistry/jmol/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/computer-architecture/qtrvsim/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/electronics/eagle/eagle7.nixdeleted−97
This diff is too big to show here.
pkgs/applications/science/electronics/verilator/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/engineering/brmodelo/default.nixnew file+109
This diff is too big to show here.
pkgs/applications/science/logic/abc/default.nix+3−3
This diff is too big to show here.
pkgs/applications/science/logic/coq/default.nix+14−14
This diff is too big to show here.
pkgs/applications/science/logic/cvc5/default.nixnew file+34
This diff is too big to show here.
pkgs/applications/science/logic/easycrypt/default.nixnew file+50
This diff is too big to show here.
pkgs/applications/science/logic/easycrypt/runtest.nixnew file+24
This diff is too big to show here.
pkgs/applications/science/logic/elan/default.nix+3−3
This diff is too big to show here.
pkgs/applications/science/logic/fast-downward/default.nix+19−12
This diff is too big to show here.
pkgs/applications/science/logic/isabelle/default.nix+31−2
This diff is too big to show here.
pkgs/applications/science/logic/jonprl/default.nixdeleted−35
This diff is too big to show here.
pkgs/applications/science/logic/key/default.nix+2−3
This diff is too big to show here.
pkgs/applications/science/logic/lean2/default.nixdeleted−37
This diff is too big to show here.
pkgs/applications/science/logic/naproche/default.nix+3−3
This diff is too big to show here.
pkgs/applications/science/logic/otter/default.nixdeleted−53
This diff is too big to show here.
pkgs/applications/science/logic/potassco/clingcon.nix+5
This diff is too big to show here.
pkgs/applications/science/logic/symbiyosys/default.nix+1
This diff is too big to show here.
pkgs/applications/science/logic/symfpu/default.nixnew file+26
This diff is too big to show here.
pkgs/applications/science/logic/tlaplus/toolbox.nix+1−1
This diff is too big to show here.
pkgs/applications/science/logic/z3/default.nix+66−66
This diff is too big to show here.
pkgs/applications/science/machine-learning/finalfusion-utils/default.nix+1
This diff is too big to show here.
pkgs/applications/science/math/adolc/default.nixnew file+23
This diff is too big to show here.
pkgs/applications/science/math/caffe/default.nix+9−4
This diff is too big to show here.
pkgs/applications/science/math/calc/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/math/calculix/calculix.patch+10−9
This diff is too big to show here.
pkgs/applications/science/math/calculix/default.nix+6−3
This diff is too big to show here.
pkgs/applications/science/math/cntk/default.nix+6−2
This diff is too big to show here.
pkgs/applications/science/math/giac/default.nix+12−16
This diff is too big to show here.
pkgs/applications/science/math/mxnet/default.nix+14−2
This diff is too big to show here.
pkgs/applications/science/math/qalculate-gtk/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/math/sage/patches/docutils-0.18.1-deprecation.patchnew file+13
This diff is too big to show here.
pkgs/applications/science/math/sage/sage-env.nix+2
This diff is too big to show here.
pkgs/applications/science/math/sage/sage-src.nix+51−11
This diff is too big to show here.
pkgs/applications/science/math/sage/sagelib.nix+8−3
This diff is too big to show here.
pkgs/applications/science/math/wolfram-engine/default.nixnew file+143
This diff is too big to show here.
pkgs/applications/science/math/wolfram-engine/l10ns.nixnew file+51
This diff is too big to show here.
pkgs/applications/science/math/wolfram-engine/notebook.nixnew file+9
This diff is too big to show here.
pkgs/applications/science/math/wxmaxima/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/medicine/xmedcon/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/misc/bada-bib/default.nix+3−3
This diff is too big to show here.
pkgs/applications/science/misc/colmap/default.nix+22−6
This diff is too big to show here.
pkgs/applications/science/misc/cwltool/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/misc/fityk/default.nix+4
This diff is too big to show here.
pkgs/applications/science/misc/netlogo/default.nix+1−1
This diff is too big to show here.
pkgs/applications/science/misc/openmvs/default.nixdeleted−77
This diff is too big to show here.
pkgs/applications/science/misc/root/5.nix+5
This diff is too big to show here.
pkgs/applications/science/misc/snakemake/default.nix+27−13
This diff is too big to show here.
pkgs/applications/science/molecular-dynamics/gromacs/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/physics/xfitter/default.nix+34−30
This diff is too big to show here.
pkgs/applications/science/physics/xfitter/undefined_behavior.patchdeleted−454
This diff is too big to show here.
pkgs/applications/science/programming/jflap/default.nixnew file+32
This diff is too big to show here.
pkgs/applications/science/robotics/mavproxy/default.nix+2−2
This diff is too big to show here.
pkgs/applications/science/robotics/sumorobot-manager/default.nix+1−1
This diff is too big to show here.
pkgs/applications/terminal-emulators/alacritty/default.nix−2
This diff is too big to show here.
pkgs/applications/terminal-emulators/foot/default.nix+3−2
This diff is too big to show here.
pkgs/applications/terminal-emulators/hyper/default.nix+2−2
This diff is too big to show here.
pkgs/applications/terminal-emulators/syncterm/default.nix+2
This diff is too big to show here.
pkgs/applications/terminal-emulators/wezterm/default.nix+21−10
This diff is too big to show here.
pkgs/applications/version-management/bitkeeper/default.nixdeleted−56
This diff is too big to show here.
pkgs/applications/version-management/commit-formatter/default.nix+1
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/bfg-repo-cleaner/default.nix+1
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix+1
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/gh/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/ghorg/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-annex-utils/default.nix+1
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-branchless/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-cliff/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-crypt/default.nix+17−7
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-dit/default.nixdeleted−58
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-extras/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-interactive-rebase-tool/default.nix+5−12
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git-machete/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/git/default.nix+27−18
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/gitbatch/default.nix+12−10
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/gitbatch/deps.nixdeleted−543
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/glab/default.nix+10−1
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/hut/default.nix+5−8
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/scmpuff/default.nix+14−9
This diff is too big to show here.
pkgs/applications/version-management/git-and-tools/scmpuff/deps.nixdeleted−273
This diff is too big to show here.
pkgs/applications/version-management/git-lfs/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-repo/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-review/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/git-sizer/default.nix+15−6
This diff is too big to show here.
pkgs/applications/version-management/gitea/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/github-desktop/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/gitkraken/default.nix+4−4
This diff is too big to show here.
pkgs/applications/version-management/gitlab/data.json+7−7
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitaly/Gemfile+1−1
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitaly/Gemfile.lock+13−13
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitaly/default.nix+4−4
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitaly/gemset.nix+16−16
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitlab-shell/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/gitlab/gitlab-workhorse/default.nix+2−2
This diff is too big to show here.
pkgs/applications/version-management/gitlab/rubyEnv/Gemfile+10−9
This diff is too big to show here.
pkgs/applications/version-management/gitlab/rubyEnv/Gemfile.lock+87−83
This diff is too big to show here.
pkgs/applications/version-management/gitlab/rubyEnv/gemset.nix+75−64
This diff is too big to show here.
pkgs/applications/version-management/gitoxide/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/gogs/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/jujutsu/default.nix+3−2
This diff is too big to show here.
pkgs/applications/version-management/mercurial/default.nix+3−8
This diff is too big to show here.
pkgs/applications/version-management/mercurial/fix-rhg-type-aarch64.patchdeleted−12
This diff is too big to show here.
pkgs/applications/version-management/monotone/default.nix+2
This diff is too big to show here.
pkgs/applications/version-management/p4/default.nix+1−1
This diff is too big to show here.
pkgs/applications/version-management/pijul/default.nix+3−3
This diff is too big to show here.
pkgs/applications/version-management/rcs/default.nix+1−1
This diff is too big to show here.
pkgs/applications/version-management/redmine/Gemfile+2−2
This diff is too big to show here.
pkgs/applications/version-management/redmine/Gemfile.lock+48−50
This diff is too big to show here.
pkgs/applications/version-management/redmine/default.nix+4−6
This diff is too big to show here.
pkgs/applications/version-management/redmine/gemset.nix+39−49
This diff is too big to show here.
pkgs/applications/version-management/redmine/update.shnew file+17
This diff is too big to show here.
pkgs/applications/version-management/subversion/default.nix+4−9
This diff is too big to show here.
pkgs/applications/version-management/yadm/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/ani-cli/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/celluloid/default.nix+2−4
This diff is too big to show here.
pkgs/applications/video/clickshare-csc1/default.nix−2
This diff is too big to show here.
pkgs/applications/video/davinci-resolve/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/epgstation/default.nix+3−5
This diff is too big to show here.
pkgs/applications/video/epgstation/update.nix+2−4
This diff is too big to show here.
pkgs/applications/video/f1viewer/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/ffmpeg-normalize/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/handbrake/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/hdhomerun-config-gui/default.nix+3−1
This diff is too big to show here.
pkgs/applications/video/hyperion-ng/default.nixnew file+50
This diff is too big to show here.
pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patchnew file+88
This diff is too big to show here.
pkgs/applications/video/kodi/unwrapped.nix+17−2
This diff is too big to show here.
pkgs/applications/video/kodi/wrapper.nix−6
This diff is too big to show here.
pkgs/applications/video/lightworks/default.nix+4−4
This diff is too big to show here.
pkgs/applications/video/mirakurun/default.nix+4−6
This diff is too big to show here.
pkgs/applications/video/mirakurun/update.nix+3−7
This diff is too big to show here.
pkgs/applications/video/mkvtoolnix/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/mpv/scripts/autocrop.nixnew file+19
This diff is too big to show here.
pkgs/applications/video/mpv/scripts/autodeint.nixnew file+19
This diff is too big to show here.
pkgs/applications/video/obs-studio/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/obs-studio/plugins/default.nix+1
This diff is too big to show here.
pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nixnew file+35
This diff is too big to show here.
pkgs/applications/video/peek/default.nix−2
This diff is too big to show here.
pkgs/applications/video/pitivi/default.nix+8
This diff is too big to show here.
pkgs/applications/video/quvi/library.nix+1
This diff is too big to show here.
pkgs/applications/video/quvi/scripts.nix+1
This diff is too big to show here.
pkgs/applications/video/quvi/tool.nix+1
This diff is too big to show here.
pkgs/applications/video/vdr/plugins.nix+5−80
This diff is too big to show here.
pkgs/applications/video/vlc/default.nix+2−2
This diff is too big to show here.
pkgs/applications/video/webcamoid/default.nix+4−9
This diff is too big to show here.
pkgs/applications/video/webtorrent_desktop/default.nix+68−87
This diff is too big to show here.
pkgs/applications/virtualization/cloud-hypervisor/default.nix+3−3
This diff is too big to show here.
pkgs/applications/virtualization/containerd/default.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/crosvm/Cargo.lock+31−22
This diff is too big to show here.
pkgs/applications/virtualization/crosvm/generate-cargo.shnew file+7
This diff is too big to show here.
pkgs/applications/virtualization/crosvm/update.py+10−2
This diff is too big to show here.
pkgs/applications/virtualization/crosvm/upstream-info.json+5−5
This diff is too big to show here.
pkgs/applications/virtualization/crun/default.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/distrobox/default.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/docker-slim/default.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/docker/buildx.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/docker/compose.nix+3−3
This diff is too big to show here.
pkgs/applications/virtualization/ecs-agent/default.nix+1
This diff is too big to show here.
pkgs/applications/virtualization/firectl/default.nix+6−6
This diff is too big to show here.
pkgs/applications/virtualization/firectl/gomod.patchdeleted−15
This diff is too big to show here.
pkgs/applications/virtualization/imgcrypt/default.nix+2−2
This diff is too big to show here.
pkgs/applications/virtualization/kvmtool/default.nixnew file+23
This diff is too big to show here.
pkgs/applications/virtualization/lima/default.nix+8−3
This diff is too big to show here.
pkgs/applications/virtualization/podman-tui/default.nix+4−4
This diff is too big to show here.
pkgs/applications/virtualization/podman/default.nix+1
This diff is too big to show here.
pkgs/applications/virtualization/qemu/allow-virtfs-on-darwin.patchdeleted−77
This diff is too big to show here.
pkgs/applications/virtualization/qemu/default.nix+18−70
This diff is too big to show here.
pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch+4−4
This diff is too big to show here.
pkgs/applications/virtualization/qemu/rename-9p-util.patchdeleted−54
This diff is too big to show here.
pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patchnew file+208
This diff is too big to show here.
pkgs/applications/virtualization/virt-manager/default.nix+12−2
This diff is too big to show here.
pkgs/applications/virtualization/virtualbox/guest-additions/default.nix+3−7
This diff is too big to show here.
pkgs/applications/virtualization/vmware-workstation/default.nixnew file+341
This diff is too big to show here.
pkgs/applications/virtualization/vmware-workstation/vmware-bootstrapnew file+11
This diff is too big to show here.
pkgs/applications/virtualization/vmware-workstation/vmware-confignew file+21
This diff is too big to show here.
pkgs/applications/virtualization/vmware-workstation/vmware-installer-bootstrapnew file+5
This diff is too big to show here.
pkgs/applications/virtualization/vmware-workstation/vmware-modconfignew file+8
This diff is too big to show here.
pkgs/applications/virtualization/x11docker/default.nix+2−2
This diff is too big to show here.
pkgs/applications/window-managers/afterstep/default.nix+13−1
This diff is too big to show here.
pkgs/applications/window-managers/berry/default.nix+2−2
This diff is too big to show here.
pkgs/applications/window-managers/clfswm/default.nixdeleted−51
This diff is too big to show here.
pkgs/applications/window-managers/clfswm/require-clx.patchdeleted−13
This diff is too big to show here.
pkgs/applications/window-managers/herbstluftwm/default.nix+9−4
This diff is too big to show here.
pkgs/applications/window-managers/i3/status-rust.nix+3−3
This diff is too big to show here.
pkgs/applications/window-managers/phosh/default.nix+2−2
This diff is too big to show here.
pkgs/applications/window-managers/sway/idle.nix+2
This diff is too big to show here.
pkgs/applications/window-managers/sway/lock-effects.nix+8
This diff is too big to show here.
pkgs/applications/window-managers/wmfs/default.nix+1−5
This diff is too big to show here.
pkgs/applications/window-managers/wmii-hg/default.nixdeleted−46
This diff is too big to show here.
pkgs/applications/window-managers/wmii/default.nixnew file+72
This diff is too big to show here.
pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix+1−1
This diff is too big to show here.
pkgs/build-support/build-graalvm-native-image/default.nix+2
This diff is too big to show here.
pkgs/build-support/docker/default.nix+17−25
This diff is too big to show here.
pkgs/build-support/docker/examples.nix+1−1
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/default.nix+10−5
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-build-hook.sh+2−1
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-check-hook.sh+2−1
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh+5−1
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-fixup-hook.sh+5−4
This diff is too big to show here.
pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh+2−1
This diff is too big to show here.
pkgs/build-support/dotnet/make-nuget-source/default.nix+26−18
This diff is too big to show here.
pkgs/build-support/dotnet/nuget-to-nix/default.nix+25−3
This diff is too big to show here.
pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh+3−1
This diff is too big to show here.
pkgs/build-support/emacs/wrapper.nix+16−2
This diff is too big to show here.
pkgs/build-support/emacs/wrapper.sh+1−1
This diff is too big to show here.
pkgs/build-support/fake-nss/default.nixnew file+24
This diff is too big to show here.
pkgs/build-support/fetchfirefoxaddon/default.nix+2−2
This diff is too big to show here.
pkgs/build-support/fetchgit/default.nix+2−1
This diff is too big to show here.
pkgs/build-support/fetchnextcloudapp/default.nix+1−6
This diff is too big to show here.
pkgs/build-support/fetchurl/default.nix+1−1
This diff is too big to show here.
pkgs/build-support/fetchurl/mirrors.nix+1
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng-tool.nixnew file+16
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng.nixnew file+93
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng/Cargo.locknew file+5
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng/Cargo.tomlnew file+9
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng/README.mdnew file+79
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng/src/main.rsnew file+216
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd.nix+2−2
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd.sh+1−1
This diff is too big to show here.
pkgs/build-support/make-darwin-bundle/default.nix+4−4
This diff is too big to show here.
pkgs/build-support/make-desktopitem/default.nix+3−8
This diff is too big to show here.
pkgs/build-support/ocaml/dune.nix+2−2
This diff is too big to show here.
pkgs/build-support/ocaml/oasis.nix+1−1
This diff is too big to show here.
pkgs/build-support/rust/build-rust-crate/build-crate.nix+3−2
This diff is too big to show here.
pkgs/build-support/rust/build-rust-crate/configure-crate.nix+2−1
This diff is too big to show here.
pkgs/build-support/rust/build-rust-crate/default.nix+11−4
This diff is too big to show here.
pkgs/build-support/rust/default-crate-overrides.nix+1−1
This diff is too big to show here.
pkgs/build-support/setup-hooks/auto-patchelf.py+23−17
This diff is too big to show here.
pkgs/build-support/setup-hooks/auto-patchelf.sh+9−1
This diff is too big to show here.
pkgs/build-support/setup-hooks/copy-desktop-items.sh+5−4
This diff is too big to show here.
pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh+26−6
This diff is too big to show here.
pkgs/build-support/setup-hooks/make-wrapper.sh+5
This diff is too big to show here.
pkgs/build-support/setup-hooks/postgresql-test-hook/default.nixnew file+9
This diff is too big to show here.
pkgs/build-support/setup-hooks/postgresql-test-hook/postgresql-test-hook.shnew file+79
This diff is too big to show here.
pkgs/build-support/setup-hooks/postgresql-test-hook/test.nixnew file+27
This diff is too big to show here.
pkgs/build-support/setup-hooks/wrap-gapps-hook/wrap-gapps-hook.sh−4
This diff is too big to show here.
pkgs/build-support/testers/default.nixnew file+18
This diff is too big to show here.
pkgs/build-support/test-equal-derivation.nix → pkgs/build-support/testers/test-equal-derivation.nixrenamed+1−18
This diff is too big to show here.
pkgs/build-support/trivial-builders.nix+9−39
This diff is too big to show here.
pkgs/build-support/trivial-builders/test/write-text-file.nixnew file+34
This diff is too big to show here.
pkgs/build-support/writers/default.nix+3−3
This diff is too big to show here.
pkgs/common-updater/git-updater.nix+6−2
This diff is too big to show here.
pkgs/common-updater/scripts/list-git-tags+1−1
This diff is too big to show here.
pkgs/data/documentation/rnrs/r3rs.nixdeleted−7
This diff is too big to show here.
pkgs/data/documentation/scheme-manpages/default.nix+3−3
This diff is too big to show here.
pkgs/data/fonts/amiri/default.nix+2−2
This diff is too big to show here.
pkgs/data/fonts/annapurna-sil/default.nixnew file+29
This diff is too big to show here.
pkgs/data/fonts/comic-mono/comic-mono-weight.confnew file+14
This diff is too big to show here.
pkgs/data/fonts/comic-mono/default.nixnew file+35
This diff is too big to show here.
pkgs/data/fonts/ezra-sil/default.nixnew file+26
This diff is too big to show here.
pkgs/data/fonts/galatia-sil/default.nixnew file+29
This diff is too big to show here.
pkgs/data/fonts/iosevka/bin.nix+3−2
This diff is too big to show here.
pkgs/data/fonts/iosevka/variants.nix+92−92
This diff is too big to show here.
pkgs/data/fonts/kacst/default.nixnew file+22
This diff is too big to show here.
pkgs/data/fonts/lao/default.nixnew file+22
This diff is too big to show here.
pkgs/data/fonts/material-design-icons/default.nix+3−6
This diff is too big to show here.
pkgs/data/fonts/sarasa-gothic/default.nix+2−2
This diff is too big to show here.
pkgs/data/fonts/sudo/default.nix+2−2
This diff is too big to show here.
pkgs/data/fonts/times-newer-roman/default.nix+1−1
This diff is too big to show here.
pkgs/data/fonts/uni-vga/default.nix+4−6
This diff is too big to show here.
pkgs/data/fonts/unifont/default.nix+4−6
This diff is too big to show here.
pkgs/data/fonts/unifont_upper/default.nix+2−2
This diff is too big to show here.
pkgs/data/icons/comixcursors/default.nix+5−25
This diff is too big to show here.
pkgs/data/icons/elementary-xfce-icon-theme/default.nix+3−3
This diff is too big to show here.
pkgs/data/icons/hicolor-icon-theme/default.nix+3−2
This diff is too big to show here.
pkgs/data/icons/luna-icons/default.nix+5−2
This diff is too big to show here.
pkgs/data/misc/cacert/default.nix+2−2
This diff is too big to show here.
pkgs/data/misc/cacert/update.sh+7−10
This diff is too big to show here.
pkgs/data/misc/cldr-annotations/default.nixnew file+24
This diff is too big to show here.
pkgs/data/misc/cldr-emoji-annotation/default.nixdeleted−27
This diff is too big to show here.
pkgs/data/misc/dns-root-data/default.nix+2−1
This diff is too big to show here.
pkgs/data/misc/freepats/default.nix+3−2
This diff is too big to show here.
pkgs/data/misc/hackage/default.nix+2−1
This diff is too big to show here.
pkgs/data/misc/hackage/pin.json+4−4
This diff is too big to show here.
pkgs/data/misc/iana-etc/default.nix+2−3
This diff is too big to show here.
pkgs/data/misc/nixos-artwork/wallpapers.nix+16
This diff is too big to show here.
pkgs/data/misc/shared-mime-info/default.nix+1
This diff is too big to show here.
pkgs/data/misc/tzdata/default.nix+3−3
This diff is too big to show here.
pkgs/data/misc/unicode-emoji/default.nix+4−12
This diff is too big to show here.
pkgs/data/misc/wireless-regdb/default.nix+2−2
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook-ebnf/default.nix+4−3
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.1.2.nix+3−8
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.2.nix+2−5
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.3.nix+2−5
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.4.nix+2−5
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.5.nix+2−5
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/docbook/generic.nix+6−4
This diff is too big to show here.
pkgs/data/sgml+xml/schemas/xml-dtd/xhtml1/default.nix+3−2
This diff is too big to show here.
pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix+5−1
This diff is too big to show here.
pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/fix-man-options-duplication.patchnew file+11
This diff is too big to show here.
pkgs/data/themes/arc/default.nix+2−2
This diff is too big to show here.
pkgs/data/themes/flat-remix-gnome/default.nix+4−4
This diff is too big to show here.
pkgs/data/themes/flat-remix-gtk/default.nix+2−2
This diff is too big to show here.
pkgs/data/themes/gnome-breeze/default.nixdeleted−29
This diff is too big to show here.
pkgs/data/themes/orchis-theme/default.nix+2−2
This diff is too big to show here.
pkgs/data/themes/vimix/default.nix+12−4
This diff is too big to show here.
pkgs/data/themes/yaru/default.nix+2−5
This diff is too big to show here.
pkgs/desktops/cdesktopenv/default.nix+15−2
This diff is too big to show here.
pkgs/desktops/enlightenment/econnman/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/enlightenment/ecrire/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/efl/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/enlightenment/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/ephoto/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/evisum/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/rage/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/enlightenment/terminology/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/gnome-2/bindings/gnome-python/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix+6−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/ORBit2/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/gnome-common/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix+5−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/gtkhtml/default.nix+4−3
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libIDL/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix+4−3
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libbonobo/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libbonoboui/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libglade/default.nix+6−8
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnome/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix+5−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomecups/default.nix+4−3
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix+3−2
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix+5−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgnomeui/default.nix+4−4
This diff is too big to show here.
pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix+5−4
This diff is too big to show here.
pkgs/desktops/gnome/apps/gedit/default.nix+5−2
This diff is too big to show here.
pkgs/desktops/gnome/apps/ghex/default.nix+8−27
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-boxes/default.nix+7
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-boxes/fix-gir-lib-path.patchnew file+22
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-calendar/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-connections/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-maps/default.nix+2−13
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-music/default.nix+4−5
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-nettool/default.nix+61−11
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-text-editor/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/apps/gnome-todo/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/gnome/core/eog/default.nix+9−2
This diff is too big to show here.
pkgs/desktops/gnome/core/eog/fix-gir-lib-path.patchnew file+13
This diff is too big to show here.
pkgs/desktops/gnome/core/epiphany/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/evince/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/evolution-data-server/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/gnome-initial-setup/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/gnome-software/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/mutter/3.38/default.nix+3−1
This diff is too big to show here.
pkgs/desktops/gnome/core/mutter/default.nix+3−1
This diff is too big to show here.
pkgs/desktops/gnome/core/nautilus/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/simple-scan/default.nix+3−4
This diff is too big to show here.
pkgs/desktops/gnome/core/sushi/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/core/zenity/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/default.nix+1−16
This diff is too big to show here.
pkgs/desktops/gnome/extensions/arcmenu/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/extensions/collisions.json+32
This diff is too big to show here.
pkgs/desktops/gnome/extensions/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/gnome/extensions/extensionRenames.nix+15−12
This diff is too big to show here.
pkgs/desktops/gnome/extensions/extensions.json+248−223
This diff is too big to show here.
pkgs/desktops/gnome/extensions/impatience/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/gnome/extensions/manuallyPackaged.nix−1
This diff is too big to show here.
pkgs/desktops/gnome/extensions/night-theme-switcher/default.nixdeleted−35
This diff is too big to show here.
pkgs/desktops/gnome/extensions/system-monitor/default.nix+11−24
This diff is too big to show here.
pkgs/desktops/gnome/extensions/update-extensions.py+66−47
This diff is too big to show here.
pkgs/desktops/gnome/games/hitori/default.nix+2−14
This diff is too big to show here.
pkgs/desktops/gnome/games/swell-foop/default.nix+3−4
This diff is too big to show here.
pkgs/desktops/gnome/games/tali/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/lumina/lumina-calculator/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lumina/lumina-pdf/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lumina/lumina/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lxqt/compton-conf/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lxqt/default.nix+2−5
This diff is too big to show here.
pkgs/desktops/lxqt/libfm-qt/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/liblxqt/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/libqtxdg/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/libsysstat/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lxqt/lximage-qt/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-about/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-admin/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-archiver/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-build-tools/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-config/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-globalkeys/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-notificationd/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-panel/default.nix+4−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-policykit/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-powermanagement/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-qtplugin/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-runner/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-session/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-sudo/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/lxqt-themes/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/obconf-qt/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lxqt/pavucontrol-qt/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/pcmanfm-qt/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/qlipper/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/lxqt/qps/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/qterminal/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/qtermwidget/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/screengrab/default.nix+3−3
This diff is too big to show here.
pkgs/desktops/lxqt/xdg-desktop-portal-lxqt/default.nixnew file+41
This diff is too big to show here.
pkgs/desktops/mate/caja-extensions/default.nix+17−1
This diff is too big to show here.
pkgs/desktops/mate/caja-extensions/hardcode-gsettings.patchnew file+169
This diff is too big to show here.
pkgs/desktops/mate/default.nix+2
This diff is too big to show here.
pkgs/desktops/mate/mate-control-center/default.nix+3−1
This diff is too big to show here.
pkgs/desktops/mate/mate-panel/default.nix+7
This diff is too big to show here.
pkgs/desktops/mate/mate-settings-daemon/wrapped.nixnew file+22
This diff is too big to show here.
pkgs/desktops/pantheon/apps/elementary-code/default.nix+2−12
This diff is too big to show here.
pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/pantheon/apps/switchboard/default.nix+2−15
This diff is too big to show here.
pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix+12−5
This diff is too big to show here.
pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix+6−6
This diff is too big to show here.
pkgs/desktops/pantheon/default.nix+3−1
This diff is too big to show here.
pkgs/desktops/pantheon/desktop/gala/default.nix+4−15
This diff is too big to show here.
pkgs/desktops/pantheon/granite/7/default.nixnew file+73
This diff is too big to show here.
pkgs/desktops/pantheon/services/elementary-notifications/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/plasma-5/3rdparty/addons/bismuth/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/plasma-5/3rdparty/kwin/scripts/dynamic-workspaces.nix+1−1
This diff is too big to show here.
pkgs/desktops/plasma-5/default.nix+1−1
This diff is too big to show here.
pkgs/desktops/plasma-5/fetch.sh+1−1
This diff is too big to show here.
pkgs/desktops/plasma-5/kscreen.nix+2−2
This diff is too big to show here.
pkgs/desktops/plasma-5/srcs.nix+214−214
This diff is too big to show here.
pkgs/desktops/xfce/applications/mousepad/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/xfce/applications/xfce4-screensaver/default.nixnew file+49
This diff is too big to show here.
pkgs/desktops/xfce/applications/xfce4-terminal/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/xfce/core/thunar/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/xfce/core/xfce4-panel/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/xfce/default.nix+3−1
This diff is too big to show here.
pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin/default.nix+2−2
This diff is too big to show here.
pkgs/development/beam-modules/elvis-erlang/default.nix+2−1
This diff is too big to show here.
pkgs/development/beam-modules/erlang-ls/default.nix+3−3
This diff is too big to show here.
pkgs/development/beam-modules/erlang-ls/rebar-deps.nix+8−7
This diff is too big to show here.
pkgs/development/compilers/abcl/default.nix+6−1
This diff is too big to show here.
pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py+1
This diff is too big to show here.
pkgs/development/compilers/adoptopenjdk-bin/jdk-darwin-base.nix+4−3
This diff is too big to show here.
pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/adoptopenjdk-bin/sources.json+244−100
This diff is too big to show here.
pkgs/development/compilers/alan/2.nixnew file+31
This diff is too big to show here.
pkgs/development/compilers/alan/default.nixnew file+48
This diff is too big to show here.
pkgs/development/compilers/aldor/default.nixdeleted−54
This diff is too big to show here.
pkgs/development/compilers/algol68g/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/aliceml/default.nixdeleted−59
This diff is too big to show here.
pkgs/development/compilers/aliceml/make.patchdeleted−20
This diff is too big to show here.
pkgs/development/compilers/aliceml/seam.patchdeleted−13
This diff is too big to show here.
pkgs/development/compilers/bluespec/default.nix+13−5
This diff is too big to show here.
pkgs/development/compilers/bupc/default.nix−1
This diff is too big to show here.
pkgs/development/compilers/chez/default.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/chicken/5/chicken.nix+6−1
This diff is too big to show here.
pkgs/development/compilers/chicken/5/eggs.nix+464−4
This diff is too big to show here.
pkgs/development/compilers/chicken/5/eggs.scm+8
This diff is too big to show here.
pkgs/development/compilers/coreclr/default.nixdeleted−100
This diff is too big to show here.
pkgs/development/compilers/crystal/build-package.nix+5−1
This diff is too big to show here.
pkgs/development/compilers/crystal/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.shnew file+14
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/common.nix+1
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/default.nixdeleted−90
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/extension.nixnew file+15
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/build-cuda-redist-package.nixnew file+51
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/extension.nixnew file+32
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.4.4.jsonnew file+862
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.5.2.jsonnew file+873
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.6.2.jsonnew file+873
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/redist/overrides.nixnew file+72
This diff is too big to show here.
pkgs/development/compilers/cudatoolkit/versions.tomlnew file+61
This diff is too big to show here.
pkgs/development/compilers/dmd/binary.nix+3−2
This diff is too big to show here.
pkgs/development/compilers/dotnet/default.nix+27−27
This diff is too big to show here.
pkgs/development/compilers/elm/default.nix+12
This diff is too big to show here.
pkgs/development/compilers/fennel/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/gcc/10/default.nix+11−10
This diff is too big to show here.
pkgs/development/compilers/gcc/10/gcc10-asan-glibc-2.34.patchnew file+70
This diff is too big to show here.
pkgs/development/compilers/gcc/11/default.nix+2−7
This diff is too big to show here.
pkgs/development/compilers/gcc/4.8/default.nix+3−8
This diff is too big to show here.
pkgs/development/compilers/gcc/4.9/default.nix+3−8
This diff is too big to show here.
pkgs/development/compilers/gcc/6/default.nix+4−7
This diff is too big to show here.
pkgs/development/compilers/gcc/6/gnat-glibc234.patchnew file+30
This diff is too big to show here.
pkgs/development/compilers/gcc/7/default.nix+6−7
This diff is too big to show here.
pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patchnew file+70
This diff is too big to show here.
pkgs/development/compilers/gcc/8/default.nix+3−7
This diff is too big to show here.
pkgs/development/compilers/gcc/9/default.nix+9−8
This diff is too big to show here.
pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patchnew file+70
This diff is too big to show here.
pkgs/development/compilers/gcc/builder.sh+4
This diff is too big to show here.
pkgs/development/compilers/ghc/8.10.2-binary.nix+14
This diff is too big to show here.
pkgs/development/compilers/ghc/8.10.7-binary.nix+14−1
This diff is too big to show here.
pkgs/development/compilers/ghc/8.10.7.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/ghc/9.0.2.nix+21
This diff is too big to show here.
pkgs/development/compilers/ghc/head.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/ghcjs/8.10/common-overrides.nix+32−3
This diff is too big to show here.
pkgs/development/compilers/ghcjs/8.10/default.nix+2−1
This diff is too big to show here.
pkgs/development/compilers/glslang/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/go-jsonnet/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/go/1.16.nix+1−2
This diff is too big to show here.
pkgs/development/compilers/go/1.17.nix+3−4
This diff is too big to show here.
pkgs/development/compilers/go/1.18.nix+3−4
This diff is too big to show here.
pkgs/development/compilers/go/2-dev.nixdeleted−276
This diff is too big to show here.
pkgs/development/compilers/go/ssl-cert-file-2-dev.patchdeleted−54
This diff is too big to show here.
pkgs/development/compilers/graalvm/community-edition/default.nix+16−29
This diff is too big to show here.
pkgs/development/compilers/graalvm/community-edition/graalvm11-ce-sources.json+24−56
This diff is too big to show here.
pkgs/development/compilers/graalvm/community-edition/graalvm17-ce-sources.json+28−42
This diff is too big to show here.
pkgs/development/compilers/graalvm/community-edition/mkGraal.nix+94−71
This diff is too big to show here.
pkgs/development/compilers/graalvm/community-edition/update.nix+11−9
This diff is too big to show here.
pkgs/development/compilers/graalvm/enterprise-edition.nixdeleted−183
This diff is too big to show here.
pkgs/development/compilers/hare/config-template.mknew file+27
This diff is too big to show here.
pkgs/development/compilers/hare/hare.nixnew file+93
This diff is too big to show here.
pkgs/development/compilers/hare/harec.nixnew file+45
This diff is too big to show here.
pkgs/development/compilers/hhvm/default.nixdeleted−68
This diff is too big to show here.
pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patchdeleted−20
This diff is too big to show here.
pkgs/development/compilers/inklecate/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/inklecate/deps-darwin.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/inklecate/deps-linux.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/jasmin-compiler/default.nixnew file+41
This diff is too big to show here.
pkgs/development/compilers/julia/1.6-bin.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/kotlin/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/kotlin/native.nix+4−4
This diff is too big to show here.
pkgs/development/compilers/ldc/binary.nix+3−2
This diff is too big to show here.
pkgs/development/compilers/llvm/10/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/11/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/12/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/13/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/14/clang/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/llvm/14/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/llvm/14/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/5/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/6/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/7/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/8/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/9/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/git/llvm/default.nix+6
This diff is too big to show here.
pkgs/development/compilers/llvm/multi.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/mruby/default.nix+9−1
This diff is too big to show here.
pkgs/development/compilers/mrustc/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/muon/default.nix → pkgs/development/compilers/muonlang/default.nixrenamed
The content is the same.
pkgs/development/compilers/ocaml/4.00.1.nix+7−1
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.01.0.nix+7−1
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.02.nix+7−1
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.03.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.04.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.05.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.06.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.07.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.08.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.09.nix+6
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.10.nix+3
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.11.nix+3
This diff is too big to show here.
pkgs/development/compilers/ocaml/4.12.nix+5
This diff is too big to show here.
pkgs/development/compilers/ocaml/Makefile.nixpkgsnew file+16
This diff is too big to show here.
pkgs/development/compilers/ocaml/generic.nix+24−12
This diff is too big to show here.
pkgs/development/compilers/ocaml/glibc-2.34-for-ocaml-4.10-and-11.patchnew file+37
This diff is too big to show here.
pkgs/development/compilers/ocaml/metaocaml-3.09.nixdeleted−34
This diff is too big to show here.
pkgs/development/compilers/open-watcom/v2.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/opendylan/bin.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/openjdk/11.nix+8−4
This diff is too big to show here.
pkgs/development/compilers/openjdk/16.nix+1
This diff is too big to show here.
pkgs/development/compilers/openjdk/17.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/openjdk/8.nix+2−1
This diff is too big to show here.
pkgs/development/compilers/openjdk/darwin/8.nix+6
This diff is too big to show here.
pkgs/development/compilers/openjdk/fix-glibc-2.34.patchnew file+24
This diff is too big to show here.
pkgs/development/compilers/openjdk/fix-library-path-jdk11.patch+21−3
This diff is too big to show here.
pkgs/development/compilers/polyml/5.6.nix+9−1
This diff is too big to show here.
pkgs/development/compilers/polyml/5.7.nix+10−2
This diff is too big to show here.
pkgs/development/compilers/polyml/default.nix+7−1
This diff is too big to show here.
pkgs/development/compilers/ponyc/default.nix+2−11
This diff is too big to show here.
pkgs/development/compilers/ponyc/disable-tests.patch+9−7
This diff is too big to show here.
pkgs/development/compilers/ponyc/make-safe-for-sandbox.patch+17−12
This diff is too big to show here.
pkgs/development/compilers/ponyc/pony-corral.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/purescript/purescript/default.nix+5−7
This diff is too big to show here.
pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js+1−1
This diff is too big to show here.
pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/qbe/default.nix+3−3
This diff is too big to show here.
pkgs/development/compilers/rust/1_58.nixdeleted−63
This diff is too big to show here.
pkgs/development/compilers/rust/1_60.nixnew file+64
This diff is too big to show here.
pkgs/development/compilers/rust/binary.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/rust/cargo.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/rust/rustfmt.nix+4−4
This diff is too big to show here.
pkgs/development/compilers/sbcl/2.2.4.nixnew file+4
This diff is too big to show here.
pkgs/development/compilers/scryer-prolog/cargo.patch+27−74
This diff is too big to show here.
pkgs/development/compilers/scryer-prolog/default.nix+19−6
This diff is too big to show here.
pkgs/development/compilers/scryer-prolog/fix-tests.patchnew file+29
This diff is too big to show here.
pkgs/development/compilers/solc/default.nix+34−11
This diff is too big to show here.
pkgs/development/compilers/squeak/default.nix+1−3
This diff is too big to show here.
pkgs/development/compilers/swift/default.nix−6
This diff is too big to show here.
pkgs/development/compilers/tinygo/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/uasm/default.nix+31−18
This diff is too big to show here.
pkgs/development/compilers/vlang/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/yosys/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/zulu/8.nix+9−3
This diff is too big to show here.
pkgs/development/compilers/zulu/default.nix+7−1
This diff is too big to show here.
pkgs/development/coq-modules/CoLoR/default.nix+2−1
This diff is too big to show here.
pkgs/development/coq-modules/Verdi/default.nix+3
This diff is too big to show here.
pkgs/development/coq-modules/aac-tactics/default.nix+6−2
This diff is too big to show here.
pkgs/development/coq-modules/coqprime/default.nix+2−1
This diff is too big to show here.
pkgs/development/coq-modules/coqtail-math/default.nix+6−1
This diff is too big to show here.
pkgs/development/coq-modules/flocq/default.nix+2−2
This diff is too big to show here.
pkgs/development/coq-modules/gappalib/default.nix+2−1
This diff is too big to show here.
pkgs/development/coq-modules/mathcomp-word/default.nix+2−1
This diff is too big to show here.
pkgs/development/coq-modules/metacoq/default.nixnew file+76
This diff is too big to show here.
pkgs/development/coq-modules/metalib/default.nix+7−3
This diff is too big to show here.
pkgs/development/coq-modules/parsec/default.nix+6−2
This diff is too big to show here.
pkgs/development/coq-modules/relation-algebra/default.nix+8−1
This diff is too big to show here.
pkgs/development/coq-modules/simple-io/default.nix+10−3
This diff is too big to show here.
pkgs/development/coq-modules/smtcoq/default.nixnew file+26
This diff is too big to show here.
pkgs/development/coq-modules/tlc/default.nix+2
This diff is too big to show here.
pkgs/development/coq-modules/trakt/default.nixnew file+24
This diff is too big to show here.
pkgs/development/embedded/fpga/apio/default.nix+5−4
This diff is too big to show here.
pkgs/development/embedded/openocd/default.nix+11
This diff is too big to show here.
pkgs/development/embedded/platformio/core.nix+2−1
This diff is too big to show here.
pkgs/development/embedded/stm32/betaflight/default.nixdeleted−64
This diff is too big to show here.
pkgs/development/embedded/stm32/inav/default.nixdeleted−56
This diff is too big to show here.
pkgs/development/embedded/stm32/stm32flash/default.nix+2−2
This diff is too big to show here.
pkgs/development/gnuradio-modules/osmosdr/default.nix+2
This diff is too big to show here.
pkgs/development/go-modules/generic/default.nix+12−5
This diff is too big to show here.
pkgs/development/go-packages/generic/default.nix+11−3
This diff is too big to show here.
pkgs/development/haskell-modules/HACKING.md+1−1
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-arm.nix−1
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-common.nix+119−64
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-darwin.nix+6−9
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix+25−9
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix+6
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix+23−8
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix+10
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix+14−2
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-head.nix+14−4
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghcjs.nix+1−1
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml+30−4
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml+19−2
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml+167−159
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml+18−10
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-nix.nix+16−3
This diff is too big to show here.
pkgs/development/haskell-modules/generic-builder.nix+9−6
This diff is too big to show here.
pkgs/development/haskell-modules/hackage-packages.nix+2961−3147
This diff is too big to show here.
pkgs/development/haskell-modules/non-hackage-packages.nix+1
This diff is too big to show here.
pkgs/development/haskell-modules/patches/graphql-engine-mapkeys.patchdeleted−33
This diff is too big to show here.
pkgs/development/haskell-modules/with-packages-wrapper.nix+4−4
This diff is too big to show here.
pkgs/development/idris-modules/default.nix+1−1
This diff is too big to show here.
pkgs/development/interpreters/alda/default.nix+3−3
This diff is too big to show here.
pkgs/development/interpreters/bats/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/clojure/babashka.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/clojure/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/dart/default.nix+6−1
This diff is too big to show here.
pkgs/development/interpreters/duktape/default.nix+1
This diff is too big to show here.
pkgs/development/interpreters/elixir/1.13.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/gnu-apl/default.nix+3−1
This diff is too big to show here.
pkgs/development/interpreters/guile/1.8.nix−1
This diff is too big to show here.
pkgs/development/interpreters/guile/2.0.nix−1
This diff is too big to show here.
pkgs/development/interpreters/guile/2.2.nix−1
This diff is too big to show here.
pkgs/development/interpreters/guile/3.0.nix−1
This diff is too big to show here.
pkgs/development/interpreters/janet/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/joker/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/lolcode/default.nix+1
This diff is too big to show here.
pkgs/development/interpreters/luajit/2.0.nix+3−3
This diff is too big to show here.
pkgs/development/interpreters/luajit/2.1.nix+3−3
This diff is too big to show here.
pkgs/development/interpreters/luajit/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/maude/default.nix+4
This diff is too big to show here.
pkgs/development/interpreters/nickel/default.nixnew file+33
This diff is too big to show here.
pkgs/development/interpreters/octave/default.nix+3−10
This diff is too big to show here.
pkgs/development/interpreters/perl/default.nix+21−18
This diff is too big to show here.
pkgs/development/interpreters/php/7.4.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/php/8.0.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/php/8.1.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/php/generic.nix+5−1
This diff is too big to show here.
pkgs/development/interpreters/pixie/default.nixdeleted−94
This diff is too big to show here.
pkgs/development/interpreters/pixie/dust.nixdeleted−46
This diff is too big to show here.
pkgs/development/interpreters/pixie/load_paths.patchdeleted−25
This diff is too big to show here.
pkgs/development/interpreters/pixie/make-paths-configurable.patchdeleted−119
This diff is too big to show here.
pkgs/development/interpreters/pure/default.nixdeleted−46
This diff is too big to show here.
pkgs/development/interpreters/python/cpython/3.11/python-3.x-distutils-C++.patchnew file+257
This diff is too big to show here.
pkgs/development/interpreters/python/cpython/default.nix+16−10
This diff is too big to show here.
pkgs/development/interpreters/python/default.nix+7−12
This diff is too big to show here.
pkgs/development/interpreters/python/graalpython/default.nixdeleted−21
This diff is too big to show here.
pkgs/development/interpreters/python/hooks/default.nix+6
This diff is too big to show here.
pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh+3
This diff is too big to show here.
pkgs/development/interpreters/python/hooks/sphinx-hook.shnew file+57
This diff is too big to show here.
pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py+10−8
This diff is too big to show here.
pkgs/development/interpreters/python/wrapper.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/racket/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/racket/minimal.nix+1−1
This diff is too big to show here.
pkgs/development/interpreters/rakudo/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/rakudo/moarvm.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/rakudo/nqp.nix+12−2
This diff is too big to show here.
pkgs/development/interpreters/ruby/default.nix+26−30
This diff is too big to show here.
pkgs/development/interpreters/ruby/patchsets.nix+3−3
This diff is too big to show here.
pkgs/development/interpreters/ruby/rbinstall-new-rubygems-compat.patchnew file+87
This diff is too big to show here.
pkgs/development/interpreters/ruby/rubygems/default.nix+1−1
This diff is too big to show here.
pkgs/development/interpreters/scsh/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/sollya/default.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/spidermonkey/91.nix+2−2
This diff is too big to show here.
pkgs/development/interpreters/starlark/default.nixnew file+23
This diff is too big to show here.
pkgs/development/interpreters/supercollider/default.nix+36−13
This diff is too big to show here.
pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nixnew file+33
This diff is too big to show here.
pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patchnew file+65
This diff is too big to show here.
pkgs/development/interpreters/supercollider/wrapper.nixnew file+18
This diff is too big to show here.
pkgs/development/interpreters/trealla/default.nix+1
This diff is too big to show here.
pkgs/development/interpreters/wasmtime/default.nix+19−9
This diff is too big to show here.
pkgs/development/interpreters/yex-lang/default.nix+1
This diff is too big to show here.
pkgs/development/interpreters/zuo/default.nixnew file+23
This diff is too big to show here.
pkgs/development/java-modules/liquibase_redshift_extension/default.nixnew file+27
This diff is too big to show here.
pkgs/development/java-modules/redshift_jdbc/default.nixnew file+28
This diff is too big to show here.
pkgs/development/libraries/CoinMP/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/SDL2/default.nix+13−1
This diff is too big to show here.
pkgs/development/libraries/SDL2/find-headers.patch+34
This diff is too big to show here.
pkgs/development/libraries/SDL_audiolib/default.nix+53
This diff is too big to show here.
pkgs/development/libraries/amdvlk/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/apache-activemq/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/applet-window-buttons/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/argagg/0001-catch.diff+20
This diff is too big to show here.
pkgs/development/libraries/argagg/default.nix+46
This diff is too big to show here.
pkgs/development/libraries/armadillo/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/aspell/default.nix+19−2
This diff is too big to show here.
pkgs/development/libraries/at-spi2-core/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/audio/libopenmpt/default.nix+66
This diff is too big to show here.
pkgs/development/libraries/audio/libopenmpt/update.sh+31
This diff is too big to show here.
pkgs/development/libraries/audio/libspecbleach/default.nix+26
This diff is too big to show here.
pkgs/development/libraries/audio/lilv/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/audio/lv2/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/audio/sratom/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/avahi/default.nix+5−1
This diff is too big to show here.
pkgs/development/libraries/avro-c/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/aws-c-sdkutils/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/aws-sdk-cpp/default.nix+41−12
This diff is too big to show here.
pkgs/development/libraries/bash/bash-preexec/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/bashup-events/generic.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/bc-decaf/default.nix+36
This diff is too big to show here.
pkgs/development/libraries/bctoolbox/default.nix+19−7
This diff is too big to show here.
pkgs/development/libraries/belcard/default.nix+4−3
This diff is too big to show here.
pkgs/development/libraries/belle-sip/default.nix+10−9
This diff is too big to show here.
pkgs/development/libraries/belr/default.nix+4−3
This diff is too big to show here.
pkgs/development/libraries/boost/1.69.nix+2
This diff is too big to show here.
pkgs/development/libraries/boost/1.70.nix+2
This diff is too big to show here.
pkgs/development/libraries/boost/1.72.nix+2
This diff is too big to show here.
pkgs/development/libraries/boost/1.78.nix+15
This diff is too big to show here.
pkgs/development/libraries/boost/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/boost/generic.nix+23−5
This diff is too big to show here.
pkgs/development/libraries/boost/pthread-stack-min-fix.patch+15
This diff is too big to show here.
pkgs/development/libraries/botan/default.nix−17
This diff is too big to show here.
pkgs/development/libraries/bullet/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/bzrtp/default.nix+5−6
This diff is too big to show here.
pkgs/development/libraries/catch/default.nix+6
This diff is too big to show here.
pkgs/development/libraries/cgreen/default.nix+6
This diff is too big to show here.
pkgs/development/libraries/civetweb/default.nix+2−1
This diff is too big to show here.
pkgs/development/libraries/clucene-core/2.x.nix+4−1
This diff is too big to show here.
pkgs/development/libraries/clucene-core/default.nix+4
This diff is too big to show here.
pkgs/development/libraries/cpp-hocon/default.nix+4
This diff is too big to show here.
pkgs/development/libraries/cpp-ipfs-api/default.nix+4
This diff is too big to show here.
pkgs/development/libraries/cpp-utilities/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/cutelyst/default.nix+13−4
This diff is too big to show here.
pkgs/development/libraries/cwiid/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/cxxopts/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/cyrus-sasl/cyrus-sasl-ac-try-run-fix.patch+12−11
This diff is too big to show here.
pkgs/development/libraries/cyrus-sasl/default.nix+12−13
This diff is too big to show here.
pkgs/development/libraries/cyrus-sasl/missing-size_t.patch−13
This diff is too big to show here.
pkgs/development/libraries/dav1d/default.nix+4−2
This diff is too big to show here.
pkgs/development/libraries/dbus/default.nix+7
This diff is too big to show here.
pkgs/development/libraries/docopt_cpp/default.nix+10−2
This diff is too big to show here.
pkgs/development/libraries/doctest/default.nix+5−5
This diff is too big to show here.
pkgs/development/libraries/dotconf/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/duckdb/default.nix+36−3
This diff is too big to show here.
pkgs/development/libraries/entt/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/expat/default.nix+3−2
This diff is too big to show here.
pkgs/development/libraries/faudio/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/fcft/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/ffmpeg/0001-fate-ffmpeg-add-missing-samples-dependency-to-fate-s.patch−27
This diff is too big to show here.
pkgs/development/libraries/ffmpeg/5.nix+2−4
This diff is too big to show here.
pkgs/development/libraries/ffmpegthumbnailer/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/flatcc/default.nix+5
This diff is too big to show here.
pkgs/development/libraries/flint/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/fltk/common.nix+2−9
This diff is too big to show here.
pkgs/development/libraries/freeimage/default.nix+4−4
This diff is too big to show here.
pkgs/development/libraries/freeimage/unbundle.diff+39−39
This diff is too big to show here.
pkgs/development/libraries/freetype/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gcc/libgcc/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/gdal/2.4.nix+11−1
This diff is too big to show here.
pkgs/development/libraries/gdal/default.nix+40
This diff is too big to show here.
pkgs/development/libraries/gdata-sharp/default.nix−42
This diff is too big to show here.
pkgs/development/libraries/gdcm/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gecode/3.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gensio/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/geos/3.9.nix+25
This diff is too big to show here.
pkgs/development/libraries/geos/default.nix+15−6
This diff is too big to show here.
pkgs/development/libraries/ggz_base_libs/default.nix+2−3
This diff is too big to show here.
pkgs/development/libraries/ghc_filesystem/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/glfw/3.x.nix+4−5
This diff is too big to show here.
pkgs/development/libraries/glib/default.nix+8−2
This diff is too big to show here.
pkgs/development/libraries/glib/elementary-terminal-support.patch+16
This diff is too big to show here.
pkgs/development/libraries/glib/gnome-console-support.patch+55
This diff is too big to show here.
pkgs/development/libraries/glibc/0001-Revert-Remove-all-usage-of-BASH-or-BASH-in-installed.patch+131
This diff is too big to show here.
pkgs/development/libraries/glibc/2.33-master.patch.gz
This diff is too big to show here.
pkgs/development/libraries/glibc/2.34-master.patch.gz
This diff is too big to show here.
pkgs/development/libraries/glibc/common.nix+21−8
This diff is too big to show here.
pkgs/development/libraries/glibc/default.nix+15−7
This diff is too big to show here.
pkgs/development/libraries/glibc/nix-locale-archive.patch+24−21
This diff is too big to show here.
pkgs/development/libraries/glibmm/2.68.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/glibmm/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/glm/default.nix+5
This diff is too big to show here.
pkgs/development/libraries/globalplatform/default.nix−21
This diff is too big to show here.
pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix−21
This diff is too big to show here.
pkgs/development/libraries/glog/default.nix+5−14
This diff is too big to show here.
pkgs/development/libraries/gmp/6.x.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/gnutls-kdh/3.5.nix−12
This diff is too big to show here.
pkgs/development/libraries/gnutls-kdh/generic.nix−95
This diff is too big to show here.
pkgs/development/libraries/goffice/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/goocanvas/2.x.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/graphene-hardened-malloc/default.nix+15−8
This diff is too big to show here.
pkgs/development/libraries/graphene/0001-meson-add-options-for-tests-installation-dirs.patch+13−59
This diff is too big to show here.
pkgs/development/libraries/graphene/default.nix+14−3
This diff is too big to show here.
pkgs/development/libraries/grpc/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gsettings-desktop-schemas/default.nix+9−3
This diff is too big to show here.
pkgs/development/libraries/gspell/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/bad/default.nix+5−3
This diff is too big to show here.
pkgs/development/libraries/gstreamer/base/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/core/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/devtools/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/ges/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/good/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/libav/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/rtsp-server/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/ugly/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/vaapi/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gstreamer/viperfx/default.nix+41
This diff is too big to show here.
pkgs/development/libraries/gtk-frdp/default.nix+3−5
This diff is too big to show here.
pkgs/development/libraries/gtk/4.x.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gtkmathview/default.nix−29
This diff is too big to show here.
pkgs/development/libraries/gtkmathview/gcc-4.3-build-fixes.patch−74
This diff is too big to show here.
pkgs/development/libraries/gtkmathview/gcc-4.4-build-fixes.patch−21
This diff is too big to show here.
pkgs/development/libraries/gtkmm/2.x.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/gtksourceview/5.x.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gusb/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/gvfs/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/hivex/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/hspell/dicts.nix+4−4
This diff is too big to show here.
pkgs/development/libraries/htmlcxx/c++17.patch+24
This diff is too big to show here.
pkgs/development/libraries/htmlcxx/default.nix+7−4
This diff is too big to show here.
pkgs/development/libraries/http-parser/default.nix+9−2
This diff is too big to show here.
pkgs/development/libraries/hunspell/dictionaries.nix+2−3
This diff is too big to show here.
pkgs/development/libraries/hwloc/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/hyperscan/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/igraph/default.nix+10−6
This diff is too big to show here.
pkgs/development/libraries/ijs/default.nix+2−3
This diff is too big to show here.
pkgs/development/libraries/ilixi/default.nix−35
This diff is too big to show here.
pkgs/development/libraries/imath/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/inih/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/intel-media-driver/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/intel-media-sdk/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/isl/generic.nix+2−1
This diff is too big to show here.
pkgs/development/libraries/jarowinkler-cpp/default.nix+41
This diff is too big to show here.
pkgs/development/libraries/java/commons/daemon/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/jcal/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/jellyfin-ffmpeg/default.nix+30
This diff is too big to show here.
pkgs/development/libraries/jsoncpp/default.nix+27−3
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/attica.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/baloo.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/bluez-qt.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/breeze-icons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/default.nix+4−5
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/extra-cmake-modules/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/fetch.sh+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/frameworkintegration.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kactivities-stats.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kactivities.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kapidox.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/karchive.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kauth/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kbookmarks.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcalendarcore.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcmutils/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcodecs.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcompletion.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kconfig.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kconfigwidgets/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcontacts.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcoreaddons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kcrash.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdav.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdbusaddons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdeclarative.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kded.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdelibs4support/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdesignerplugin.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdesu/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdewebkit.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdnssd.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kdoctools/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kemoticons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kfilemetadata/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kglobalaccel.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kguiaddons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kholidays.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/khtml.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/ki18n.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kiconthemes/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kidletime.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kimageformats.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kinit/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kio/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kirigami2.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kitemmodels.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kitemviews.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kjobwidgets.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kjs.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kjsembed.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kmediaplayer.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/knewstuff/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/knotifications.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/knotifyconfig.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kpackage/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kparts.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kpeople.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kplotting.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kpty.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kquickcharts.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kross.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/krunner.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kservice/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/ktexteditor.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/ktextwidgets.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kunitconversion.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kwallet.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kwayland.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kwidgetsaddons.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kwindowsystem/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kxmlgui.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/kxmlrpcclient.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/modemmanager-qt.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/networkmanager-qt.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/oxygen-icons5.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/plasma-framework.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/prison.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/purpose.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/qqc2-desktop-style.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/solid.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/sonnet.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/srcs.nix+332−332
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/syndication.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/syntax-highlighting.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kde-frameworks/threadweaver.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kerberos/krb5.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/khronos-ocl-icd-loader/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/kpmcore/default.nix+10−18
This diff is too big to show here.
pkgs/development/libraries/languagemachines/frog.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/frogdata.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/libfolia.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/mbt.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/ticcutils.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/timbl.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/timblserver.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/ucto.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/languagemachines/uctodata.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/lasso/default.nix+35−9
This diff is too big to show here.
pkgs/development/libraries/leatherman/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/leveldb/default.nix+1−5
This diff is too big to show here.
pkgs/development/libraries/libadwaita/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libappindicator/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libarchive/default.nix+74−32
This diff is too big to show here.
pkgs/development/libraries/libargon2/default.nix+3−1
This diff is too big to show here.
pkgs/development/libraries/libargs/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libavif/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libcbor/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libcef/default.nix+6−6
This diff is too big to show here.
pkgs/development/libraries/libcollectdclient/default.nix+2−1
This diff is too big to show here.
pkgs/development/libraries/libdeltachat/default.nix+3−5
This diff is too big to show here.
pkgs/development/libraries/libdvbcsa/default.nix+22
This diff is too big to show here.
pkgs/development/libraries/libe57format/default.nix+9
This diff is too big to show here.
pkgs/development/libraries/libechonest/default.nix+3
This diff is too big to show here.
pkgs/development/libraries/libepoxy/default.nix+2−3
This diff is too big to show here.
pkgs/development/libraries/libevdev/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libfido2/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libfive/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/libgcrypt/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libguestfs/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libhandy/default.nix+5−2
This diff is too big to show here.
pkgs/development/libraries/libinjection/default.nix+12−4
This diff is too big to show here.
pkgs/development/libraries/libinput/default.nix+17−7
This diff is too big to show here.
pkgs/development/libraries/libixp-hg/default.nix−27
This diff is too big to show here.
pkgs/development/libraries/libixp/default.nix+28
This diff is too big to show here.
pkgs/development/libraries/libjcat/default.nix+4−3
This diff is too big to show here.
pkgs/development/libraries/libjpeg-turbo/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libjson/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/libjxl/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/libkqueue/default.nix+23
This diff is too big to show here.
pkgs/development/libraries/liblastfm/default.nix+5
This diff is too big to show here.
pkgs/development/libraries/liblinphone/default.nix+23−9
This diff is too big to show here.
pkgs/development/libraries/liblinphone/use-normal-jsoncpp.patch+57
This diff is too big to show here.
pkgs/development/libraries/libmnl/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libnet/default.nix+14−6
This diff is too big to show here.
pkgs/development/libraries/libnet/fix-includes.patch−29
This diff is too big to show here.
pkgs/development/libraries/libnetfilter_conntrack/default.nix+11−3
This diff is too big to show here.
pkgs/development/libraries/libnfc/default.nix+10−7
This diff is too big to show here.
pkgs/development/libraries/libnfnetlink/Use-stdlib-uint-instead-of-u_int.patch−499
This diff is too big to show here.
pkgs/development/libraries/libnfnetlink/default.nix+2−6
This diff is too big to show here.
pkgs/development/libraries/libnftnl/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/libngspice/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libosmscout/default.nix+11−8
This diff is too big to show here.
pkgs/development/libraries/libotr/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/libotr/fix-regtest-client.patch+11
This diff is too big to show here.
pkgs/development/libraries/libowfat/default.nix+3
This diff is too big to show here.
pkgs/development/libraries/libpinyin/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/libpostal/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/libpqxx/6.nix+4−4
This diff is too big to show here.
pkgs/development/libraries/libpqxx/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libqalculate/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libraspberrypi/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/libraw/default.nix+4−4
This diff is too big to show here.
pkgs/development/libraries/libraw/unstable.nix+12
This diff is too big to show here.
pkgs/development/libraries/librealsense/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/libressl/fix-build-with-glibc.patch+92
This diff is too big to show here.
pkgs/development/libraries/libsecret/default.nix+25−10
This diff is too big to show here.
pkgs/development/libraries/libslirp/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libsoup/3.x.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libspf2/default.nix+9−1
This diff is too big to show here.
pkgs/development/libraries/libsystemtap/default.nix+9−6
This diff is too big to show here.
pkgs/development/libraries/libtiff/default.nix+30
This diff is too big to show here.
pkgs/development/libraries/libuldaq/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libunistring/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libunwind/default.nix+9−1
This diff is too big to show here.
pkgs/development/libraries/libusb1/default.nix+4−10
This diff is too big to show here.
pkgs/development/libraries/libuv/default.nix+3−2
This diff is too big to show here.
pkgs/development/libraries/libva/1.0.0.nix−37
This diff is too big to show here.
pkgs/development/libraries/libva/1.nix+50
This diff is too big to show here.
pkgs/development/libraries/libva/default.nix+4−4
This diff is too big to show here.
pkgs/development/libraries/libva/utils.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/libvdpau/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libviperfx/default.nix+30
This diff is too big to show here.
pkgs/development/libraries/libvirt/default.nix+7−1
This diff is too big to show here.
pkgs/development/libraries/libvmaf/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libwacom/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libwebsockets/default.nix+14−3
This diff is too big to show here.
pkgs/development/libraries/libxcrypt/default.nix+6−2
This diff is too big to show here.
pkgs/development/libraries/libxmlb/default.nix+4−12
This diff is too big to show here.
pkgs/development/libraries/libxsmm/default.nix+1−3
This diff is too big to show here.
pkgs/development/libraries/libyang/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/lime/default.nix+15−5
This diff is too big to show here.
pkgs/development/libraries/liquid-dsp/default.nix+4−5
This diff is too big to show here.
pkgs/development/libraries/log4shib/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/mapbox-gl-native/default.nix+5
This diff is too big to show here.
pkgs/development/libraries/mapbox-gl-qml/default.nix+4−7
This diff is too big to show here.
pkgs/development/libraries/maplibre-gl-native/default.nix+66
This diff is too big to show here.
pkgs/development/libraries/mediastreamer/default.nix+22−15
This diff is too big to show here.
pkgs/development/libraries/mediastreamer/msopenh264.nix+6−7
This diff is too big to show here.
pkgs/development/libraries/mesa/default.nix+8−5
This diff is too big to show here.
pkgs/development/libraries/mimetic/default.nix+8−2
This diff is too big to show here.
pkgs/development/libraries/mlt/qt-5.nix+1
This diff is too big to show here.
pkgs/development/libraries/mpich/default.nix+5−2
This diff is too big to show here.
pkgs/development/libraries/mustache-hpp/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/mvapich/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/netcdf-fortran/default.nix+3
This diff is too big to show here.
pkgs/development/libraries/netcdf/default.nix+6−18
This diff is too big to show here.
pkgs/development/libraries/nghttp2/default.nix+63−43
This diff is too big to show here.
pkgs/development/libraries/nghttp3/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/ngtcp2/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/nlopt/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/notcurses/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/nss/85_security_load_3.77+.patch+76
This diff is too big to show here.
pkgs/development/libraries/nss/esr.nix+4
This diff is too big to show here.
pkgs/development/libraries/nss/generic.nix+11−11
This diff is too big to show here.
pkgs/development/libraries/nss/latest.nix+10
This diff is too big to show here.
pkgs/development/libraries/ntdb/default.nix−51
This diff is too big to show here.
pkgs/development/libraries/openal-soft/default.nix+14−8
This diff is too big to show here.
pkgs/development/libraries/openal-soft/search-out.patch+2−2
This diff is too big to show here.
pkgs/development/libraries/opendht/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/openfst/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/openjpeg/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/openmpi/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/openssl/1.0.2/darwin64-arm64.patch−12
This diff is too big to show here.
pkgs/development/libraries/openssl/1.0.2/nix-ssl-cert-file.patch−16
This diff is too big to show here.
pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs-darwin.patch−13
This diff is too big to show here.
pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs.patch−13
This diff is too big to show here.
pkgs/development/libraries/openssl/chacha.nix−82
This diff is too big to show here.
pkgs/development/libraries/openssl/default.nix+8−16
This diff is too big to show here.
pkgs/development/libraries/opensubdiv/default.nix+9−2
This diff is too big to show here.
pkgs/development/libraries/openvino/default.nix+3−1
This diff is too big to show here.
pkgs/development/libraries/ortp/default.nix+5−4
This diff is too big to show here.
pkgs/development/libraries/pcmsolver/default.nix+9−2
This diff is too big to show here.
pkgs/development/libraries/pcre/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/pcre2/default.nix+1−3
This diff is too big to show here.
pkgs/development/libraries/pdal/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/phash/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/physics/cernlib/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/physics/lhapdf/maintainer.sh+2−2
This diff is too big to show here.
pkgs/development/libraries/physics/lhapdf/pdf_sets.nix+431−129
This diff is too big to show here.
pkgs/development/libraries/physics/qcdnum/default.nix+4
This diff is too big to show here.
pkgs/development/libraries/pmdk/default.nix+4−2
This diff is too big to show here.
pkgs/development/libraries/pocketsphinx/default.nix−48
This diff is too big to show here.
pkgs/development/libraries/polkit-qt-1/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/polkit/default.nix+6
This diff is too big to show here.
pkgs/development/libraries/poppler/0.61-CVE-2019-9959.patch−20
This diff is too big to show here.
pkgs/development/libraries/poppler/0.61.nix−94
This diff is too big to show here.
pkgs/development/libraries/proj/default.nix+17−8
This diff is too big to show here.
pkgs/development/libraries/protobuf/2.5.nix−10
This diff is too big to show here.
pkgs/development/libraries/protobuf/generic.nix−61
This diff is too big to show here.
pkgs/development/libraries/protolock/default.nix−2
This diff is too big to show here.
pkgs/development/libraries/ptex/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/qca-qt5/2.3.2.nix+30
This diff is too big to show here.
pkgs/development/libraries/qca-qt5/default.nix+5−10
This diff is too big to show here.
pkgs/development/libraries/qrupdate/default.nix+8−6
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.12/default.nix+9−1
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.14/default.nix+8−2
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.14/qtwayland-libdrm-build.patch−56
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.15/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.15/srcs-generated.json+63−63
This diff is too big to show here.
pkgs/development/libraries/qt-5/modules/qtbase.nix+9−5
This diff is too big to show here.
pkgs/development/libraries/qt-5/modules/qtmultimedia.nix+3−2
This diff is too big to show here.
pkgs/development/libraries/qt-5/modules/qtwayland-app_id.patch+36
This diff is too big to show here.
pkgs/development/libraries/qt-5/modules/qtwayland.nix+6
This diff is too big to show here.
pkgs/development/libraries/qt-5/modules/qtwebengine.nix+22−6
This diff is too big to show here.
pkgs/development/libraries/qt-5/qtModule.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/qtutilities/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/quictls/default.nix+3−8
This diff is too big to show here.
pkgs/development/libraries/qwt/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/qxt/default.nix−34
This diff is too big to show here.
pkgs/development/libraries/rapidcheck/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/rapidfuzz-cpp/default.nix+41
This diff is too big to show here.
pkgs/development/libraries/re2/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/recastnavigation/default.nix+7−1
This diff is too big to show here.
pkgs/development/libraries/redis-plus-plus/default.nix+38
This diff is too big to show here.
pkgs/development/libraries/rlottie/default.nix+16−1
This diff is too big to show here.
pkgs/development/libraries/robin-map/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/rocclr/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/rocm-comgr/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/rocm-device-libs/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/rocm-runtime/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/rocm-thunk/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/s2n-tls/default.nix+3
This diff is too big to show here.
pkgs/development/libraries/science/astronomy/indilib/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/science/astronomy/wcslib/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/science/biology/htslib/default.nix+18−2
This diff is too big to show here.
pkgs/development/libraries/science/math/blis/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/science/math/caffe2/default.nix−147
This diff is too big to show here.
pkgs/development/libraries/science/math/caffe2/fix_compilation_on_gcc7.patch−46
This diff is too big to show here.
pkgs/development/libraries/science/math/caffe2/update_clang_cvtsh_bugfix.patch−55
This diff is too big to show here.
pkgs/development/libraries/science/math/cudnn/default.nix−118
This diff is too big to show here.
pkgs/development/libraries/science/math/cudnn/extension.nix+116
This diff is too big to show here.
pkgs/development/libraries/science/math/cudnn/generic.nix+62−43
This diff is too big to show here.
pkgs/development/libraries/science/math/cutensor/default.nix−49
This diff is too big to show here.
pkgs/development/libraries/science/math/cutensor/generic.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/science/math/liblapack/default.nix+2−11
This diff is too big to show here.
pkgs/development/libraries/science/math/libtorch/test/default.nix+3−2
This diff is too big to show here.
pkgs/development/libraries/science/math/magma/default.nix+7−20
This diff is too big to show here.
pkgs/development/libraries/science/math/nccl/default.nix+6−2
This diff is too big to show here.
pkgs/development/libraries/science/math/petsc/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/science/math/scalapack/default.nix+8−1
This diff is too big to show here.
pkgs/development/libraries/science/math/tensorflow/bin.nix+4−1
This diff is too big to show here.
pkgs/development/libraries/science/math/zn_poly/default.nix+4−14
This diff is too big to show here.
pkgs/development/libraries/seasocks/default.nix+7−1
This diff is too big to show here.
pkgs/development/libraries/simgear/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/simpleitk/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/skalibs/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/slang/default.nix+7
This diff is too big to show here.
pkgs/development/libraries/smesh/default.nix+2
This diff is too big to show here.
pkgs/development/libraries/snack/default.nix−36
This diff is too big to show here.
pkgs/development/libraries/soci/bc-soci.nix+53
This diff is too big to show here.
pkgs/development/libraries/soci/default.nix+1−1
This diff is too big to show here.
pkgs/development/libraries/spdlog/default.nix+7−3
This diff is too big to show here.
pkgs/development/libraries/sphinxbase/default.nix−40
This diff is too big to show here.
pkgs/development/libraries/spirv-headers/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/sqlite/default.nix+4−2
This diff is too big to show here.
pkgs/development/libraries/sqlite/tools.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/sundials/default.nix+13
This diff is too big to show here.
pkgs/development/libraries/symengine/default.nix+5
This diff is too big to show here.
pkgs/development/libraries/tachyon/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/talloc/default.nix+2−1
This diff is too big to show here.
pkgs/development/libraries/taskflow/default.nix+50
This diff is too big to show here.
pkgs/development/libraries/taskflow/unvendor-doctest.patch+21
This diff is too big to show here.
pkgs/development/libraries/tdlib/default.nix+3−3
This diff is too big to show here.
pkgs/development/libraries/template-glib/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/tomlc99/default.nix+30
This diff is too big to show here.
pkgs/development/libraries/tomlcpp/0001-missing-headers.diff+15
This diff is too big to show here.
pkgs/development/libraries/tomlcpp/default.nix+35
This diff is too big to show here.
pkgs/development/libraries/tpm2-tss/default.nix+7−3
This diff is too big to show here.
pkgs/development/libraries/umockdev/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/unixODBCDrivers/default.nix+46−3
This diff is too big to show here.
pkgs/development/libraries/utmps/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/valhalla/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/vapoursynth/default.nix+4−7
This diff is too big to show here.
pkgs/development/libraries/vigra/default.nix+3−15
This diff is too big to show here.
pkgs/development/libraries/vulkan-headers/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/vulkan-loader/default.nix+6−3
This diff is too big to show here.
pkgs/development/libraries/vulkan-loader/fix-pkgconfig.patch+14
This diff is too big to show here.
pkgs/development/libraries/wasilibc/default.nix+19−14
This diff is too big to show here.
pkgs/development/libraries/waylandpp/default.nix+4−3
This diff is too big to show here.
pkgs/development/libraries/webkitgtk/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/wolfssl/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/wxwidgets/wxGTK28.nix−2
This diff is too big to show here.
pkgs/development/libraries/wxwidgets/wxGTK29.nix−1
This diff is too big to show here.
pkgs/development/libraries/wxwidgets/wxGTK30.nix+2−3
This diff is too big to show here.
pkgs/development/libraries/wxwidgets/wxGTK31.nix+3−5
This diff is too big to show here.
pkgs/development/libraries/wxwidgets/wxmac30.nix+7−5
This diff is too big to show here.
pkgs/development/libraries/xdg-desktop-portal-gnome/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/xdg-desktop-portal/default.nix+18−12
This diff is too big to show here.
pkgs/development/libraries/xdg-desktop-portal/fix-paths.patch−13
This diff is too big to show here.
pkgs/development/libraries/xgboost/default.nix+5−5
This diff is too big to show here.
pkgs/development/libraries/zeroc-ice/3.6.nix−59
This diff is too big to show here.
pkgs/development/libraries/zeroc-ice/default.nix+13
This diff is too big to show here.
pkgs/development/libraries/zeroc-ice/uninitialized-variable-warning.patch−20
This diff is too big to show here.
pkgs/development/libraries/zlib/CVE-2018-25032-1.patch+346
This diff is too big to show here.
pkgs/development/libraries/zlib/CVE-2018-25032-2.patch+27
This diff is too big to show here.
pkgs/development/libraries/zlib/default.nix+6−4
This diff is too big to show here.
pkgs/development/libraries/zlib/disable-cygwin-widechar.patch−13
This diff is too big to show here.
pkgs/development/libraries/zlib/fix-configure-issue-cross.patch+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/.gitattributes+1
This diff is too big to show here.
pkgs/development/lisp-modules-new/.gitignore+3
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/api.md+197
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/nix-cl.md+98
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/quicklisp.md+54
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/quirks.md+5
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/abcl-package-set.nix+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/abcl-with-packages.nix+23
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/bordeaux-threads.nix+43
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix+31
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/api.lisp+18
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/database/sqlite.lisp+134
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/init.sql+41
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/main.lisp+40
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/nix.lisp+81
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/org.lispbuilds.nix.asd+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/repository/quicklisp.lisp+199
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/util.lisp+16
This diff is too big to show here.
pkgs/development/lisp-modules-new/imported.nix+65675
This diff is too big to show here.
pkgs/development/lisp-modules-new/lisp-packages.nix+432
This diff is too big to show here.
pkgs/development/lisp-modules-new/old-make-wrapper.sh+155
This diff is too big to show here.
pkgs/development/lisp-modules-new/packages.nix+369
This diff is too big to show here.
pkgs/development/lisp-modules-new/patches/swank-pure-paths.patch+28
This diff is too big to show here.
pkgs/development/lisp-modules-new/ql-import.lisp+6
This diff is too big to show here.
pkgs/development/lisp-modules-new/ql.nix+140
This diff is too big to show here.
pkgs/development/lisp-modules-new/readme.md+34
This diff is too big to show here.
pkgs/development/lisp-modules-new/shell.nix+7
This diff is too big to show here.
pkgs/development/lisp-modules-new/test/lispPackagesToTest.txt+395
This diff is too big to show here.
pkgs/development/lisp-modules-new/test/test.lisp+94
This diff is too big to show here.
pkgs/development/lua-modules/generated-packages.nix+42−9
This diff is too big to show here.
pkgs/development/lua-modules/luaexpat.patch−36
This diff is too big to show here.
pkgs/development/lua-modules/overrides.nix+8−7
This diff is too big to show here.
pkgs/development/misc/breakpad/default.nix+5
This diff is too big to show here.
pkgs/development/misc/datafusion/default.nix+34
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/ekg-core.nix+8−9
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/ekg-json.nix+6−3
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/graphql-engine.nix+70−50
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/graphql-parser.nix+16−12
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/kriti-lang.nix+41
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/pg-client.nix+18−17
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/pool.nix+1−1
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/update.sh+11−1
This diff is too big to show here.
pkgs/development/misc/msp430/mspds/binary.nix+2−1
This diff is too big to show here.
pkgs/development/misc/resholve/README.md+111−58
This diff is too big to show here.
pkgs/development/misc/resholve/default.nix+5−37
This diff is too big to show here.
pkgs/development/misc/resholve/resholve-package.nix−37
This diff is too big to show here.
pkgs/development/misc/resholve/resholve-utils.nix+149−20
This diff is too big to show here.
pkgs/development/misc/resholve/resholve.nix+7−6
This diff is too big to show here.
pkgs/development/misc/resholve/source.nix+2−2
This diff is too big to show here.
pkgs/development/misc/resholve/test.nix+18−57
This diff is too big to show here.
pkgs/development/mobile/androidenv/build-tools.nix+2−2
This diff is too big to show here.
pkgs/development/mobile/androidenv/platform-tools.nix+1−2
This diff is too big to show here.
pkgs/development/nim-packages/tempfile/default.nix+1
This diff is too big to show here.
pkgs/development/node-packages/composition.nix+1−1
This diff is too big to show here.
pkgs/development/node-packages/default.nix+24−42
This diff is too big to show here.
pkgs/development/node-packages/node-env.nix+21−11
This diff is too big to show here.
pkgs/development/node-packages/node-packages.json+4−2
This diff is too big to show here.
pkgs/development/node-packages/node-packages.nix+7383−6986
This diff is too big to show here.
pkgs/development/ocaml-modules/alcotest/default.nix+6−4
This diff is too big to show here.
pkgs/development/ocaml-modules/asn1-combinators/default.nix+1−3
This diff is too big to show here.
pkgs/development/ocaml-modules/atd/default.nix+6−14
This diff is too big to show here.
pkgs/development/ocaml-modules/atdgen/codec-runtime.nix+18
This diff is too big to show here.
pkgs/development/ocaml-modules/atdgen/default.nix+8−17
This diff is too big to show here.
pkgs/development/ocaml-modules/atdgen/runtime.nix+15
This diff is too big to show here.
pkgs/development/ocaml-modules/bap/default.nix+5−4
This diff is too big to show here.
pkgs/development/ocaml-modules/batteries/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/bitstring/ppx.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/bitv/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/bjack/default.nix+25
This diff is too big to show here.
pkgs/development/ocaml-modules/brisk-reconciler/default.nix+33
This diff is too big to show here.
pkgs/development/ocaml-modules/bz2/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/camlp-streams/default.nix+20
This diff is too big to show here.
pkgs/development/ocaml-modules/camlpdf/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/caqti/default.nix+9−4
This diff is too big to show here.
pkgs/development/ocaml-modules/cmdliner/default.nix+15−23
This diff is too big to show here.
pkgs/development/ocaml-modules/coin/default.nix+6−9
This diff is too big to show here.
pkgs/development/ocaml-modules/cpdf/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/cstruct/lwt.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/cstruct/ppx.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/cstruct/sexp.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/cstruct/unix.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/csv/lwt.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ctypes/default.nix+3−3
This diff is too big to show here.
pkgs/development/ocaml-modules/dssi/default.nix+25
This diff is too big to show here.
pkgs/development/ocaml-modules/dune-action-plugin/default.nix+4
This diff is too big to show here.
pkgs/development/ocaml-modules/dune-glob/default.nix+4
This diff is too big to show here.
pkgs/development/ocaml-modules/dune-private-libs/default.nix+4
This diff is too big to show here.
pkgs/development/ocaml-modules/dune-rpc/default.nix+23
This diff is too big to show here.
pkgs/development/ocaml-modules/dune-site/default.nix+4
This diff is too big to show here.
pkgs/development/ocaml-modules/eliom/default.nix+9−3
This diff is too big to show here.
pkgs/development/ocaml-modules/erm_xml/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/expat/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/farfadet/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ffmpeg/base.nix+2−2
This diff is too big to show here.
pkgs/development/ocaml-modules/fiber/default.nix+23
This diff is too big to show here.
pkgs/development/ocaml-modules/flex/default.nix+22
This diff is too big to show here.
pkgs/development/ocaml-modules/fmt/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/fpath/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/frontc/default.nix+8−25
This diff is too big to show here.
pkgs/development/ocaml-modules/gen_js_api/default.nix+41
This diff is too big to show here.
pkgs/development/ocaml-modules/gen_js_api/ojs.nix+21
This diff is too big to show here.
pkgs/development/ocaml-modules/hacl-star/raw.nix+3
This diff is too big to show here.
pkgs/development/ocaml-modules/javalib/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/lablgl/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/lablgtk-extras/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ladspa/default.nix+25
This diff is too big to show here.
pkgs/development/ocaml-modules/lastfm/default.nix+32
This diff is too big to show here.
pkgs/development/ocaml-modules/llvm/default.nix+2−2
This diff is too big to show here.
pkgs/development/ocaml-modules/logs/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/lua-ml/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/lwt/default.nix+3−3
This diff is too big to show here.
pkgs/development/ocaml-modules/nocrypto/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/notty/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ocaml-lsp/default.nix+7−8
This diff is too big to show here.
pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix+8−4
This diff is too big to show here.
pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix+25−5
This diff is too big to show here.
pkgs/development/ocaml-modules/ocamlformat-rpc-lib/default.nix+15−3
This diff is too big to show here.
pkgs/development/ocaml-modules/ocp-ocamlres/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsigen-deriving/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsigen-ppx-rpc/default.nix+23
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsigen-server/default.nix+4−4
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsigen-start/default.nix+4−2
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsigen-toolkit/default.nix+2−2
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsipersist/default.nix+20
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsipersist/lib.nix+27
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsipersist/pgsql.nix+24
This diff is too big to show here.
pkgs/development/ocaml-modules/ocsipersist/sqlite.nix+23
This diff is too big to show here.
pkgs/development/ocaml-modules/phylogenetics/default.nix+2−4
This diff is too big to show here.
pkgs/development/ocaml-modules/ppxlib/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/ptime/default.nix+5−5
This diff is too big to show here.
pkgs/development/ocaml-modules/pure-splitmix/default.nix+22
This diff is too big to show here.
pkgs/development/ocaml-modules/reactivedata/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/rebez/default.nix+22
This diff is too big to show here.
pkgs/development/ocaml-modules/reperf/default.nix+41
This diff is too big to show here.
pkgs/development/ocaml-modules/samplerate/default.nix+25
This diff is too big to show here.
pkgs/development/ocaml-modules/sawja/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/sedlex/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/sosa/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/sqlite3EZ/default.nix−36
This diff is too big to show here.
pkgs/development/ocaml-modules/stdune/default.nix+6−2
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/010-PtGRANAD-test-helpers.nix−39
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/011-PtHangz2-test-helpers.nix−35
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/base-test-helpers.nix−32
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/base.nix−37
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/clic.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/client-010-PtGRANAD.nix−38
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/client-011-PtHangz2.nix−44
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/client-base.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/context.nix−34
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/crypto.nix−42
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/embedded-protocol-010-PtGRANAD.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/embedded-protocol-demo-noops.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/error-monad.nix−35
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/event-logging-test-helpers.nix−25
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/event-logging.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/hacl-glue-unix.nix−26
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/hacl-glue.nix−17
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/legacy-store.nix−42
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/lmdb.nix−51
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/lwt-result-stdlib.nix−31
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/micheline.nix−32
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/mockup-proxy.nix−27
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/mockup-registration.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/p2p-services.nix−19
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/p2p.nix−38
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD-parameters.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2-parameters.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-alpha.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-compiler.nix−34
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-demo-noops.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-environment-packer.nix−18
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-environment-sigs.nix−42
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-environment-structs.nix−25
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-environment.nix−43
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-plugin-010-PtGRANAD.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-plugin-011-PtHangz2.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-plugin-alpha.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/protocol-updater.nix−26
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/proxy.nix−36
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/requester.nix−34
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/rpc-http-client-unix.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/rpc-http-client.nix−23
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/rpc-http.nix−25
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/rpc.nix−25
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/sapling.nix−35
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/shell-context.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/shell-services-test-helpers.nix−32
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/shell-services.nix−30
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/shell.nix−44
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/signer-backends.nix−30
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/signer-services.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/stdlib-unix.nix−33
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/stdlib.nix−64
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/store.nix−50
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/test-helpers.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/validation.nix−28
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/version.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/tezos/workers.nix−21
This diff is too big to show here.
pkgs/development/ocaml-modules/toml/default.nix+2−4
This diff is too big to show here.
pkgs/development/ocaml-modules/torch/default.nix+1
This diff is too big to show here.
pkgs/development/ocaml-modules/tsdl/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/type_conv/108.08.00.nix−31
This diff is too big to show here.
pkgs/development/ocaml-modules/type_conv/109.60.01.nix−32
This diff is too big to show here.
pkgs/development/ocaml-modules/type_conv/112.01.01.nix−26
This diff is too big to show here.
pkgs/development/ocaml-modules/uri/sexp.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/uucp/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/uunf/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/uuuu/default.nix+6−9
This diff is too big to show here.
pkgs/development/ocaml-modules/vg/default.nix+2−2
This diff is too big to show here.
pkgs/development/ocaml-modules/wasm/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/xdg/default.nix+17
This diff is too big to show here.
pkgs/development/ocaml-modules/xmlm/default.nix+1−1
This diff is too big to show here.
pkgs/development/ocaml-modules/xmlplaylist/default.nix+25
This diff is too big to show here.
pkgs/development/ocaml-modules/z3/default.nix+1−6
This diff is too big to show here.
pkgs/development/ocaml-modules/z3/ocamlfind.patch−13
This diff is too big to show here.
pkgs/development/ocaml-modules/zarith/default.nix+1−1
This diff is too big to show here.
pkgs/development/octave-modules/octproj/default.nix+1
This diff is too big to show here.
pkgs/development/php-packages/composer/default.nix+2−2
This diff is too big to show here.
pkgs/development/php-packages/datadog_trace/default.nix+22
This diff is too big to show here.
pkgs/development/php-packages/openswoole/default.nix+22
This diff is too big to show here.
pkgs/development/php-packages/pdepend/default.nix+41
This diff is too big to show here.
pkgs/development/php-packages/phpstan/default.nix+2−2
This diff is too big to show here.
pkgs/development/php-packages/xdebug/default.nix+2−2
This diff is too big to show here.
pkgs/development/pure-modules/audio/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/avahi/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/csv/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/doc/default.nix−23
This diff is too big to show here.
pkgs/development/pure-modules/fastcgi/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/faust/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/ffi/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/gen/default.nix−26
This diff is too big to show here.
pkgs/development/pure-modules/generic-setup-hook.sh−2
This diff is too big to show here.
pkgs/development/pure-modules/gl/default.nix−27
This diff is too big to show here.
pkgs/development/pure-modules/glpk/default.nix−40
This diff is too big to show here.
pkgs/development/pure-modules/gplot/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/gsl/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/gtk/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/liblo/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/lilv/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/lv2/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/midi/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/mpfr/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/octave/default.nix−26
This diff is too big to show here.
pkgs/development/pure-modules/odbc/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/pandoc/default.nix−28
This diff is too big to show here.
pkgs/development/pure-modules/rational/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/readline/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/sockets/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/sql3/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/stldict/default.nix−30
This diff is too big to show here.
pkgs/development/pure-modules/stllib/default.nix−30
This diff is too big to show here.
pkgs/development/pure-modules/tk/default.nix−24
This diff is too big to show here.
pkgs/development/pure-modules/xml/default.nix−24
This diff is too big to show here.
pkgs/development/python-modules/Cython/default.nix+2−9
This diff is too big to show here.
pkgs/development/python-modules/Mako/default.nix+31−4
This diff is too big to show here.
pkgs/development/python-modules/Nikola/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/Theano/default.nix+10−4
This diff is too big to show here.
pkgs/development/python-modules/XlsxWriter/default.nix+25−13
This diff is too big to show here.
pkgs/development/python-modules/adafruit-io/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/adafruit-platformdetect/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/adb-shell/default.nix+12−3
This diff is too big to show here.
pkgs/development/python-modules/adblock/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/add-trailing-comma/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/advocate/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/aenum/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aesara/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aesedb/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/afdko/default.nix+5−9
This diff is too big to show here.
pkgs/development/python-modules/afsapi/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/ailment/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aio-geojson-generic-client/default.nix+51
This diff is too big to show here.
pkgs/development/python-modules/aio-georss-client/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aio-georss-gdacs/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioairzone/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aiobotocore/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioconsole/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/aiodiscover/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioftp/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioguardian/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioh2/default.nix−24
This diff is too big to show here.
pkgs/development/python-modules/aiohomekit/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aiohttp-apispec/default.nix+2−7
This diff is too big to show here.
pkgs/development/python-modules/aiohttp-remotes/default.nix+6
This diff is too big to show here.
pkgs/development/python-modules/aiohttp-swagger/default.nix+10−2
This diff is too big to show here.
pkgs/development/python-modules/aiohttp/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/aiolifx/default.nix+8−5
This diff is too big to show here.
pkgs/development/python-modules/aiomysql/default.nix+17−27
This diff is too big to show here.
pkgs/development/python-modules/aionotify/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/aiooncue/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aioqsw/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/aioshelly/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aioslimproto/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/aioswitcher/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aiotractive/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/alembic/default.nix+2−6
This diff is too big to show here.
pkgs/development/python-modules/amazon-ion/default.nix+27−9
This diff is too big to show here.
pkgs/development/python-modules/amberelectric/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/amply/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/amqp/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/androidtv/default.nix+12−4
This diff is too big to show here.
pkgs/development/python-modules/angr/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/angrop/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/ansi/default.nix+20−8
This diff is too big to show here.
pkgs/development/python-modules/ansi2html/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/ansible-compat/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ansible-doctor/default.nix+32−25
This diff is too big to show here.
pkgs/development/python-modules/ansible-later/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/ansible-lint/default.nix−4
This diff is too big to show here.
pkgs/development/python-modules/ansible-runner/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/ansible/base.nix−88
This diff is too big to show here.
pkgs/development/python-modules/ansible/core.nix+5−14
This diff is too big to show here.
pkgs/development/python-modules/ansible/default.nix+15−8
This diff is too big to show here.
pkgs/development/python-modules/ansible/legacy.nix−55
This diff is too big to show here.
pkgs/development/python-modules/anybadge/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/anyconfig/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/anyio/default.nix+11−2
This diff is too big to show here.
pkgs/development/python-modules/apache-airflow/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/apache-beam/default.nix+16−19
This diff is too big to show here.
pkgs/development/python-modules/apache-beam/fix-cython.patch−41
This diff is too big to show here.
pkgs/development/python-modules/apache-beam/relax-deps.patch−20
This diff is too big to show here.
pkgs/development/python-modules/apispec/default.nix+13−9
This diff is too big to show here.
pkgs/development/python-modules/aplpy/default.nix+5−25
This diff is too big to show here.
pkgs/development/python-modules/apprise/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/approvaltests/default.nix+33−11
This diff is too big to show here.
pkgs/development/python-modules/appthreat-vulnerability-db/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/aprslib/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/apsw/default.nix+10−25
This diff is too big to show here.
pkgs/development/python-modules/apycula/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/archinfo/default.nix+4−14
This diff is too big to show here.
pkgs/development/python-modules/arris-tg2492lg/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/arrow/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/asana/default.nix+26−16
This diff is too big to show here.
pkgs/development/python-modules/asciimatics/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/asdf-standard/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/asdf-transform-schemas/default.nix+46
This diff is too big to show here.
pkgs/development/python-modules/asdf/default.nix+18−7
This diff is too big to show here.
pkgs/development/python-modules/asgiref/default.nix+14−4
This diff is too big to show here.
pkgs/development/python-modules/asn1crypto/default.nix+13−7
This diff is too big to show here.
pkgs/development/python-modules/astroid/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/astropy-extension-helpers/default.nix+15−4
This diff is too big to show here.
pkgs/development/python-modules/astropy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/astroquery/default.nix+30−8
This diff is too big to show here.
pkgs/development/python-modules/asttokens/default.nix+6−1
This diff is too big to show here.
pkgs/development/python-modules/async-lru/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/async-upnp-client/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/async_generator/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/asyncssh/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/atlassian-python-api/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/atom/default.nix+35−9
This diff is too big to show here.
pkgs/development/python-modules/aurorapy/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/authcaptureproxy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/authheaders/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/autobahn/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/autograd/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/av/default.nix+130−16
This diff is too big to show here.
pkgs/development/python-modules/awesomeversion/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/aws-adfs/default.nix+33−25
This diff is too big to show here.
pkgs/development/python-modules/aws-lambda-builders/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/awscrt/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/awsiotpythonsdk/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/azure-common/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-core/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/azure-eventgrid/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/azure-identity/default.nix+15−13
This diff is too big to show here.
pkgs/development/python-modules/azure-keyvault-keys/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-containerservice/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-core/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-datafactory/default.nix+6−6
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-msi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-reservations/default.nix+6−6
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-servicelinker/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-storage/default.nix+12−6
This diff is too big to show here.
pkgs/development/python-modules/azure-mgmt-trafficmanager/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/azure-servicebus/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/azure-synapse-artifacts/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/backports-zoneinfo/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/basemap/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bc-python-hcl2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bcrypt/default.nix+33−8
This diff is too big to show here.
pkgs/development/python-modules/beautifulsoup4/default.nix+9−3
This diff is too big to show here.
pkgs/development/python-modules/beautifultable/default.nix+6−1
This diff is too big to show here.
pkgs/development/python-modules/behave/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/bimmer-connected/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bip_utils/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bitarray/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bitbox02/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bitcoin-price-api/default.nix−24
This diff is too big to show here.
pkgs/development/python-modules/bitstruct/default.nix+15−4
This diff is too big to show here.
pkgs/development/python-modules/bjoern/default.nix+10−5
This diff is too big to show here.
pkgs/development/python-modules/black/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bleach/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bleak/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/blessed/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/blinker/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/blspy/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/boltztrap2/default.nix+26−13
This diff is too big to show here.
pkgs/development/python-modules/boschshcpy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/boto3/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/botocore/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/bottleneck/default.nix+31−16
This diff is too big to show here.
pkgs/development/python-modules/boxx/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/bpython/default.nix+16−2
This diff is too big to show here.
pkgs/development/python-modules/breezy/default.nix+20−5
This diff is too big to show here.
pkgs/development/python-modules/brother/default.nix+16−15
This diff is too big to show here.
pkgs/development/python-modules/browser-cookie3/default.nix+6−5
This diff is too big to show here.
pkgs/development/python-modules/bsblan/default.nix+24−16
This diff is too big to show here.
pkgs/development/python-modules/build/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/buildbot/default.nix+5−2
This diff is too big to show here.
pkgs/development/python-modules/buildbot/pkg.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/buildbot/plugins.nix+5−5
This diff is too big to show here.
pkgs/development/python-modules/buildbot/worker.nix+41−7
This diff is too big to show here.
pkgs/development/python-modules/caldav/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/can/default.nix+9−4
This diff is too big to show here.
pkgs/development/python-modules/canonicaljson/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/casbin/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/cattrs/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/cbor2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/celery/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/cert-chain-resolver/default.nix+22−7
This diff is too big to show here.
pkgs/development/python-modules/certbot/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/certomancer/default.nix+71
This diff is too big to show here.
pkgs/development/python-modules/cffi/default.nix+5−4
This diff is too big to show here.
pkgs/development/python-modules/chainer/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/chalice/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/cherrypy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/chex/default.nix+3−5
This diff is too big to show here.
pkgs/development/python-modules/chiavdf/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ciscoconfparse/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/ckcc-protocol/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/claripy/default.nix+7−5
This diff is too big to show here.
pkgs/development/python-modules/cle/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/click-log/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/click/default.nix+3−8
This diff is too big to show here.
pkgs/development/python-modules/clickhouse-driver/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/clize/default.nix+26−9
This diff is too big to show here.
pkgs/development/python-modules/clldutils/default.nix+8−2
This diff is too big to show here.
pkgs/development/python-modules/cloudflare/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/cma/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/cmd2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/codepy/default.nix+35
This diff is too big to show here.
pkgs/development/python-modules/collections-extended/default.nix+10−5
This diff is too big to show here.
pkgs/development/python-modules/commoncode/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/connexion/default.nix+10−16
This diff is too big to show here.
pkgs/development/python-modules/construct/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/contexttimer/default.nix+42
This diff is too big to show here.
pkgs/development/python-modules/convertdate/default.nix+10−7
This diff is too big to show here.
pkgs/development/python-modules/coqpit/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/coverage/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/cppy/default.nix+12−7
This diff is too big to show here.
pkgs/development/python-modules/cryptography/default.nix+24−26
This diff is too big to show here.
pkgs/development/python-modules/cryptography/vectors.nix+9−6
This diff is too big to show here.
pkgs/development/python-modules/crytic-compile/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/cssselect2/default.nix+8−2
This diff is too big to show here.
pkgs/development/python-modules/cupy/default.nix+13−4
This diff is too big to show here.
pkgs/development/python-modules/cx_freeze/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/cyclonedx-python-lib/default.nix+15−6
This diff is too big to show here.
pkgs/development/python-modules/cypherpunkpay/default.nix+97
This diff is too big to show here.
pkgs/development/python-modules/dask-mpi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dask-yarn/default.nix+47
This diff is too big to show here.
pkgs/development/python-modules/dask/default.nix+2−4
This diff is too big to show here.
pkgs/development/python-modules/databricks-connect/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/datadog/default.nix+8−2
This diff is too big to show here.
pkgs/development/python-modules/dataset/default.nix+11−5
This diff is too big to show here.
pkgs/development/python-modules/datasets/default.nix+20−7
This diff is too big to show here.
pkgs/development/python-modules/datasette/default.nix+12−12
This diff is too big to show here.
pkgs/development/python-modules/datashader/default.nix−1
This diff is too big to show here.
pkgs/development/python-modules/datatable/default.nix+3−9
This diff is too big to show here.
pkgs/development/python-modules/dateparser/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/db-dtypes/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/debtcollector/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/debugpy/default.nix−1
This diff is too big to show here.
pkgs/development/python-modules/deepdiff/default.nix+6−3
This diff is too big to show here.
pkgs/development/python-modules/deezer-python/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/deltachat/default.nix+7−3
This diff is too big to show here.
pkgs/development/python-modules/denonavr/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/detect-secrets/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/devito/default.nix+100
This diff is too big to show here.
pkgs/development/python-modules/devolo-home-control-api/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/devtools/default.nix+7
This diff is too big to show here.
pkgs/development/python-modules/dictpath/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/diff-cover/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/diskcache/default.nix−4
This diff is too big to show here.
pkgs/development/python-modules/distributed/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/distro/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django-allauth/default.nix+25−11
This diff is too big to show here.
pkgs/development/python-modules/django-appconf/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/django-hijack-admin/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/django-hijack/default.nix+22−22
This diff is too big to show here.
pkgs/development/python-modules/django-raster/default.nix+1−3
This diff is too big to show here.
pkgs/development/python-modules/django-statici18n/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django-taggit/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django-widget-tweaks/default.nix+32−9
This diff is too big to show here.
pkgs/development/python-modules/django/1.10-gis-libs.template.patch−24
This diff is too big to show here.
pkgs/development/python-modules/django/2.nix−39
This diff is too big to show here.
pkgs/development/python-modules/django/3.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django/4.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django_appconf/default.nix−35
This diff is too big to show here.
pkgs/development/python-modules/django_compressor/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django_contrib_comments/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/django_modelcluster/default.nix+27−9
This diff is too big to show here.
pkgs/development/python-modules/django_reversion/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dm-haiku/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/dm-sonnet/default.nix−91
This diff is too big to show here.
pkgs/development/python-modules/dnspython/default.nix+14−6
This diff is too big to show here.
pkgs/development/python-modules/doc8/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dockerfile-parse/default.nix+27−9
This diff is too big to show here.
pkgs/development/python-modules/docstring-parser/default.nix+25−11
This diff is too big to show here.
pkgs/development/python-modules/docutils/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/doit/default.nix+7−4
This diff is too big to show here.
pkgs/development/python-modules/dotmap/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dragonfly/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dropbox/default.nix+41−12
This diff is too big to show here.
pkgs/development/python-modules/duckdb-engine/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/dugong/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/dunamai/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/dungeon-eos/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/durus/default.nix+28
This diff is too big to show here.
pkgs/development/python-modules/dynalite-devices/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/eagle100/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/easyprocess/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/editables/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/elementpath/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/elkm1-lib/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/enaml/default.nix+6−3
This diff is too big to show here.
pkgs/development/python-modules/entrypoint2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/entrypoints/default.nix+17−12
This diff is too big to show here.
pkgs/development/python-modules/env-canada/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/envs/default.nix+15−11
This diff is too big to show here.
pkgs/development/python-modules/ephemeral-port-reserve/default.nix+42
This diff is too big to show here.
pkgs/development/python-modules/exceptiongroup/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/exchangelib/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/faker/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fakeredis/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/falcon/default.nix+46−33
This diff is too big to show here.
pkgs/development/python-modules/faraday-agent-parameters-types/default.nix+6−1
This diff is too big to show here.
pkgs/development/python-modules/faraday-plugins/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/fastapi/default.nix+17−3
This diff is too big to show here.
pkgs/development/python-modules/fastavro/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/fastbencode/default.nix+26
This diff is too big to show here.
pkgs/development/python-modules/fastcore/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/fasteners/default.nix+11−24
This diff is too big to show here.
pkgs/development/python-modules/fastjsonschema/default.nix+3−14
This diff is too big to show here.
pkgs/development/python-modules/fastparquet/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fenics/default.nix+12−20
This diff is too big to show here.
pkgs/development/python-modules/ffcv/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/filelock/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/filetype/default.nix+26−6
This diff is too big to show here.
pkgs/development/python-modules/findpython/default.nix+53
This diff is too big to show here.
pkgs/development/python-modules/fints/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fipy/default.nix+8
This diff is too big to show here.
pkgs/development/python-modules/fipy/gmsh.patch+182
This diff is too big to show here.
pkgs/development/python-modules/fitbit/default.nix+24−16
This diff is too big to show here.
pkgs/development/python-modules/fivem-api/default.nix+42
This diff is too big to show here.
pkgs/development/python-modules/flake8-blind-except/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/flake8-bugbear/default.nix+9−4
This diff is too big to show here.
pkgs/development/python-modules/flake8-debugger/default.nix+23−14
This diff is too big to show here.
pkgs/development/python-modules/flake8/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/flask-admin/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/flask-appbuilder/default.nix+4−13
This diff is too big to show here.
pkgs/development/python-modules/flask-bcrypt/default.nix+9−3
This diff is too big to show here.
pkgs/development/python-modules/flask-compress/default.nix+26−8
This diff is too big to show here.
pkgs/development/python-modules/flask-httpauth/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flask-jwt-extended/default.nix+31−10
This diff is too big to show here.
pkgs/development/python-modules/flask-login/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flask-paranoid/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flask-restful/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/flask-restful/werkzeug-2.1.0-compat.patch+114
This diff is too big to show here.
pkgs/development/python-modules/flask-restx/default.nix+15
This diff is too big to show here.
pkgs/development/python-modules/flask-seasurf/default.nix+13−3
This diff is too big to show here.
pkgs/development/python-modules/flask-security-too/default.nix+66−32
This diff is too big to show here.
pkgs/development/python-modules/flask-socketio/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/flask-talisman/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flask-testing/default.nix+41−15
This diff is too big to show here.
pkgs/development/python-modules/flask/default.nix+6−8
This diff is too big to show here.
pkgs/development/python-modules/flatbuffers/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/flatdict/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flax/default.nix+7−3
This diff is too big to show here.
pkgs/development/python-modules/flickrapi/default.nix+50−19
This diff is too big to show here.
pkgs/development/python-modules/flit-core/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/flit/default.nix+10−11
This diff is too big to show here.
pkgs/development/python-modules/flux-led/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fn/default.nix+22−8
This diff is too big to show here.
pkgs/development/python-modules/fontmake/default.nix+42
This diff is too big to show here.
pkgs/development/python-modules/fontparts/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/fonttools/default.nix+8−5
This diff is too big to show here.
pkgs/development/python-modules/fqdn/default.nix+36
This diff is too big to show here.
pkgs/development/python-modules/freezegun/default.nix+21−10
This diff is too big to show here.
pkgs/development/python-modules/frozendict/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fs/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ftfy/default.nix+8−2
This diff is too big to show here.
pkgs/development/python-modules/funcparserlib/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/furo/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/fuse-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/garminconnect/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/gattlib/default.nix+68
This diff is too big to show here.
pkgs/development/python-modules/gattlib/setup.patch+18
This diff is too big to show here.
pkgs/development/python-modules/gb-io/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/gbulb/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/gcal-sync/default.nix+46
This diff is too big to show here.
pkgs/development/python-modules/gehomesdk/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/genshi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gensim/default.nix+37−20
This diff is too big to show here.
pkgs/development/python-modules/geoalchemy2/default.nix+13−2
This diff is too big to show here.
pkgs/development/python-modules/geocachingapi/default.nix+10−4
This diff is too big to show here.
pkgs/development/python-modules/geopandas/default.nix+14−1
This diff is too big to show here.
pkgs/development/python-modules/ghapi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ghp-import/default.nix+12−4
This diff is too big to show here.
pkgs/development/python-modules/gidgethub/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gipc/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/git-annex-adapter/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/github3_py/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/glad/default.nix+18
This diff is too big to show here.
pkgs/development/python-modules/glances-api/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/glcontext/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/glean-parser/default.nix+6−5
This diff is too big to show here.
pkgs/development/python-modules/glfw/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/globus-sdk/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/glyphslib/default.nix+59
This diff is too big to show here.
pkgs/development/python-modules/goodwe/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-api-core/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-api-python-client/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-auth-oauthlib/default.nix+13−3
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-bigquery-storage/default.nix+48
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-bigquery/default.nix+15−4
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-bigtable/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-dataproc/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-error-reporting/default.nix+6−7
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-pubsub/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-secret-manager/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-testutils/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-cloud-videointelligence/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-nest-sdm/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/google-re2/default.nix+22−7
This diff is too big to show here.
pkgs/development/python-modules/gradient/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/graph_nets/default.nix−45
This diff is too big to show here.
pkgs/development/python-modules/graphene-django/default.nix+7−3
This diff is too big to show here.
pkgs/development/python-modules/graphene-django/graphene-3_2_0.patch+150
This diff is too big to show here.
pkgs/development/python-modules/graphene/default.nix+17
This diff is too big to show here.
pkgs/development/python-modules/graphql-relay/default.nix+19−4
This diff is too big to show here.
pkgs/development/python-modules/graphql-subscription-manager/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/graphviz/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/graspologic/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/greeclimate/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/gremlinpython/default.nix+3−9
This diff is too big to show here.
pkgs/development/python-modules/grip/default.nix+2−11
This diff is too big to show here.
pkgs/development/python-modules/grpcio-status/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/grpcio-tools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gspread/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gssapi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gtts/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/h11/default.nix+5−2
This diff is too big to show here.
pkgs/development/python-modules/h3/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/ha-av/default.nix−43
This diff is too big to show here.
pkgs/development/python-modules/hachoir/default.nix+9−3
This diff is too big to show here.
pkgs/development/python-modules/hahomematic/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/hangups/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hass-nabucasa/default.nix+2−1
This diff is too big to show here.
pkgs/development/python-modules/hatasmota/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/hatchling/default.nix+79
This diff is too big to show here.
pkgs/development/python-modules/hg-evolve/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hg-git/default.nix+15−5
This diff is too big to show here.
pkgs/development/python-modules/hid/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hidapi/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hkavr/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/hmmlearn/default.nix+9−8
This diff is too big to show here.
pkgs/development/python-modules/homeconnect/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/howdoi/default.nix+16−2
This diff is too big to show here.
pkgs/development/python-modules/hpack/default.nix+19−6
This diff is too big to show here.
pkgs/development/python-modules/html-sanitizer/default.nix+3−1
This diff is too big to show here.
pkgs/development/python-modules/http-message-signatures/default.nix+56
This diff is too big to show here.
pkgs/development/python-modules/http-sfv/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/httpbin/default.nix+10
This diff is too big to show here.
pkgs/development/python-modules/httpcore/default.nix+9−2
This diff is too big to show here.
pkgs/development/python-modules/httplib2/default.nix+9−5
This diff is too big to show here.
pkgs/development/python-modules/httptools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/httpx-ntlm/default.nix+7−1
This diff is too big to show here.
pkgs/development/python-modules/httpx/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/huggingface-hub/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/humanize/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hwi/default.nix+11−8
This diff is too big to show here.
pkgs/development/python-modules/hydra-check/default.nix+12−19
This diff is too big to show here.
pkgs/development/python-modules/hyperframe/default.nix+4−1
This diff is too big to show here.
pkgs/development/python-modules/hyperion-py/default.nix+4−3
This diff is too big to show here.
pkgs/development/python-modules/hypothesis/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hypothesmith/default.nix+32−4
This diff is too big to show here.
pkgs/development/python-modules/hypothesmith/remove-black.patch+88
This diff is too big to show here.
pkgs/development/python-modules/hyppo/default.nix+6−4
This diff is too big to show here.
pkgs/development/python-modules/ibis-framework/default.nix+34−47
This diff is too big to show here.
pkgs/development/python-modules/identify/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/igraph/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/ihatemoney/default.nix+36−34
This diff is too big to show here.
pkgs/development/python-modules/imageio/default.nix+24−15
This diff is too big to show here.
pkgs/development/python-modules/imageio/libgl-path.patch+13
This diff is too big to show here.
pkgs/development/python-modules/imap-tools/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/img2pdf/default.nix+2−12
This diff is too big to show here.
pkgs/development/python-modules/immutables/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/impacket/default.nix+31−5
This diff is too big to show here.
pkgs/development/python-modules/importlib-metadata/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/importlib-resources/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/inquirer/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/installer/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/insteon-frontend-home-assistant/default.nix+26
This diff is too big to show here.
pkgs/development/python-modules/intbitset/default.nix+6−19
This diff is too big to show here.
pkgs/development/python-modules/intbitset/remove-impure-tuning.patch−24
This diff is too big to show here.
pkgs/development/python-modules/intellifire4py/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/intensity-normalization/default.nix+6−3
This diff is too big to show here.
pkgs/development/python-modules/invocations/default.nix+15−4
This diff is too big to show here.
pkgs/development/python-modules/ipykernel/default.nix+9−7
This diff is too big to show here.
pkgs/development/python-modules/ipympl/default.nix+4−3
This diff is too big to show here.
pkgs/development/python-modules/ipython-sql/default.nix+58
This diff is too big to show here.
pkgs/development/python-modules/ipython/default.nix+3−5
This diff is too big to show here.
pkgs/development/python-modules/ipywidgets/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/islpy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ismartgate/default.nix+12−2
This diff is too big to show here.
pkgs/development/python-modules/iso4217/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/iso8601/default.nix+6−1
This diff is too big to show here.
pkgs/development/python-modules/isoduration/default.nix+50
This diff is too big to show here.
pkgs/development/python-modules/iterm2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/itsdangerous/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jaraco_itertools/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/jaraco_text/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jarowinkler/default.nix+54
This diff is too big to show here.
pkgs/development/python-modules/jax/default.nix+21−8
This diff is too big to show here.
pkgs/development/python-modules/jaxlib/bin.nix+8−4
This diff is too big to show here.
pkgs/development/python-modules/jaxlib/default.nix+7−7
This diff is too big to show here.
pkgs/development/python-modules/jc/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jedi-language-server/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/jeepney/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/jenkins-job-builder/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jinja2/default.nix+4−3
This diff is too big to show here.
pkgs/development/python-modules/jira/default.nix+21−10
This diff is too big to show here.
pkgs/development/python-modules/jmespath/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/joblib/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/josepy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jsbeautifier/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/json-home-client/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/json-schema-for-humans/default.nix+7−8
This diff is too big to show here.
pkgs/development/python-modules/jsondiff/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jsonpickle/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jsonrpc-async/default.nix+25−4
This diff is too big to show here.
pkgs/development/python-modules/jsonrpc-base/default.nix+9−1
This diff is too big to show here.
pkgs/development/python-modules/jug/default.nix+31−18
This diff is too big to show here.
pkgs/development/python-modules/junos-eznc/default.nix+49−15
This diff is too big to show here.
pkgs/development/python-modules/jupyter-client/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jupyter-packaging/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jupyter_console/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jupyter_core/default.nix+28−7
This diff is too big to show here.
pkgs/development/python-modules/jupyterlab-git/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jupyterlab/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/jupyterlab_server/default.nix+7−5
This diff is too big to show here.
pkgs/development/python-modules/jupytext/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/jwcrypto/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/kaldi-active-grammar/default.nix+7−1
This diff is too big to show here.
pkgs/development/python-modules/karton-core/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/kbcstorage/default.nix+69
This diff is too big to show here.
pkgs/development/python-modules/keepalive/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/keras/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/kiss-headers/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/kivy-garden/default.nix+11−9
This diff is too big to show here.
pkgs/development/python-modules/kiwisolver/default.nix+21−9
This diff is too big to show here.
pkgs/development/python-modules/kubernetes/default.nix+4−3
This diff is too big to show here.
pkgs/development/python-modules/labelbox/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/labgrid/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/ledgerblue/default.nix+29−6
This diff is too big to show here.
pkgs/development/python-modules/lektor/default.nix+54−25
This diff is too big to show here.
pkgs/development/python-modules/levenshtein/default.nix+15−7
This diff is too big to show here.
pkgs/development/python-modules/libcst/default.nix+21−4
This diff is too big to show here.
pkgs/development/python-modules/libevdev/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/libgpuarray/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/libtmux/default.nix+7−5
This diff is too big to show here.
pkgs/development/python-modules/lightwave2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/limits/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/limnoria/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/lmnotify/default.nix+17−6
This diff is too big to show here.
pkgs/development/python-modules/loopy/default.nix+28−24
This diff is too big to show here.
pkgs/development/python-modules/losant-rest/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/lru-dict/default.nix+34
This diff is too big to show here.
pkgs/development/python-modules/luxtronik/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/lxmf/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/lxml/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/lz4/default.nix+9−8
This diff is too big to show here.
pkgs/development/python-modules/magicgui/default.nix+12−3
This diff is too big to show here.
pkgs/development/python-modules/mailchecker/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/manticore/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mariadb/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/markupsafe/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/marshmallow-dataclass/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/marshmallow-sqlalchemy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mat2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/matchpy/default.nix+29−23
This diff is too big to show here.
pkgs/development/python-modules/matrix-nio/default.nix+1
This diff is too big to show here.
2223 more files changed are not listed.