@@ -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
@@ -284,3 +285,7 @@
284/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
285/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
285/nixos/tests/matrix-appservice-irc.nix @piegamesde
286/nixos/tests/matrix-appservice-irc.nix @piegamesde
286/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/update-terraform-providers.yml+6−5
@@ -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"
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/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/index.xml+1
@@ -9,6 +9,7 @@
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" />
14 <xi:include href="cuda.section.xml" />
15 <xi:include href="cuda.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/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+55−1
@@ -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; }));
@@ -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)}";
@@ -113,6 +113,10 @@ rec {
113 args ? {}
113 args ? {}
114 , # 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.
115 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
118 withWarnings = x:
122 withWarnings = x:
@@ -156,7 +160,10 @@ rec {
156 type = types.lazyAttrsOf types.raw;
160 type = types.lazyAttrsOf types.raw;
157 # Only render documentation once at the root of the option tree,
161 # Only render documentation once at the root of the option tree,
158 # not for all individual submodules.
162 # not for all individual submodules.
163+ # Allow merging option decls to make this internal regardless.
159− internal = prefix != [];
164+ ${if prefix == []
165+ then null # unset => visible
166+ else "internal"} = true;
160 # TODO: Change the type of this option to a submodule with a
167 # TODO: Change the type of this option to a submodule with a
161 # freeformType, so that individual arguments can be documented
168 # freeformType, so that individual arguments can be documented
162 # separately
169 # separately
@@ -338,15 +345,17 @@ rec {
338 modules ? [],
345 modules ? [],
339 specialArgs ? {},
346 specialArgs ? {},
340 prefix ? [],
347 prefix ? [],
348+ extensionOffset ? length modules,
342 evalModules (evalModulesArgs // {
350 evalModules (evalModulesArgs // {
343 modules = regularModules ++ modules;
351 modules = regularModules ++ modules;
344 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
352 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
345 prefix = extendArgs.prefix or evalModulesArgs.prefix;
353 prefix = extendArgs.prefix or evalModulesArgs.prefix;
354+ inherit extensionOffset;
348 type = lib.types.submoduleWith {
357 type = lib.types.submoduleWith {
349− inherit modules specialArgs;
358+ inherit modules specialArgs extensionOffset;
352 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
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 = {
@@ -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+207−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";
@@ -4696,6 +4754,12 @@
4696 githubId = 201997;
4754 githubId = 201997;
4697 name = "Eric Seidel";
4755 name = "Eric Seidel";
4758+ name = "grindhold";
4759+ email = "grindhold+nix@skarphed.org";
4760+ github = "grindhold";
4761+ githubId = 2592640;
4699 gspia = {
4763 gspia = {
4700 email = "iahogsp@gmail.com";
4764 email = "iahogsp@gmail.com";
4701 github = "gspia";
4765 github = "gspia";
@@ -4714,6 +4778,12 @@
4714 githubId = 343415;
4778 githubId = 343415;
4715 name = "Greg Roodt";
4779 name = "Greg Roodt";
4782+ email = "grnnja@gmail.com";
4784+ githubId = 31556469;
4785+ name = "Prem Netsuwan";
4717 gruve-p = {
4787 gruve-p = {
4718 email = "groestlcoin@gmail.com";
4788 email = "groestlcoin@gmail.com";
4719 github = "gruve-p";
4789 github = "gruve-p";
@@ -5579,6 +5649,12 @@
5579 githubId = 488556;
5649 githubId = 488556;
5580 name = "Javier Aguirre";
5650 name = "Javier Aguirre";
5653+ name = "Jayesh Bhoot";
5654+ email = "jayesh@bhoot.sh";
5655+ github = "jayesh-bhoot";
5656+ githubId = 1915507;
5582 jb55 = {
5658 jb55 = {
5583 email = "jb55@jb55.com";
5659 email = "jb55@jb55.com";
5584 github = "jb55";
5660 github = "jb55";
@@ -6809,12 +6885,6 @@
6809 githubId = 99639;
6885 githubId = 99639;
6810 name = "Pawel Kruszewski";
6886 name = "Pawel Kruszewski";
6813− email = "tomasz.kontusz@gmail.com";
6814− github = "ktosiek";
6816− name = "Tomasz Kontusz";
6818 kubukoz = {
6888 kubukoz = {
6819 email = "kubukoz@gmail.com";
6889 email = "kubukoz@gmail.com";
6820 github = "kubukoz";
6890 github = "kubukoz";
@@ -7148,6 +7218,13 @@
7148 githubId = 1769386;
7218 githubId = 1769386;
7149 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";
7151 liff = {
7228 liff = {
7152 email = "liff@iki.fi";
7229 email = "liff@iki.fi";
7153 github = "liff";
7230 github = "liff";
@@ -7178,6 +7255,13 @@
7178 githubId = 714;
7255 githubId = 714;
7179 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";
7181 limeytexan = {
7265 limeytexan = {
7182 email = "limeytexan@gmail.com";
7266 email = "limeytexan@gmail.com";
7183 github = "limeytexan";
7267 github = "limeytexan";
@@ -7306,7 +7390,7 @@
7306 name = "Anthony Lodi";
7390 name = "Anthony Lodi";
7308 loicreynier = {
7392 loicreynier = {
7309− email = "loic@loireynier.fr";
7393+ email = "loic@loicreynier.fr";
7310 github = "loicreynier";
7394 github = "loicreynier";
7311 githubId = 88983487;
7395 githubId = 88983487;
7312 name = "Loïc Reynier";
7396 name = "Loïc Reynier";
@@ -8838,6 +8922,12 @@
8838 githubId = 3747396;
8922 githubId = 3747396;
8839 name = "Nathan Isom";
8923 name = "Nathan Isom";
8926+ email = "nix@neil.mayhew.name";
8927+ github = "neilmayhew";
8929+ name = "Neil Mayhew";
8841 nelsonjeppesen = {
8931 nelsonjeppesen = {
8842 email = "nix@jeppesen.io";
8932 email = "nix@jeppesen.io";
8843 github = "NelsonJeppesen";
8933 github = "NelsonJeppesen";
@@ -9945,6 +10035,12 @@
9945 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";
9948 polendri = {
10044 polendri = {
9949 email = "paul@ijj.li";
10045 email = "paul@ijj.li";
9950 github = "polendri";
10046 github = "polendri";
@@ -10204,6 +10300,12 @@
10204 githubId = 115877;
10300 githubId = 115877;
10205 name = "Kenny Shen";
10301 name = "Kenny Shen";
10304+ email = "quaggy@gmail.com";
10307+ name = "Jonathan Wright";
10207 queezle = {
10309 queezle = {
10208 email = "git@queezle.net";
10310 email = "git@queezle.net";
10209 github = "qzle";
10311 github = "qzle";
@@ -11024,28 +11126,22 @@
11024 githubId = 132835;
11126 githubId = 132835;
11025 name = "Samuel Dionne-Riel";
11127 name = "Samuel Dionne-Riel";
11028− email = "s@muel.gr";
11029− github = "samuelgrf";
11030− githubId = 67663538;
11031− name = "Samuel Gräfenstein";
11034− longkeyid = "rsa4096/0xDE75F92E318123F0";
11035− fingerprint = "6F2E 2A90 423C 8111 BFF2 895E DE75 F92E 3181 23F0";
11038− longkeyid = "rsa4096/0xEF76A063F15C63C8";
11039− fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8";
11043 samuelrivas = {
11129 samuelrivas = {
11044 email = "samuelrivas@gmail.com";
11130 email = "samuelrivas@gmail.com";
11045 github = "samuelrivas";
11131 github = "samuelrivas";
11046 githubId = 107703;
11132 githubId = 107703;
11047 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";
11049 sander = {
11145 sander = {
11050 email = "s.vanderburg@tudelft.nl";
11146 email = "s.vanderburg@tudelft.nl";
11051 github = "svanderburg";
11147 github = "svanderburg";
@@ -11272,6 +11368,12 @@
11272 githubId = 307899;
11368 githubId = 307899;
11273 name = "Gurkan Gur";
11369 name = "Gurkan Gur";
11372+ email = "sb@canva.com";
11373+ github = "serge-belov";
11374+ githubId = 38824235;
11375+ name = "Serge Belov";
11275 sersorrel = {
11377 sersorrel = {
11276 email = "ash@sorrel.sh";
11378 email = "ash@sorrel.sh";
11277 github = "sersorrel";
11379 github = "sersorrel";
@@ -11316,6 +11418,12 @@
11316 githubId = 1151264;
11418 githubId = 1151264;
11317 name = "Sebastian Graf";
11419 name = "Sebastian Graf";
11422+ email = "shadaj@users.noreply.github.com";
11423+ github = "shadaj";
11424+ githubId = 543055;
11425+ name = "Shadaj Laddad";
11319 shahrukh330 = {
11427 shahrukh330 = {
11320 email = "shahrukh330@gmail.com";
11428 email = "shahrukh330@gmail.com";
11321 github = "shahrukh330";
11429 github = "shahrukh330";
@@ -11512,6 +11620,12 @@
11512 githubId = 2770647;
11620 githubId = 2770647;
11513 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";
11515 siraben = {
11629 siraben = {
11516 email = "bensiraphob@gmail.com";
11630 email = "bensiraphob@gmail.com";
11517 matrix = "@siraben:matrix.org";
11631 matrix = "@siraben:matrix.org";
@@ -11949,6 +12063,12 @@
11949 githubId = 1694705;
12063 githubId = 1694705;
11950 name = "Sam Stites";
12064 name = "Sam Stites";
12067+ email = "strager.nds@gmail.com";
12068+ github = "strager";
12070+ name = "Matthew \"strager\" Glazar";
11952 stumoss = {
12072 stumoss = {
11953 email = "samoss@gmail.com";
12073 email = "samoss@gmail.com";
11954 github = "stumoss";
12074 github = "stumoss";
@@ -12441,6 +12561,12 @@
12441 githubId = 844343;
12561 githubId = 844343;
12442 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";
12444 thibautmarty = {
12570 thibautmarty = {
12445 email = "github@thibautmarty.fr";
12571 email = "github@thibautmarty.fr";
12446 matrix = "@thibaut:thibautmarty.fr";
12572 matrix = "@thibaut:thibautmarty.fr";
@@ -12687,6 +12813,13 @@
12687 githubId = 90456;
12813 githubId = 90456;
12688 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;
12690 travisbhartwell = {
12823 travisbhartwell = {
12691 email = "nafai@travishartwell.net";
12824 email = "nafai@travishartwell.net";
12692 github = "travisbhartwell";
12825 github = "travisbhartwell";
@@ -13161,6 +13294,12 @@
13161 githubId = 1771332;
13294 githubId = 1771332;
13162 name = "László Vaskó";
13295 name = "László Vaskó";
13298+ email = "vmfuentes64@gmail.com";
13299+ github = "vlinkz";
13300+ githubId = 20145996;
13301+ name = "Victor Fuentes";
13164 vlstill = {
13303 vlstill = {
13165 email = "xstill@fi.muni.cz";
13304 email = "xstill@fi.muni.cz";
13166 github = "vlstill";
13305 github = "vlstill";
@@ -13453,7 +13592,7 @@
13453 name = "Andrei Pampu";
13592 name = "Andrei Pampu";
13455 wolfangaukang = {
13594 wolfangaukang = {
13456− email = "liquid.query960@4wrd.cc";
13595+ email = "clone.gleeful135+nixpkgs@anonaddy.me";
13457 github = "wolfangaukang";
13596 github = "wolfangaukang";
13458 githubId = 8378365;
13597 githubId = 8378365;
13459 name = "P. R. d. O.";
13598 name = "P. R. d. O.";
@@ -13506,6 +13645,13 @@
13506 github = "wunderbrick";
13645 github = "wunderbrick";
13507 githubId = 52174714;
13646 githubId = 52174714;
13649+ email = "72203260+wyndon@users.noreply.github.com";
13650+ matrix = "@wyndon:envs.net";
13651+ github = "wyndon";
13652+ githubId = 72203260;
13509 wyvie = {
13655 wyvie = {
13510 email = "elijahrum@gmail.com";
13656 email = "elijahrum@gmail.com";
13511 github = "wyvie";
13657 github = "wyvie";
@@ -14065,6 +14211,12 @@
14065 github = "deifactor";
14211 github = "deifactor";
14066 githubId = 30192992;
14212 githubId = 30192992;
14215+ name = "deinferno";
14216+ email = "14363193+deinferno@users.noreply.github.com";
14217+ github = "deinferno";
14218+ githubId = 14363193;
14068 fzakaria = {
14220 fzakaria = {
14069 name = "Farid Zakaria";
14221 name = "Farid Zakaria";
14070 email = "farid.m.zakaria@gmail.com";
14222 email = "farid.m.zakaria@gmail.com";
@@ -14188,6 +14340,12 @@
14188 github = "zbioe";
14340 github = "zbioe";
14189 githubId = 7332055;
14341 githubId = 7332055;
14345+ email = "linzway@qq.com";
14347+ githubId = 348013;
14191 zenithal = {
14349 zenithal = {
14192 name = "zenithal";
14350 name = "zenithal";
14193 email = "i@zenithal.me";
14351 email = "i@zenithal.me";
@@ -14308,4 +14466,16 @@
14308 github = "kuwii";
14466 github = "kuwii";
14309 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/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+43−37
@@ -87,7 +87,8 @@ def make_request(url: str, token=None) -> urllib.request.Request:
87 return urllib.request.Request(url, headers=headers)
87 return urllib.request.Request(url, headers=headers)
90+# a dictionary of plugins and their new repositories
90−Redirects = Dict['Repo', 'Repo']
91+Redirects = Dict['PluginDesc', 'Repo']
92class Repo:
93class Repo:
93 def __init__(
94 def __init__(
@@ -96,8 +97,8 @@ class Repo:
96 self.uri = uri
97 self.uri = uri
97 '''Url to the repo'''
98 '''Url to the repo'''
98 self._branch = branch
99 self._branch = branch
99− # {old_uri: new_uri}
100+ # Redirect is the new Repo to use
100− self.redirect: Redirects = {}
101+ self.redirect: Optional['Repo'] = None
101 self.token = "dummy_token"
102 self.token = "dummy_token"
103 @property
104 @property
@@ -207,7 +208,7 @@ class RepoGitHub(Repo):
209 new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
210 new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
210− self.redirect[self] = new_repo
211+ self.redirect = new_repo
213 def prefetch(self, commit: str) -> str:
214 def prefetch(self, commit: str) -> str:
@@ -237,7 +238,7 @@ class RepoGitHub(Repo):
240−@dataclass
241+@dataclass(frozen=True)
241class PluginDesc:
242class PluginDesc:
242 repo: Repo
243 repo: Repo
243 branch: str
244 branch: str
@@ -310,6 +311,16 @@ def load_plugins_from_csv(config: FetchConfig, input_file: Path,) -> List[Plugin
311 return plugins
312 return plugins
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)
313class Editor:
324class Editor:
314 """The configuration of the update script."""
325 """The configuration of the update script."""
@@ -332,9 +343,15 @@ class Editor:
332 self.deprecated = deprecated or root.joinpath("deprecated.json")
343 self.deprecated = deprecated or root.joinpath("deprecated.json")
333 self.cache_file = cache_file or f"{name}-plugin-cache.json"
344 self.cache_file = cache_file or f"{name}-plugin-cache.json"
335− def get_current_plugins(self):
346+ def get_current_plugins(self) -> List[Plugin]:
336 """To fill the cache"""
347 """To fill the cache"""
337− return get_current_plugins(self)
348+ data = run_nix_expr(self.get_plugins)
350+ for name, attr in data.items():
351+ print("get_current_plugins: name %s" % name)
352+ p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
339 def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
356 def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
340 '''CSV spec'''
357 '''CSV spec'''
@@ -448,24 +465,10 @@ class CleanEnvironment(object):
448 self.empty_config.close()
465 self.empty_config.close()
451−def get_current_plugins(editor: Editor) -> List[Plugin]:
452− with CleanEnvironment():
453− cmd = ["nix", "eval", "--extra-experimental-features", "nix-command", "--impure", "--json", "--expr", editor.get_plugins]
454− log.debug("Running command %s", cmd)
455− out = subprocess.check_output(cmd)
456− data = json.loads(out)
458− for name, attr in data.items():
459− print("get_current_plugins: name %s" % name)
460− p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
465def prefetch_plugin(
468def prefetch_plugin(
466 p: PluginDesc,
469 p: PluginDesc,
467 cache: "Optional[Cache]" = None,
470 cache: "Optional[Cache]" = None,
468−) -> Tuple[Plugin, Redirects]:
471+) -> Tuple[Plugin, Optional[Repo]]:
469 repo, branch, alias = p.repo, p.branch, p.alias
472 repo, branch, alias = p.repo, p.branch, p.alias
470 name = alias or p.repo.name
473 name = alias or p.repo.name
471 commit = None
474 commit = None
@@ -479,7 +482,7 @@ def prefetch_plugin(
479 return cached_plugin, repo.redirect
482 return cached_plugin, repo.redirect
481 has_submodules = repo.has_submodules()
484 has_submodules = repo.has_submodules()
482− print(f"prefetch {name}")
485+ log.debug(f"prefetch {name}")
483 sha256 = repo.prefetch(commit)
486 sha256 = repo.prefetch(commit)
@@ -488,7 +491,7 @@ def prefetch_plugin(
491−def print_download_error(plugin: str, ex: Exception):
494+def print_download_error(plugin: PluginDesc, ex: Exception):
492 print(f"{plugin}: {ex}", file=sys.stderr)
495 print(f"{plugin}: {ex}", file=sys.stderr)
493 ex_traceback = ex.__traceback__
496 ex_traceback = ex.__traceback__
494 tb_lines = [
497 tb_lines = [
@@ -498,19 +501,21 @@ def print_download_error(plugin: str, ex: Exception):
498 print("\n".join(tb_lines))
501 print("\n".join(tb_lines))
500def check_results(
503def check_results(
501− results: List[Tuple[PluginDesc, Union[Exception, Plugin], Redirects]]
504+ results: List[Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]]
502) -> Tuple[List[Tuple[PluginDesc, Plugin]], Redirects]:
505) -> Tuple[List[Tuple[PluginDesc, Plugin]], Redirects]:
504− failures: List[Tuple[str, Exception]] = []
507+ failures: List[Tuple[PluginDesc, Exception]] = []
505 plugins = []
508 plugins = []
506− # {old: new} plugindesc
507− redirects: Dict[Repo, Repo] = {}
509+ redirects: Redirects = {}
508 for (pdesc, result, redirect) in results:
510 for (pdesc, result, redirect) in results:
509 if isinstance(result, Exception):
511 if isinstance(result, Exception):
510− 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)
512− plugins.append((pdesc, result))
518+ plugins.append((new_pdesc, result))
513− redirects.update(redirect)
515 print(f"{len(results) - len(failures)} plugins were checked", end="")
520 print(f"{len(results) - len(failures)} plugins were checked", end="")
516 if len(failures) == 0:
521 if len(failures) == 0:
@@ -591,13 +596,13 @@ class Cache:
592def prefetch(
597def prefetch(
593 pluginDesc: PluginDesc, cache: Cache
598 pluginDesc: PluginDesc, cache: Cache
594−) -> Tuple[PluginDesc, Union[Exception, Plugin], dict]:
599+) -> Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]:
596 plugin, redirect = prefetch_plugin(pluginDesc, cache)
601 plugin, redirect = prefetch_plugin(pluginDesc, cache)
597 cache[plugin.commit] = plugin
602 cache[plugin.commit] = plugin
598 return (pluginDesc, plugin, redirect)
603 return (pluginDesc, plugin, redirect)
599 except Exception as e:
604 except Exception as e:
600− return (pluginDesc, e, {})
605+ return (pluginDesc, e, None)
@@ -606,7 +611,7 @@ def rewrite_input(
606 input_file: Path,
611 input_file: Path,
607 deprecated: Path,
612 deprecated: Path,
608 # old pluginDesc and the new
613 # old pluginDesc and the new
609− redirects: Dict[PluginDesc, PluginDesc] = {},
614+ redirects: Redirects = {},
610 append: List[PluginDesc] = [],
615 append: List[PluginDesc] = [],
612 plugins = load_plugins_from_csv(config, input_file,)
617 plugins = load_plugins_from_csv(config, input_file,)
@@ -618,9 +623,10 @@ def rewrite_input(
618 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
623 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
619 with open(deprecated, "r") as f:
624 with open(deprecated, "r") as f:
620 deprecations = json.load(f)
625 deprecations = json.load(f)
621− for old, new in redirects.items():
626+ for pdesc, new_repo in redirects.items():
627+ new_pdesc = PluginDesc(new_repo, pdesc.branch, pdesc.alias)
622− old_plugin, _ = prefetch_plugin(old)
628+ old_plugin, _ = prefetch_plugin(pdesc)
623− new_plugin, _ = prefetch_plugin(new)
629+ new_plugin, _ = prefetch_plugin(new_pdesc)
624 if old_plugin.normalized_name != new_plugin.normalized_name:
630 if old_plugin.normalized_name != new_plugin.normalized_name:
625 deprecations[old_plugin.normalized_name] = {
631 deprecations[old_plugin.normalized_name] = {
626 "new": new_plugin.normalized_name,
632 "new": new_plugin.normalized_name,
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/release-notes/rl-2205.section.xml+552−2
@@ -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
@@ -73,6 +100,29 @@
73 Systemd has been upgraded to the version 250.
100 Systemd has been upgraded to the version 250.
75 </listitem>
102 </listitem>
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.
76 <listitem>
126 <listitem>
78 <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>
@@ -101,6 +151,14 @@
103 </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.
104 </itemizedlist>
162 </itemizedlist>
105 </section>
163 </section>
106 <section xml:id="sec-release-22.05-new-services">
164 <section xml:id="sec-release-22.05-new-services">
@@ -130,6 +188,13 @@
130 <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>.
132 </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>.
133 <listitem>
198 <listitem>
135 <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>,
@@ -361,6 +426,14 @@
361 <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>
363 </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>.
364 <listitem>
437 <listitem>
366 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
439 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
@@ -374,6 +447,14 @@
374 cluster resource manager
447 cluster resource manager
376 </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>.
377 </itemizedlist>
458 </itemizedlist>
378 </section>
459 </section>
379 <section xml:id="sec-release-22.05-incompatibilities">
460 <section xml:id="sec-release-22.05-incompatibilities">
@@ -441,12 +522,85 @@
441 new versions will release.
522 new versions will release.
443 </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>.
444 <listitem>
560 <listitem>
446 <literal>security.klogd</literal> was removed. Logging of
562 <literal>security.klogd</literal> was removed. Logging of
447 kernel messages is handled by systemd since Linux 3.5.
563 kernel messages is handled by systemd since Linux 3.5.
449 </listitem>
565 </listitem>
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";
450 <listitem>
604 <listitem>
452 <literal>services.kubernetes.addons.dashboard</literal> was
606 <literal>services.kubernetes.addons.dashboard</literal> was
@@ -464,12 +618,53 @@
464 relying on the insecure behaviour before upgrading.
618 relying on the insecure behaviour before upgrading.
466 </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>).
467 <listitem>
653 <listitem>
469 <literal>openssh</literal> has been update to 8.9p1, changing
655 <literal>openssh</literal> has been update to 8.9p1, changing
470 the FIDO security key middleware interface.
656 the FIDO security key middleware interface.
472 </listitem>
658 </listitem>
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>.
473 <listitem>
668 <listitem>
475 <literal>services.k3s.enable</literal> no longer implies
670 <literal>services.k3s.enable</literal> no longer implies
@@ -502,6 +697,13 @@
503</programlisting>
698</programlisting>
504 </listitem>
699 </listitem>
702+ <literal>services.prometheus.alertManagerTimeout</literal> has
703+ been removed as it has been deprecated upstream and has no
505 <listitem>
707 <listitem>
507 The DHCP server (<literal>services.dhcpd4</literal>,
709 The DHCP server (<literal>services.dhcpd4</literal>,
@@ -535,6 +737,24 @@
537 </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>.
538 <listitem>
758 <listitem>
540 The <literal>matrix-synapse</literal> service
760 The <literal>matrix-synapse</literal> service
@@ -657,6 +877,136 @@
657 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";
660 </listitem>
1010 </listitem>
661 <listitem>
1011 <listitem>
@@ -792,6 +1142,14 @@
792 <literal>admin</literal> and <literal>password</literal>.
1142 <literal>admin</literal> and <literal>password</literal>.
794 </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>.
795 <listitem>
1153 <listitem>
797 The <literal>autorestic</literal> package has been upgraded
1155 The <literal>autorestic</literal> package has been upgraded
@@ -994,6 +1352,14 @@
994 <literal>systemd.nspawn.<name>.execConfig.PrivateUsers = false</literal>
1352 <literal>systemd.nspawn.<name>.execConfig.PrivateUsers = false</literal>
996 </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>.
997 <listitem>
1363 <listitem>
999 The Tor SOCKS proxy is now actually disabled if
1365 The Tor SOCKS proxy is now actually disabled if
@@ -1004,6 +1370,15 @@
1004 <literal>true</literal>.
1370 <literal>true</literal>.
1006 </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
1007 <listitem>
1382 <listitem>
1009 The terraform 0.12 compatibility has been removed and the
1384 The terraform 0.12 compatibility has been removed and the
@@ -1048,6 +1423,16 @@
1048 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
1423 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
1050 </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.
1051 <listitem>
1436 <listitem>
1053 <literal>pkgs.pgadmin</literal> now refers to
1438 <literal>pkgs.pgadmin</literal> now refers to
@@ -1328,6 +1713,17 @@
1328 <literal>pkgs.cosmoc</literal>.
1713 <literal>pkgs.cosmoc</literal>.
1330 </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
1331 </itemizedlist>
1727 </itemizedlist>
1332 </section>
1728 </section>
1333 <section xml:id="sec-release-22.05-notable-changes">
1729 <section xml:id="sec-release-22.05-notable-changes">
@@ -1441,6 +1837,14 @@
1441 </listitem>
1837 </listitem>
1442 </itemizedlist>
1838 </itemizedlist>
1443 </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.
1444 <listitem>
1848 <listitem>
1446 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
@@ -1589,6 +1993,29 @@
1589 configuration.
1993 configuration.
1591 </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.
1592 <listitem>
2019 <listitem>
1594 A new module was added for the Envoy reverse proxy, providing
2021 A new module was added for the Envoy reverse proxy, providing
@@ -1620,10 +2047,51 @@
1620 </listitem>
2047 </listitem>
1621 <listitem>
2048 <listitem>
1623− 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
1624 introduces some breaking changes:
2051 introduces some breaking changes:
1626 <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
1627 <listitem>
2095 <listitem>
1629 If you are relying on the SQLite images, update your
2097 If you are relying on the SQLite images, update your
@@ -1660,6 +2128,18 @@
1660 Notes for v0.8.2-alpha-1</link>
2128 Notes for v0.8.2-alpha-1</link>
1662 </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>
1663 </itemizedlist>
2143 </itemizedlist>
1664 </listitem>
2144 </listitem>
1665 </itemizedlist>
2145 </itemizedlist>
@@ -1673,6 +2153,13 @@
1673 <literal>true</literal>.
2153 <literal>true</literal>.
1675 </listitem>
2155 </listitem>
2158+ A module for declarative configuration of openconnect VPN
2159+ profiles was added under
2160+ <literal>networking.openconnect</literal>.
1676 <listitem>
2163 <listitem>
1678 The <literal>element-desktop</literal> package now has an
2165 The <literal>element-desktop</literal> package now has an
@@ -1771,6 +2258,21 @@
1771 should now be used instead.
2258 should now be used instead.
1773 </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.
1774 <listitem>
2276 <listitem>
1776 The <literal>zrepl</literal> package has been updated from
2278 The <literal>zrepl</literal> package has been updated from
@@ -1796,6 +2298,24 @@
1796 </listitem>
2298 </listitem>
1797 </itemizedlist>
2299 </itemizedlist>
1798 </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).
1799 <listitem>
2319 <listitem>
1801 Renamed option
2321 Renamed option
@@ -1866,7 +2386,10 @@
1867 <literal>services.xserver.desktopManager.xfce</literal> now
2387 <literal>services.xserver.desktopManager.xfce</literal> now
1868 includes Xfce’s screen locker,
2388 includes Xfce’s screen locker,
1869− <literal>xfce4-screensaver</literal>.
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>.
1871 </listitem>
2394 </listitem>
1872 <listitem>
2395 <listitem>
@@ -1884,6 +2407,24 @@
1884 (<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>).
1886 </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>
1887 <listitem>
2428 <listitem>
1889 The <literal>spark3</literal> package has been updated from
2430 The <literal>spark3</literal> package has been updated from
@@ -1915,6 +2456,15 @@
1915 generating host-global NNCP configuration.
2456 generating host-global NNCP configuration.
1917 </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
1918 </itemizedlist>
2468 </itemizedlist>
1919 </section>
2469 </section>
1920</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/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-2205.section.md+226−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).
@@ -27,12 +42,19 @@ In addition to numerous new and upgraded packages, this release has the followin
28- Systemd has been upgraded to the version 250.
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.
30- [`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.
32- 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.
34- 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.
36## New Services {#sec-release-22.05-new-services}
58## New Services {#sec-release-22.05-new-services}
38- [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).
@@ -41,6 +63,8 @@ In addition to numerous new and upgraded packages, this release has the followin
42- [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).
44- [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).
46- [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).
@@ -103,10 +127,14 @@ In addition to numerous new and upgraded packages, this release has the followin
104- [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).
106- [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.
108- [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).
110<!-- 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. -->
112## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
140## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
@@ -143,15 +171,71 @@ In addition to numerous new and upgraded packages, this release has the followin
143 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
171 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
144 `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".
146- `security.klogd` was removed. Logging of kernel messages is handled
187- `security.klogd` was removed. Logging of kernel messages is handled
147 by systemd since Linux 3.5.
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";
149- `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.
151- `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`).
153- `openssh` has been update to 8.9p1, changing the FIDO security key middleware interface.
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`.
155- `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`.
156 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.
157 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.
@@ -169,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.
172- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
258- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
173 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.
174 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.
@@ -178,6 +264,10 @@ In addition to numerous new and upgraded packages, this release has the followin
179- `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`.
181- 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.
182 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
183 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
@@ -272,6 +362,83 @@ In addition to numerous new and upgraded packages, this release has the followin
272 `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
273 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";
275- 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.
277- 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.
@@ -313,6 +480,10 @@ In addition to numerous new and upgraded packages, this release has the followin
314- `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`.
316- 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.
318- 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`
@@ -364,8 +535,14 @@ In addition to numerous new and upgraded packages, this release has the followin
365- `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`.
367- 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.
369- 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
370`$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).
@@ -386,6 +563,10 @@ In addition to numerous new and upgraded packages, this release has the followin
386 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
387 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.
389- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
570- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
391- `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`
@@ -463,6 +644,8 @@ In addition to numerous new and upgraded packages, this release has the followin
464- `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.
466<!-- 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. -->
468## Other Notable Changes {#sec-release-22.05-notable-changes}
651## Other Notable Changes {#sec-release-22.05-notable-changes}
@@ -504,6 +687,10 @@ In addition to numerous new and upgraded packages, this release has the followin
504 - 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
505 - 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.
507- 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
508 in Chrome and several Electron apps by setting the environment variable
695 in Chrome and several Electron apps by setting the environment variable
509 `NIXOS_OZONE_WL=1` (for example via
696 `NIXOS_OZONE_WL=1` (for example via
@@ -559,6 +746,17 @@ In addition to numerous new and upgraded packages, this release has the followin
560- 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.
562- A new module was added for the Envoy reverse proxy, providing the options `services.envoy.enable` and `services.envoy.settings`.
760- A new module was added for the Envoy reverse proxy, providing the options `services.envoy.enable` and `services.envoy.settings`.
564- 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.
@@ -567,18 +765,28 @@ In addition to numerous new and upgraded packages, this release has the followin
568- `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`.
570−- 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.
571 - 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:
572 - `docker pull oryd/kratos:{version}`
775 - `docker pull oryd/kratos:{version}`
573 - 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.
574 - For more details, see:
777 - For more details, see:
575 - [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)
576 - [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)
578- `fetchFromSourcehut` now allows fetching repositories recursively
784- `fetchFromSourcehut` now allows fetching repositories recursively
579 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
785 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
580 is set to `true`.
786 is set to `true`.
788+- A module for declarative configuration of openconnect VPN profiles was added under `networking.openconnect`.
582- 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`),
583 which allows disabling `keytar` and in turn `libsecret` usage
791 which allows disabling `keytar` and in turn `libsecret` usage
584 (which binds to native credential managers / keychain libraries).
792 (which binds to native credential managers / keychain libraries).
@@ -609,11 +817,18 @@ In addition to numerous new and upgraded packages, this release has the followin
609 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
610 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.
612- 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:
614 - 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.
615 - 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).
617- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
832- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
618 Reason is that the old name has been deprecated upstream.
833 Reason is that the old name has been deprecated upstream.
619 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.
@@ -638,12 +853,17 @@ In addition to numerous new and upgraded packages, this release has the followin
638- 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.
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.
639 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`.
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`.
641−- `services.xserver.desktopManager.xfce` now includes Xfce's screen locker, `xfce4-screensaver`.
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).
643- 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)).
645- 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.
647- 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)):
649 - 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`.
@@ -651,4 +871,8 @@ In addition to numerous new and upgraded packages, this release has the followin
652- 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.
654<!-- 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-zfs-image.nix → nixos/lib/make-multi-disk-zfs-image.nixrenamed
The content is the same.
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-types.nix+33−1
@@ -1,4 +1,4 @@
1−{ lib, systemdUtils }:
1+{ lib, systemdUtils, pkgs }:
3with systemdUtils.lib;
3with systemdUtils.lib;
4with systemdUtils.unitOptions;
4with systemdUtils.unitOptions;
@@ -34,4 +34,36 @@ rec {
35 automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
35 automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
36 initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions 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/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,9 +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; };
200− types = import ./systemd-types.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−1
@@ -14,6 +14,18 @@ in
15 options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
15 options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
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"/>
17 config = mkIf cfg.enable {
29 config = mkIf cfg.enable {
19 boot.kernelModules = [ "facetimehd" ];
31 boot.kernelModules = [ "facetimehd" ];
@@ -22,7 +34,8 @@ in
23 boot.extraModulePackages = [ kernelPackages.facetimehd ];
35 boot.extraModulePackages = [ kernelPackages.facetimehd ];
25− hardware.firmware = [ pkgs.facetimehd-firmware ];
37+ hardware.firmware = [ pkgs.facetimehd-firmware ]
38+ ++ optional cfg.withCalibration pkgs.facetimehd-calibration;
27 # unload module during suspend/hibernate as it crashes the whole system
40 # unload module during suspend/hibernate as it crashes the whole system
28 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/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/module-list.nix+15−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
@@ -852,6 +858,7 @@
852 ./services/networking/ofono.nix
858 ./services/networking/ofono.nix
853 ./services/networking/oidentd.nix
859 ./services/networking/oidentd.nix
854 ./services/networking/onedrive.nix
860 ./services/networking/onedrive.nix
861+ ./services/networking/openconnect.nix
855 ./services/networking/openvpn.nix
862 ./services/networking/openvpn.nix
856 ./services/networking/ostinato.nix
863 ./services/networking/ostinato.nix
857 ./services/networking/owamp.nix
864 ./services/networking/owamp.nix
@@ -1053,6 +1060,7 @@
1053 ./services/web-apps/netbox.nix
1060 ./services/web-apps/netbox.nix
1054 ./services/web-apps/nextcloud.nix
1061 ./services/web-apps/nextcloud.nix
1055 ./services/web-apps/nexus.nix
1062 ./services/web-apps/nexus.nix
1063+ ./services/web-apps/nifi.nix
1056 ./services/web-apps/node-red.nix
1064 ./services/web-apps/node-red.nix
1057 ./services/web-apps/pict-rs.nix
1065 ./services/web-apps/pict-rs.nix
1058 ./services/web-apps/peertube.nix
1066 ./services/web-apps/peertube.nix
@@ -1177,12 +1185,14 @@
1177 ./system/boot/stage-2.nix
1185 ./system/boot/stage-2.nix
1178 ./system/boot/systemd.nix
1186 ./system/boot/systemd.nix
1179 ./system/boot/systemd/coredump.nix
1187 ./system/boot/systemd/coredump.nix
1188+ ./system/boot/systemd/initrd-secrets.nix
1189+ ./system/boot/systemd/initrd.nix
1180 ./system/boot/systemd/journald.nix
1190 ./system/boot/systemd/journald.nix
1181 ./system/boot/systemd/logind.nix
1191 ./system/boot/systemd/logind.nix
1182 ./system/boot/systemd/nspawn.nix
1192 ./system/boot/systemd/nspawn.nix
1193+ ./system/boot/systemd/shutdown.nix
1183 ./system/boot/systemd/tmpfiles.nix
1194 ./system/boot/systemd/tmpfiles.nix
1184 ./system/boot/systemd/user.nix
1195 ./system/boot/systemd/user.nix
1185− ./system/boot/systemd/initrd.nix
1186 ./system/boot/timesyncd.nix
1196 ./system/boot/timesyncd.nix
1187 ./system/boot/tmp.nix
1197 ./system/boot/tmp.nix
1188 ./system/etc/etc-activation.nix
1198 ./system/etc/etc-activation.nix
@@ -1236,6 +1246,7 @@
1236 ./virtualisation/amazon-options.nix
1246 ./virtualisation/amazon-options.nix
1237 ./virtualisation/hyperv-guest.nix
1247 ./virtualisation/hyperv-guest.nix
1238 ./virtualisation/kvmgt.nix
1248 ./virtualisation/kvmgt.nix
1249+ ./virtualisation/openstack-options.nix
1239 ./virtualisation/openvswitch.nix
1250 ./virtualisation/openvswitch.nix
1240 ./virtualisation/parallels-guest.nix
1251 ./virtualisation/parallels-guest.nix
1241 ./virtualisation/podman/default.nix
1252 ./virtualisation/podman/default.nix
@@ -1245,6 +1256,7 @@
1245 ./virtualisation/virtualbox-guest.nix
1256 ./virtualisation/virtualbox-guest.nix
1246 ./virtualisation/virtualbox-host.nix
1257 ./virtualisation/virtualbox-host.nix
1247 ./virtualisation/vmware-guest.nix
1258 ./virtualisation/vmware-guest.nix
1259+ ./virtualisation/vmware-host.nix
1248 ./virtualisation/waydroid.nix
1260 ./virtualisation/waydroid.nix
1249 ./virtualisation/xen-dom0.nix
1261 ./virtualisation/xen-dom0.nix
1250 ./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/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/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+5
@@ -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.")
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/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/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/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/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/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/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+7−5
@@ -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,15 +254,15 @@ 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 ${
@@ -316,6 +315,9 @@ in
317 [ "" "%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/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/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/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−3
@@ -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.";
@@ -99,7 +105,6 @@ in
99 ristretto
105 ristretto
100 xfce4-appfinder
106 xfce4-appfinder
101 xfce4-notifyd
107 xfce4-notifyd
103 xfce4-screenshooter
108 xfce4-screenshooter
104 xfce4-session
109 xfce4-session
105 xfce4-settings
110 xfce4-settings
@@ -123,7 +128,7 @@ in
123 ] ++ optionals (!cfg.noDesktop) [
128 ] ++ optionals (!cfg.noDesktop) [
124 xfce4-panel
129 xfce4-panel
125 xfdesktop
130 xfdesktop
126− ];
131+ ] ++ optional cfg.enableScreensaver xfce4-screensaver;
128 environment.pathsToLink = [
133 environment.pathsToLink = [
129 "/share/xfce4"
134 "/share/xfce4"
@@ -169,6 +174,6 @@ in
169 xfce4-notifyd
174 xfce4-notifyd
172− security.pam.services.xfce4-screensaver.unixAuth = true;
177+ security.pam.services.xfce4-screensaver.unixAuth = cfg.enableScreensaver;
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/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+135−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" [
@@ -871,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.
874 linkOptions = commonNetworkOptions // {
942 linkOptions = commonNetworkOptions // {
875 # overwrite enable option from above
943 # overwrite enable option from above
876 enable = mkOption {
944 enable = mkOption {
@@ -1519,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;
1522 commonMatchText = def: optionalString (def.matchConfig != { }) ''
1623 commonMatchText = def: optionalString (def.matchConfig != { }) ''
1524 ${attrsToSection def.matchConfig}
1625 ${attrsToSection def.matchConfig}
@@ -1600,6 +1701,20 @@ let
1600 + 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}
1603 networkToUnit = name: def:
1718 networkToUnit = name: def:
1604 { inherit (def) enable;
1719 { inherit (def) enable;
1605 text = commonMatchText def
1720 text = commonMatchText def
@@ -1732,6 +1847,12 @@ in
1732 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.";
1735 systemd.network.units = mkOption {
1856 systemd.network.units = mkOption {
1736 description = "Definition of networkd units.";
1857 description = "Definition of networkd units.";
1737 default = {};
1858 default = {};
@@ -1823,7 +1944,9 @@ in
1823 systemd.services.systemd-networkd = {
1944 systemd.services.systemd-networkd = {
1824 wantedBy = [ "multi-user.target" ];
1945 wantedBy = [ "multi-user.target" ];
1825 aliases = [ "dbus-org.freedesktop.network1.service" ];
1946 aliases = [ "dbus-org.freedesktop.network1.service" ];
1826− restartTriggers = map (x: x.source) (attrValues unitFiles);
1947+ restartTriggers = map (x: x.source) (attrValues unitFiles) ++ [
1948+ config.environment.etc."systemd/networkd.conf".source
1829 systemd.services.systemd-networkd-wait-online = {
1952 systemd.services.systemd-networkd-wait-online = {
@@ -1846,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)}
1849 services.resolved.enable = mkDefault true;
1983 services.resolved.enable = mkDefault true;
nixos/modules/system/boot/stage-1-init.sh+1−5
@@ -318,11 +318,7 @@ checkFS() {
319 echo "checking $device..."
319 echo "checking $device..."
321− fsckFlags=
321+ fsck -V -a "$device"
322− if test "$fsType" != "btrfs"; then
325− fsck $fsckFlags "$device"
326 fsckResult=$?
322 fsckResult=$?
328 if test $(($fsckResult | 2)) = $fsckResult; then
324 if test $(($fsckResult | 2)) = $fsckResult; then
nixos/modules/system/boot/stage-1.nix+7−12
@@ -355,7 +355,7 @@ let
355 [ { object = bootStage1;
355 [ { object = bootStage1;
356 symlink = "/init";
356 symlink = "/init";
358− { object = pkgs.writeText "mdadm.conf" config.boot.initrd.mdadmConf;
358+ { object = pkgs.writeText "mdadm.conf" config.boot.initrd.services.swraid.mdadmConf;
359 symlink = "/etc/mdadm.conf";
359 symlink = "/etc/mdadm.conf";
361 { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
361 { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
@@ -420,7 +420,7 @@ let
420 ${lib.optionalString (config.boot.initrd.secrets == {})
420 ${lib.optionalString (config.boot.initrd.secrets == {})
421 "exit 0"}
421 "exit 0"}
423− 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
425 function cleanup {
425 function cleanup {
426 if [ -n "$tmp" -a -d "$tmp" ]; then
426 if [ -n "$tmp" -a -d "$tmp" ]; then
@@ -440,7 +440,7 @@ let
440 ) config.boot.initrd.secrets)
440 ) config.boot.initrd.secrets)
443− (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 @-) | \
444 ${compressorExe} ${lib.escapeShellArgs initialRamdisk.compressorArgs} >> "$1"
444 ${compressorExe} ${lib.escapeShellArgs initialRamdisk.compressorArgs} >> "$1"
@@ -505,14 +505,6 @@ in
508− boot.initrd.mdadmConf = mkOption {
512− Contents of <filename>/etc/mdadm.conf</filename> in stage 1.
516 boot.initrd.preLVMCommands = mkOption {
508 boot.initrd.preLVMCommands = mkOption {
517 default = "";
509 default = "";
518 type = types.lines;
510 type = types.lines;
@@ -736,6 +728,9 @@ in
738 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+63−45
@@ -5,28 +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.
19−# Print a greeting.
20+ # Print a greeting.
21−echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
22+ echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
25−# Normally, stage 1 mounts the root filesystem read/writable.
26+ # Normally, stage 1 mounts the root filesystem read/writable.
26−# However, in some environments, stage 2 is executed directly, and the
27+ # However, in some environments, stage 2 is executed directly, and the
27−# root is read-only. So make it writable here.
28+ # root is read-only. So make it writable here.
28−if [ -z "$container" ]; then
29+ if [ -z "$container" ]; then
29− mount -n -o remount,rw none /
30+ mount -n -o remount,rw none /
@@ -39,6 +41,12 @@ if [ ! -e /proc/1 ]; then
39 local options="$3"
41 local options="$3"
40 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
42 install -m 0755 -d "$mountPoint"
50 install -m 0755 -d "$mountPoint"
43 mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
51 mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
@@ -46,7 +54,11 @@ if [ ! -e /proc/1 ]; then
57+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" = true ]; then
58+ echo "booting system configuration ${systemConfig}"
49−echo "booting system configuration $systemConfig" > /dev/kmsg
60+ echo "booting system configuration $systemConfig" > /dev/kmsg
52# 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
@@ -68,24 +80,26 @@ if [ -n "@readOnlyStore@" ]; then
83+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
71−# Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
84+ # Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
72−if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
85+ if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
73− resolvconf -m 1000 -a host </etc/resolv.conf
86+ resolvconf -m 1000 -a host </etc/resolv.conf
77−# Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
90+ # Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
78−# Only at this point are all the necessary prerequisites ready for these commands.
91+ # Only at this point are all the necessary prerequisites ready for these commands.
79−exec {logOutFd}>&1 {logErrFd}>&2
92+ exec {logOutFd}>&1 {logErrFd}>&2
80−if test -w /dev/kmsg; then
93+ if test -w /dev/kmsg; then
81− exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
94+ exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
82− if test -n "$line"; then
95+ if test -n "$line"; then
83− echo "<7>stage-2-init: $line" > /dev/kmsg
96+ echo "<7>stage-2-init: $line" > /dev/kmsg
85− done) 2>&1
98+ done) 2>&1
87− mkdir -p /run/log
100+ mkdir -p /run/log
88− exec > >(tee -i /run/log/stage-2-init.log) 2>&1
101+ exec > >(tee -i /run/log/stage-2-init.log) 2>&1
@@ -116,11 +130,15 @@ ln -sfn "$systemConfig" /run/booted-system
116: >> /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
119−# Reset the logging file descriptors.
136+ # Reset the logging file descriptors.
120−exec 1>&$logOutFd 2>&$logErrFd
137+ exec 1>&$logOutFd 2>&$logErrFd
121−exec {logOutFd}>&- {logErrFd}>&-
138+ exec {logOutFd}>&- {logErrFd}>&-
124−# Start systemd in a clean environment.
141+ # Start systemd in a clean environment.
125−echo "starting systemd..."
142+ echo "starting systemd..."
126−exec @systemdExecutable@ "$@"
143+ exec @systemdExecutable@ "$@"
nixos/modules/system/boot/systemd.nix−8
@@ -573,14 +573,6 @@ in
574 (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services);
574 (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services);
576− # Generate timer units for all services that have a ‘startAt’ value.
577− systemd.user.timers =
578− mapAttrs (name: service:
579− { wantedBy = [ "timers.target" ];
580− timerConfig.OnCalendar = service.startAt;
582− (filterAttrs (name: service: service.startAt != []) cfg.user.services);
584 # Some overrides to upstream units.
576 # Some overrides to upstream units.
585 systemd.services."systemd-backlight@".restartIfChanged = false;
577 systemd.services."systemd-backlight@".restartIfChanged = false;
586 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.nix+108−56
@@ -34,7 +34,6 @@ let
34 "initrd-switch-root.service"
34 "initrd-switch-root.service"
35 "initrd-switch-root.target"
35 "initrd-switch-root.target"
36 "initrd.target"
36 "initrd.target"
37− "initrd-udevadm-cleanup-db.service"
38 "kexec.target"
37 "kexec.target"
39 "kmod-static-nodes.service"
38 "kmod-static-nodes.service"
40 "local-fs-pre.target"
39 "local-fs-pre.target"
@@ -66,17 +65,10 @@ let
66 "systemd-kexec.service"
65 "systemd-kexec.service"
67 "systemd-modules-load.service"
66 "systemd-modules-load.service"
68 "systemd-poweroff.service"
67 "systemd-poweroff.service"
69− "systemd-random-seed.service"
70 "systemd-reboot.service"
68 "systemd-reboot.service"
71 "systemd-sysctl.service"
69 "systemd-sysctl.service"
72 "systemd-tmpfiles-setup-dev.service"
70 "systemd-tmpfiles-setup-dev.service"
73 "systemd-tmpfiles-setup.service"
71 "systemd-tmpfiles-setup.service"
74− "systemd-udevd-control.socket"
75− "systemd-udevd-kernel.socket"
76− "systemd-udevd.service"
77− "systemd-udev-settle.service"
78− "systemd-udev-trigger.service"
79− "systemd-vconsole-setup.service"
80 "timers.target"
72 "timers.target"
81 "umount.target"
73 "umount.target"
@@ -113,6 +105,9 @@ let
113 opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs";
105 opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs";
114 in "${device} /sysroot${mountPoint} ${fsType} ${lib.concatStringsSep "," opts}") fileSystems);
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;
116 kernel-name = config.boot.kernelPackages.kernel.name or "kernel";
111 kernel-name = config.boot.kernelPackages.kernel.name or "kernel";
117 modulesTree = config.system.modulesTree.override { name = kernel-name + "-modules"; };
112 modulesTree = config.system.modulesTree.override { name = kernel-name + "-modules"; };
118 firmware = config.hardware.firmware;
113 firmware = config.hardware.firmware;
@@ -125,13 +120,16 @@ let
127 initrdBinEnv = pkgs.buildEnv {
122 initrdBinEnv = pkgs.buildEnv {
128− name = "initrd-emergency-env";
123+ name = "initrd-bin-env";
129 paths = map getBin cfg.initrdBin;
124 paths = map getBin cfg.initrdBin;
130 pathsToLink = ["/bin" "/sbin"];
125 pathsToLink = ["/bin" "/sbin"];
131 postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -s '${v}' $out/bin/'${n}'") cfg.extraBin);
126 postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -s '${v}' $out/bin/'${n}'") cfg.extraBin);
134 initialRamdisk = pkgs.makeInitrdNG {
129 initialRamdisk = pkgs.makeInitrdNG {
130+ name = "initrd-${kernel-name}";
131+ inherit (config.boot.initrd) compressor compressorArgs prepend;
135 contents = map (path: { object = path; symlink = ""; }) (subtractLists cfg.suppressedStorePaths cfg.storePaths)
133 contents = map (path: { object = path; symlink = ""; }) (subtractLists cfg.suppressedStorePaths cfg.storePaths)
136 ++ mapAttrsToList (_: v: { object = v.source; symlink = v.target; }) (filterAttrs (_: v: v.enable) cfg.contents);
134 ++ mapAttrsToList (_: v: { object = v.source; symlink = v.target; }) (filterAttrs (_: v: v.enable) cfg.contents);
@@ -160,44 +158,14 @@ in {
161 visible = false;
159 visible = false;
162 default = {};
160 default = {};
163− type = types.attrsOf (types.submodule ({ config, options, name, ... }: {
161+ type = utils.systemdUtils.types.initrdContents;
165− enable = mkEnableOption "copying of this file to initrd and symlinking it" // { default = true; };
170− Path of the symlink.
177− type = types.nullOr types.lines;
178− description = "Text of the file.";
183− description = "Path of the source file.";
188− source = mkIf (config.text != null) (
189− let name' = "initrd-" + baseNameOf name;
190− in mkDerivedConfig options.text (pkgs.writeText name')
196 storePaths = mkOption {
164 storePaths = mkOption {
197 description = ''
165 description = ''
198 Store paths to copy into the initrd as well.
166 Store paths to copy into the initrd as well.
200− type = types.listOf types.singleLineStr;
168+ type = with types; listOf (oneOf [ singleLineStr package ]);
201 default = [];
169 default = [];
@@ -355,8 +323,9 @@ in {
355 boot.initrd.availableKernelModules = [ "autofs4" ]; # systemd needs this for some features
323 boot.initrd.availableKernelModules = [ "autofs4" ]; # systemd needs this for some features
357 boot.initrd.systemd = {
325 boot.initrd.systemd = {
358− initrdBin = [pkgs.bash pkgs.coreutils pkgs.kmod cfg.package] ++ config.system.fsPackages;
326+ initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package] ++ config.system.fsPackages;
359 extraBin = {
327 extraBin = {
328+ less = "${pkgs.less}/bin/less";
360 mount = "${cfg.package.util-linux}/bin/mount";
329 mount = "${cfg.package.util-linux}/bin/mount";
361 umount = "${cfg.package.util-linux}/bin/umount";
330 umount = "${cfg.package.util-linux}/bin/umount";
@@ -367,12 +336,13 @@ in {
368 "/etc/systemd/system.conf".text = ''
337 "/etc/systemd/system.conf".text = ''
369 [Manager]
338 [Manager]
370− DefaultEnvironment=PATH=/bin:/sbin
339+ DefaultEnvironment=PATH=/bin:/sbin ${optionalString (isBool cfg.emergencyAccess && cfg.emergencyAccess) "SYSTEMD_SULOGIN_FORCE=1"}
373 "/etc/fstab".source = fstab;
342 "/etc/fstab".source = fstab;
375 "/lib/modules".source = "${modulesClosure}/lib/modules";
344 "/lib/modules".source = "${modulesClosure}/lib/modules";
345+ "/lib/firmware".source = "${modulesClosure}/lib/firmware";
377 "/etc/modules-load.d/nixos.conf".text = concatStringsSep "\n" config.boot.initrd.kernelModules;
347 "/etc/modules-load.d/nixos.conf".text = concatStringsSep "\n" config.boot.initrd.kernelModules;
@@ -384,25 +354,32 @@ in {
385 "/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
355 "/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
386 "/etc/modprobe.d/systemd.conf".source = "${cfg.package}/lib/modprobe.d/systemd.conf";
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;
389 storePaths = [
364 storePaths = [
390 # systemd tooling
365 # systemd tooling
391 "${cfg.package}/lib/systemd/systemd-fsck"
366 "${cfg.package}/lib/systemd/systemd-fsck"
392− "${cfg.package}/lib/systemd/systemd-growfs"
367+ (lib.mkIf needGrowfs "${cfg.package}/lib/systemd/systemd-growfs")
393 "${cfg.package}/lib/systemd/systemd-hibernate-resume"
368 "${cfg.package}/lib/systemd/systemd-hibernate-resume"
394 "${cfg.package}/lib/systemd/systemd-journald"
369 "${cfg.package}/lib/systemd/systemd-journald"
395− "${cfg.package}/lib/systemd/systemd-makefs"
370+ (lib.mkIf needMakefs "${cfg.package}/lib/systemd/systemd-makefs")
396 "${cfg.package}/lib/systemd/systemd-modules-load"
371 "${cfg.package}/lib/systemd/systemd-modules-load"
397 "${cfg.package}/lib/systemd/systemd-remount-fs"
372 "${cfg.package}/lib/systemd/systemd-remount-fs"
373+ "${cfg.package}/lib/systemd/systemd-shutdown"
398 "${cfg.package}/lib/systemd/systemd-sulogin-shell"
374 "${cfg.package}/lib/systemd/systemd-sulogin-shell"
399 "${cfg.package}/lib/systemd/systemd-sysctl"
375 "${cfg.package}/lib/systemd/systemd-sysctl"
400− "${cfg.package}/lib/systemd/systemd-udevd"
401− "${cfg.package}/lib/systemd/systemd-vconsole-setup"
403− # additional systemd directories
377+ # generators
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"
404− "${cfg.package}/lib/systemd/system-generators"
381+ "${cfg.package}/lib/systemd/system-generators/systemd-hibernate-resume-generator"
405− "${cfg.package}/lib/udev"
382+ "${cfg.package}/lib/systemd/system-generators/systemd-run-generator"
407 # utilities needed by systemd
384 # utilities needed by systemd
408 "${cfg.package.util-linux}/bin/mount"
385 "${cfg.package.util-linux}/bin/mount"
@@ -410,7 +387,7 @@ in {
410 "${cfg.package.util-linux}/bin/sulogin"
387 "${cfg.package.util-linux}/bin/sulogin"
412 # so NSS can look up usernames
389 # so NSS can look up usernames
413− "${pkgs.glibc}/lib/libnss_files.so"
390+ "${pkgs.glibc}/lib/libnss_files.so.2"
414 ] ++ jobScripts;
391 ] ++ jobScripts;
416 targets.initrd.aliases = ["default.target"];
393 targets.initrd.aliases = ["default.target"];
@@ -428,9 +405,6 @@ in {
428 (v: let n = escapeSystemdPath v.where;
405 (v: let n = escapeSystemdPath v.where;
429 in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
406 in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
431− services.emergency = mkIf (isBool cfg.emergencyAccess && cfg.emergencyAccess) {
432− environment.SYSTEMD_SULOGIN_FORCE = "1";
434 # The unit in /run/systemd/generator shadows the unit in
408 # The unit in /run/systemd/generator shadows the unit in
435 # /etc/systemd/system, but will still apply drop-ins from
409 # /etc/systemd/system, but will still apply drop-ins from
436 # /etc/systemd/system/foo.service.d/
410 # /etc/systemd/system/foo.service.d/
@@ -443,8 +417,86 @@ in {
443 mkdir -p $out/etc/systemd/system
417 mkdir -p $out/etc/systemd/system
444 touch $out/etc/systemd/system/systemd-{makefs,growfs}@.service
418 touch $out/etc/systemd/system/systemd-{makefs,growfs}@.service
446− services."systemd-makefs@".unitConfig.IgnoreOnIsolate = true;
420+ services."systemd-makefs@" = lib.mkIf needMakefs { unitConfig.IgnoreOnIsolate = true; };
447− services."systemd-growfs@".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/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/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/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+5
@@ -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;
nixos/modules/tasks/lvm.nix+27−6
@@ -21,6 +21,10 @@ in {
21 boot.vdo.enable = mkEnableOption "support for booting from VDOLVs";
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") // {
24 config = mkMerge [
28 config = mkMerge [
26 # minimal configuration file to make lvmconfig/lvm2-activation-generator happy
30 # minimal configuration file to make lvmconfig/lvm2-activation-generator happy
@@ -31,8 +35,13 @@ in {
31 environment.systemPackages = [ cfg.package ];
35 environment.systemPackages = [ cfg.package ];
32 systemd.packages = [ cfg.package ];
36 systemd.packages = [ cfg.package ];
34− # TODO: update once https://github.com/NixOS/nixpkgs/pull/93006 was merged
35 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 ];
37 (mkIf cfg.dmeventd.enable {
46 (mkIf cfg.dmeventd.enable {
38 systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
47 systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
@@ -47,13 +56,15 @@ in {
47 boot.initrd = {
56 boot.initrd = {
48 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 ];
50− extraUtilsCommands = ''
61+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
51 for BIN in ${pkgs.thin-provisioning-tools}/bin/*; do
62 for BIN in ${pkgs.thin-provisioning-tools}/bin/*; do
52 copy_bin_and_libs $BIN
63 copy_bin_and_libs $BIN
56− extraUtilsCommandsTest = ''
67+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable) ''
57 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
58 $out/bin/$(basename $BIN) --help > /dev/null
69 $out/bin/$(basename $BIN) --help > /dev/null
@@ -71,13 +82,15 @@ in {
71 initrd = {
82 initrd = {
72 kernelModules = [ "kvdo" ];
83 kernelModules = [ "kvdo" ];
85+ systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ pkgs.vdo ];
74− extraUtilsCommands = ''
87+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable)''
75 ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
88 ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
76 copy_bin_and_libs ${pkgs.vdo}/bin/$BIN
89 copy_bin_and_libs ${pkgs.vdo}/bin/$BIN
80− extraUtilsCommandsTest = ''
93+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable)''
81 ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
94 ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
82 $out/bin/$(basename $BIN) --help > /dev/null
95 $out/bin/$(basename $BIN) --help > /dev/null
@@ -91,7 +104,15 @@ in {
91 environment.systemPackages = [ pkgs.vdo ];
104 environment.systemPackages = [ pkgs.vdo ];
93 (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
106 (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
94− 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) ''
95 mkdir -p /etc/lvm
116 mkdir -p /etc/lvm
96 cat << EOF >> /etc/lvm/lvm.conf
117 cat << EOF >> /etc/lvm/lvm.conf
97 ${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/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+14−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 \${NIXPKGS_QEMU_KERNEL_${config.system.name}:-${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"''
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+18−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 {};
@@ -195,8 +196,12 @@ in
195 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; };
196 hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
197 hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
197 haka = handleTest ./haka.nix {};
198 haka = handleTest ./haka.nix {};
199+ haste-server = handleTest ./haste-server.nix {};
198 haproxy = handleTest ./haproxy.nix {};
200 haproxy = handleTest ./haproxy.nix {};
199 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; };
200 hedgedoc = handleTest ./hedgedoc.nix {};
205 hedgedoc = handleTest ./hedgedoc.nix {};
201 herbstluftwm = handleTest ./herbstluftwm.nix {};
206 herbstluftwm = handleTest ./herbstluftwm.nix {};
202 installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
207 installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
@@ -207,6 +212,7 @@ in
207 # hibernation. This test happens to work on x86_64-linux but
212 # hibernation. This test happens to work on x86_64-linux but
208 # not on other platforms.
213 # not on other platforms.
209 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; };
210 hitch = handleTest ./hitch {};
216 hitch = handleTest ./hitch {};
211 hledger-web = handleTest ./hledger-web.nix {};
217 hledger-web = handleTest ./hledger-web.nix {};
212 hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
218 hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
@@ -229,6 +235,7 @@ in
229 input-remapper = handleTest ./input-remapper.nix {};
235 input-remapper = handleTest ./input-remapper.nix {};
230 inspircd = handleTest ./inspircd.nix {};
236 inspircd = handleTest ./inspircd.nix {};
231 installer = handleTest ./installer.nix {};
237 installer = handleTest ./installer.nix {};
238+ installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
232 invoiceplane = handleTest ./invoiceplane.nix {};
239 invoiceplane = handleTest ./invoiceplane.nix {};
233 iodine = handleTest ./iodine.nix {};
240 iodine = handleTest ./iodine.nix {};
234 ipfs = handleTest ./ipfs.nix {};
241 ipfs = handleTest ./ipfs.nix {};
@@ -277,7 +284,6 @@ in
277 loki = handleTest ./loki.nix {};
284 loki = handleTest ./loki.nix {};
278 lvm2 = handleTest ./lvm2 {};
285 lvm2 = handleTest ./lvm2 {};
279 lxd = handleTest ./lxd.nix {};
286 lxd = handleTest ./lxd.nix {};
280− lxd-image = handleTest ./lxd-image.nix {};
281 lxd-nftables = handleTest ./lxd-nftables.nix {};
287 lxd-nftables = handleTest ./lxd-nftables.nix {};
282 lxd-image-server = handleTest ./lxd-image-server.nix {};
288 lxd-image-server = handleTest ./lxd-image-server.nix {};
283 #logstash = handleTest ./logstash.nix {};
289 #logstash = handleTest ./logstash.nix {};
@@ -362,8 +368,9 @@ in
362 nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
368 nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
363 nginx-sso = handleTest ./nginx-sso.nix {};
369 nginx-sso = handleTest ./nginx-sso.nix {};
364 nginx-variants = handleTest ./nginx-variants.nix {};
370 nginx-variants = handleTest ./nginx-variants.nix {};
371+ nifi = handleTestOn ["x86_64-linux"] ./web-apps/nifi.nix {};
365 nitter = handleTest ./nitter.nix {};
372 nitter = handleTest ./nitter.nix {};
366− nix-ld = handleTest ./nix-ld {};
373+ nix-ld = handleTest ./nix-ld.nix {};
367 nix-serve = handleTest ./nix-serve.nix {};
374 nix-serve = handleTest ./nix-serve.nix {};
368 nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
375 nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
369 nixops = handleTest ./nixops/default.nix {};
376 nixops = handleTest ./nixops/default.nix {};
@@ -398,9 +405,10 @@ in
398 pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
405 pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
399 pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
406 pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
400 pam-u2f = handleTest ./pam/pam-u2f.nix {};
407 pam-u2f = handleTest ./pam/pam-u2f.nix {};
408+ pam-ussh = handleTest ./pam/pam-ussh.nix {};
401 pantalaimon = handleTest ./matrix/pantalaimon.nix {};
409 pantalaimon = handleTest ./matrix/pantalaimon.nix {};
402 pantheon = handleTest ./pantheon.nix {};
410 pantheon = handleTest ./pantheon.nix {};
403− paperless-ng = handleTest ./paperless-ng.nix {};
411+ paperless = handleTest ./paperless.nix {};
404 parsedmarc = handleTest ./parsedmarc {};
412 parsedmarc = handleTest ./parsedmarc {};
405 pdns-recursor = handleTest ./pdns-recursor.nix {};
413 pdns-recursor = handleTest ./pdns-recursor.nix {};
406 peerflix = handleTest ./peerflix.nix {};
414 peerflix = handleTest ./peerflix.nix {};
@@ -516,7 +524,12 @@ in
516 systemd-confinement = handleTest ./systemd-confinement.nix {};
524 systemd-confinement = handleTest ./systemd-confinement.nix {};
517 systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
525 systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
518 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; };
519 systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
531 systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
532+ systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {};
520 systemd-journal = handleTest ./systemd-journal.nix {};
533 systemd-journal = handleTest ./systemd-journal.nix {};
521 systemd-machinectl = handleTest ./systemd-machinectl.nix {};
534 systemd-machinectl = handleTest ./systemd-machinectl.nix {};
522 systemd-networkd = handleTest ./systemd-networkd.nix {};
535 systemd-networkd = handleTest ./systemd-networkd.nix {};
@@ -525,6 +538,7 @@ in
525 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 {};
526 systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
539 systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
527 systemd-nspawn = handleTest ./systemd-nspawn.nix {};
540 systemd-nspawn = handleTest ./systemd-nspawn.nix {};
541+ systemd-shutdown = handleTest ./systemd-shutdown.nix {};
528 systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
542 systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
529 systemd-misc = handleTest ./systemd-misc.nix {};
543 systemd-misc = handleTest ./systemd-misc.nix {};
530 taskserver = handleTest ./taskserver.nix {};
544 taskserver = handleTest ./taskserver.nix {};
@@ -585,6 +599,7 @@ in
585 xautolock = handleTest ./xautolock.nix {};
599 xautolock = handleTest ./xautolock.nix {};
586 xfce = handleTest ./xfce.nix {};
600 xfce = handleTest ./xfce.nix {};
587 xmonad = handleTest ./xmonad.nix {};
601 xmonad = handleTest ./xmonad.nix {};
602+ xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
588 xrdp = handleTest ./xrdp.nix {};
603 xrdp = handleTest ./xrdp.nix {};
589 xss-lock = handleTest ./xss-lock.nix {};
604 xss-lock = handleTest ./xss-lock.nix {};
590 xterm = handleTest ./xterm.nix {};
605 xterm = handleTest ./xterm.nix {};
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 ];
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/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/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+6
@@ -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;
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+14−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;
@@ -313,6 +325,7 @@ let
314 docbook_xsl_ns
326 docbook_xsl_ns
316 libxml2.bin
329 libxml2.bin
317 libxslt.bin
330 libxslt.bin
318 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+13−9
@@ -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'"
@@ -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.nix+19−1
@@ -11,6 +11,24 @@ let
11 thinpool = { test = callTest ./thinpool.nix; kernelFilter = lib.id; };
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
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"); };
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");
16lib.listToAttrs (
34lib.listToAttrs (
@@ -20,7 +38,7 @@ lib.listToAttrs (
20 v' = lib.replaceStrings [ "." ] [ "_" ] version;
38 v' = lib.replaceStrings [ "." ] [ "_" ] version;
22 lib.flip lib.mapAttrsToList tests (name: t:
40 lib.flip lib.mapAttrsToList tests (name: t:
23− lib.nameValuePair "lvm-${name}-linux-${v'}" (lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (t.test { kernelPackages = pkgs."linuxPackages_${v'}"; }))
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/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/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−48
@@ -1,53 +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; [
53 name = "pgadmin4";
27 name = "pgadmin4";
@@ -55,12 +29,27 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
56 nodes.machine = { pkgs, ... }: {
30 nodes.machine = { pkgs, ... }: {
57 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;
58 environment.systemPackages = with pkgs; [
39 environment.systemPackages = with pkgs; [
60 postgresql
41 postgresql
61− python-with-needed-packages
62 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
65 services.postgresql = {
54 services.postgresql = {
66 enable = true;
55 enable = true;
@@ -121,7 +110,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
121 with subtest("run browser test"):
110 with subtest("run browser test"):
122 machine.succeed(
111 machine.succeed(
123 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
112 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
124− && ${python-with-needed-packages.interpreter} regression/runtests.py --pkg browser --exclude \
113+ && python regression/runtests.py --pkg browser --exclude \
125 browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login'
114 browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login'
@@ -131,13 +120,13 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
131 machine.succeed(
120 machine.succeed(
132 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
121 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
133 && export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [];}} \
122 && export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [];}} \
134− && ${python-with-needed-packages.interpreter} regression/runtests.py --pkg feature_tests'
123+ && python regression/runtests.py --pkg feature_tests'
137 with subtest("run resql test"):
126 with subtest("run resql test"):
138 machine.succeed(
127 machine.succeed(
139 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
128 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
140− && ${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.nix+24−7
@@ -1,7 +1,7 @@
1import ./make-test-python.nix ({ lib, pkgs, ... }: {
1import ./make-test-python.nix ({ lib, pkgs, ... }: {
2 name = "systemd-initrd-simple";
2 name = "systemd-initrd-simple";
4− machine = { pkgs, ... }: {
4+ nodes.machine = { pkgs, ... }: {
5 boot.initrd.systemd = {
5 boot.initrd.systemd = {
6 enable = true;
6 enable = true;
7 emergencyAccess = true;
7 emergencyAccess = true;
@@ -14,14 +14,31 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: {
14 testScript = ''
14 testScript = ''
15 import subprocess
15 import subprocess
17− oldAvail = machine.succeed("df --output=avail / | sed 1d")
17+ with subtest("handover to stage-2 systemd works"):
18− machine.shutdown()
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
20− subprocess.check_call(["qemu-img", "resize", "vm-state-machine/machine.qcow2", "+1G"])
22− machine.start()
33+ with subtest("growfs works"):
23− newAvail = machine.succeed("df --output=avail / | sed 1d")
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")
25− assert int(oldAvail) < int(newAvail), "File system did not grow"
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/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)
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/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.2";
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-cpEV0EWW9vd2ZE+RaqN9fhyy7axgPlx4PmlOeX3TSfY=";
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/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/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/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/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/jamesdsp/default.nix+40−5
@@ -2,18 +2,31 @@
2, mkDerivation
2, mkDerivation
3, fetchFromGitHub
3, fetchFromGitHub
7, makeDesktopItem
12, makeDesktopItem
8, pkg-config
13, pkg-config
9, libarchive
14, libarchive
10, fetchpatch
15, fetchpatch
18+, usePulseaudio ? false
21+assert lib.asserts.assertMsg (usePipewire != usePulseaudio) "You need to enable one and only one of pulseaudio or pipewire support";
24+ pluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ]);
13−mkDerivation rec{
26+ mkDerivation rec {
14 pname = "jamesdsp";
27 pname = "jamesdsp";
15 version = "2.3";
28 version = "2.3";
16− src = fetchFromGitHub rec{
29+ src = fetchFromGitHub rec {
17 owner = "Audio4Linux";
30 owner = "Audio4Linux";
18 repo = "JDSP4Linux";
31 repo = "JDSP4Linux";
19 fetchSubmodules = true;
32 fetchSubmodules = true;
@@ -27,15 +40,37 @@ mkDerivation rec{
27 url = "https://github.com/Audio4Linux/JDSP4Linux/commit/003c9e9fc426f83e269aed6e05be3ed55273931a.patch";
40 url = "https://github.com/Audio4Linux/JDSP4Linux/commit/003c9e9fc426f83e269aed6e05be3ed55273931a.patch";
28 hash = "sha256-crll/a7C9pUq9eL5diq8/YgC5bNC6SrdijZEBxZpJ8E=";
41 hash = "sha256-crll/a7C9pUq9eL5diq8/YgC5bNC6SrdijZEBxZpJ8E=";
43+ # compatibility fix for PipeWire 0.3.44+, remove on version bump
45+ url = "https://github.com/Audio4Linux/JDSP4Linux/commit/e04c55735cc20fc3c3ce042c5681ec80f7df3c96.patch";
46+ hash = "sha256-o6AUtQzugykALSdkM3i3lYqRmzJX3FzmALSi0TrWuRA=";
50+ nativeBuildInputs = [
32− nativeBuildInputs = [ qmake pkg-config ];
33 buildInputs = [
57 buildInputs = [
35 libarchive
59 libarchive
36− pipewire
62+ ] ++ lib.optional usePipewire pipewire
63+ ++ lib.optionals usePulseaudio [
65+ gst_all_1.gst-plugins-base
66+ gst_all_1.gst-plugins-good
70+ qtWrapperArgs = lib.optionals usePulseaudio [ "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${pluginPath}" ];
72+ qmakeFlags = lib.optionals usePulseaudio [ "CONFIG+=USE_PULSEAUDIO" ];
39 desktopItems = [
74 desktopItems = [
40 (makeDesktopItem {
75 (makeDesktopItem {
41 name = "jamesdsp";
76 name = "jamesdsp";
@@ -54,7 +89,7 @@ mkDerivation rec{
54 description = "An audio effect processor for PipeWire clients";
89 description = "An audio effect processor for PipeWire clients";
55 homepage = "https://github.com/Audio4Linux/JDSP4Linux";
90 homepage = "https://github.com/Audio4Linux/JDSP4Linux";
56 license = licenses.gpl3Only;
91 license = licenses.gpl3Only;
57− maintainers = with maintainers;[ pasqui23 ];
92+ maintainers = with maintainers; [ pasqui23 rewine ];
58 platforms = platforms.linux;
93 platforms = platforms.linux;
pkgs/applications/audio/jmusicbot/default.nix+2−2
@@ -2,11 +2,11 @@
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "JMusicBot";
4 pname = "JMusicBot";
5− version = "0.3.6";
5+ version = "0.3.8";
7 src = fetchurl {
7 src = fetchurl {
8 url = "https://github.com/jagrosh/MusicBot/releases/download/${version}/JMusicBot-${version}.jar";
8 url = "https://github.com/jagrosh/MusicBot/releases/download/${version}/JMusicBot-${version}.jar";
9− sha256 = "sha256-Hc3dsOADC+jVZScY19OYDkHimntMjdw/BoB3EUS/d0k=";
9+ sha256 = "sha256-wzmrh9moY6oo3RqOy9Zl1X70BZlvbJkQmz8BaBIFtIM=";
12 dontUnpack = true;
12 dontUnpack = true;
pkgs/applications/audio/libopenmpt/default.nixdeleted−42
@@ -1,42 +0,0 @@
1−{ config, lib, stdenv, fetchurl, fetchpatch, zlib, pkg-config, mpg123, libogg, libvorbis, portaudio, libsndfile, flac
2−, usePulseAudio ? config.pulseaudio or stdenv.isLinux, libpulseaudio }:
4−stdenv.mkDerivation rec {
8− outputs = [ "out" "lib" "dev" ];
11− url = "https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-${version}+release.autotools.tar.gz";
12− sha256 = "1c54lldr2imjzhlhq5lvwhj7d5794xm97cby9pznr5wdjjay0sa4";
16− # Fix pending upstream inclusion for gcc-12 include headers:
17− # https://github.com/OpenMPT/openmpt/pull/8
19− name = "gcc-12.patch";
20− url = "https://github.com/OpenMPT/openmpt/commit/6e7a43190ef2f9ba0b3efc19b9527261b69ec8f7.patch";
21− sha256 = "081m1rf09bbrlg52aihaajmld5dcnwbp6y7zpyik92mm332r330h";
25− enableParallelBuilding = true;
27− nativeBuildInputs = [ pkg-config ];
28− buildInputs = [ zlib mpg123 libogg libvorbis portaudio libsndfile flac ]
29− ++ lib.optional usePulseAudio libpulseaudio;
31− configureFlags = lib.optional (!usePulseAudio) "--without-pulseaudio";
36− description = "A cross-platform command-line based module file player";
37− homepage = "https://lib.openmpt.org/libopenmpt/";
38− license = licenses.bsd3;
39− maintainers = with maintainers; [ OPNA2608 ];
40− platforms = platforms.unix;
pkgs/applications/audio/lollypop/default.nix+2−2
@@ -25,7 +25,7 @@
26python3.pkgs.buildPythonApplication rec {
26python3.pkgs.buildPythonApplication rec {
27 pname = "lollypop";
27 pname = "lollypop";
28− version = "1.4.26";
28+ version = "1.4.31";
30 format = "other";
30 format = "other";
31 doCheck = false;
31 doCheck = false;
@@ -34,7 +34,7 @@ python3.pkgs.buildPythonApplication rec {
34 url = "https://gitlab.gnome.org/World/lollypop";
34 url = "https://gitlab.gnome.org/World/lollypop";
35 rev = "refs/tags/${version}";
35 rev = "refs/tags/${version}";
36 fetchSubmodules = true;
36 fetchSubmodules = true;
37− sha256 = "sha256-Q/z9oET06DimMRZl03TgjEeheoVHtIkH+Z69qWZetcI=";
37+ sha256 = "sha256-kWqTDhk7QDmN0yr6x8ER5oHkUAkP3i5yOabnNXSHSqA=";
40 nativeBuildInputs = [
40 nativeBuildInputs = [
pkgs/applications/audio/losslessaudiochecker/default.nix+1−1
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
23 description = "Utility to check whether audio is truly lossless or not";
23 description = "Utility to check whether audio is truly lossless or not";
24 homepage = "https://losslessaudiochecker.com";
24 homepage = "https://losslessaudiochecker.com";
25 license = lib.licenses.unfree;
25 license = lib.licenses.unfree;
26− platforms = lib.platforms.x86_64;
26+ platforms = [ "x86_64-linux" ];
27 maintainers = with lib.maintainers; [ p-h ];
27 maintainers = with lib.maintainers; [ p-h ];
pkgs/applications/audio/lyrebird/default.nix+1−1
@@ -42,7 +42,7 @@ python3Packages.buildPythonApplication rec {
42 makeWrapperArgs = [
42 makeWrapperArgs = [
43 "--prefix 'PATH' ':' '${lib.makeBinPath [ sox pulseaudio ]}'"
43 "--prefix 'PATH' ':' '${lib.makeBinPath [ sox pulseaudio ]}'"
44 "--prefix 'PYTHONPATH' ':' '${placeholder "out"}/share/lyrebird'"
44 "--prefix 'PYTHONPATH' ':' '${placeholder "out"}/share/lyrebird'"
45− "--run 'cd ${placeholder "out"}/share/lyrebird'"
45+ "--chdir '${placeholder "out"}/share/lyrebird'"
46 ''"''${gappsWrapperArgs[@]}"''
46 ''"''${gappsWrapperArgs[@]}"''
pkgs/applications/audio/moc/default.nix+5−3
@@ -1,7 +1,8 @@
1{ lib, stdenv, fetchurl, pkg-config
1{ lib, stdenv, fetchurl, pkg-config
2, ncurses, db , popt, libtool
2, ncurses, db , popt, libtool
3+, libiconv, CoreServices
3# Sound sub-systems
4# Sound sub-systems
4−, alsaSupport ? true, alsa-lib
5+, alsaSupport ? (!stdenv.isDarwin), alsa-lib
5, pulseSupport ? true, libpulseaudio, autoreconfHook
6, pulseSupport ? true, libpulseaudio, autoreconfHook
6, jackSupport ? true, libjack2
7, jackSupport ? true, libjack2
7, ossSupport ? true
8, ossSupport ? true
@@ -64,7 +65,8 @@ in stdenv.mkDerivation rec {
64 ++ opt wavpackSupport wavpack
65 ++ opt wavpackSupport wavpack
66 ++ opt curlSupport curl
67 ++ opt curlSupport curl
67− ++ opt samplerateSupport libsamplerate;
68+ ++ opt samplerateSupport libsamplerate
69+ ++ lib.optionals stdenv.isDarwin [ libiconv CoreServices ];
69 configureFlags = [
71 configureFlags = [
70 # Sound sub-systems
72 # Sound sub-systems
@@ -97,6 +99,6 @@ in stdenv.mkDerivation rec {
97 homepage = "http://moc.daper.net/";
99 homepage = "http://moc.daper.net/";
98 license = licenses.gpl2;
100 license = licenses.gpl2;
99 maintainers = with maintainers; [ aethelz pSub jagajaga ];
101 maintainers = with maintainers; [ aethelz pSub jagajaga ];
100− platforms = platforms.linux;
102+ platforms = platforms.unix;
pkgs/applications/audio/mopidy/mopidy.nix+3−3
@@ -4,13 +4,13 @@
5pythonPackages.buildPythonApplication rec {
5pythonPackages.buildPythonApplication rec {
6 pname = "mopidy";
6 pname = "mopidy";
7− version = "3.2.0";
7+ version = "3.3.0";
9 src = fetchFromGitHub {
9 src = fetchFromGitHub {
10 owner = "mopidy";
10 owner = "mopidy";
11 repo = "mopidy";
11 repo = "mopidy";
12− rev = "v${version}";
12+ rev = "refs/tags/v${version}";
13− sha256 = "1l1rya48ykiq156spm8pfsm6li8apz66ppz7gs4s91fv7g7l5x2f";
13+ sha256 = "sha256-F0fIl9DrludZZdzsrl/xsp7TLMgTPbVGtGvMHyD52Yw=";
16 nativeBuildInputs = [ wrapGAppsHook ];
16 nativeBuildInputs = [ wrapGAppsHook ];
pkgs/applications/audio/musikcube/default.nix+5−3
@@ -6,6 +6,7 @@
6, fetchFromGitHub
6, fetchFromGitHub
7, fetchpatch
7, fetchpatch
11, libmicrohttpd
12, libmicrohttpd
@@ -20,17 +21,17 @@
21stdenv.mkDerivation rec {
22stdenv.mkDerivation rec {
22 pname = "musikcube";
23 pname = "musikcube";
23− version = "0.96.10";
24+ version = "0.97.0";
25 src = fetchFromGitHub {
26 src = fetchFromGitHub {
26 owner = "clangen";
27 owner = "clangen";
27 repo = pname;
28 repo = pname;
28 rev = version;
29 rev = version;
29− sha256 = "sha256-Aa52pRGq99Pt++aEVZdmVNhhQuBajgfZp39L1AfKvho=";
30+ sha256 = "sha256-W9Ng1kqai5qhaDs5KWg/1sOTIAalBXLng1MG8sl/ZOg=";
32 patches = [
33 patches = [
33− # Fix pending upstream inclusion for ncuurses-6.3 support:
34+ # Fix pending upstream inclusion for ncurses-6.3 support:
34 # https://github.com/clangen/musikcube/pull/474
35 # https://github.com/clangen/musikcube/pull/474
35 (fetchpatch {
36 (fetchpatch {
36 name = "ncurses-6.3.patch";
37 name = "ncurses-6.3.patch";
@@ -48,6 +49,7 @@ stdenv.mkDerivation rec {
53 libmicrohttpd
55 libmicrohttpd
pkgs/applications/audio/ncspot/default.nix+3−7
@@ -7,20 +7,16 @@
8rustPlatform.buildRustPackage rec {
8rustPlatform.buildRustPackage rec {
9 pname = "ncspot";
9 pname = "ncspot";
10− version = "0.9.5";
10+ version = "0.9.8";
12 src = fetchFromGitHub {
12 src = fetchFromGitHub {
13 owner = "hrkfdn";
13 owner = "hrkfdn";
14 repo = "ncspot";
14 repo = "ncspot";
15 rev = "v${version}";
15 rev = "v${version}";
16− sha256 = "sha256-HnP0dXKkMssDAhrsA99bTCVGdov9t5+1y8fJ+BWTM80=";
16+ sha256 = "sha256-lrEIFPi55aP9utAaMIFtqocpkbDXRJqS/jlGUtE26kE=";
19− # Upstream now only supports rust 1.58+, but this version is not yet available in nixpkgs.
19+ cargoSha256 = "sha256-vkNGQ3SXKJpUqDZ4TfmlSleAPAOQnsEncE8475NLJ4M=";
20− # See https://github.com/hrkfdn/ncspot/issues/714
21− patches = [ ./rust_1_57_support.patch ];
23− cargoSha256 = "sha256-g6UMwirsSV+/NtFIfEZrz5h/OitPQcDeSawh7wq4TLI=";
25 nativeBuildInputs = [ pkg-config ];
21 nativeBuildInputs = [ pkg-config ];
pkgs/applications/audio/ncspot/rust_1_57_support.patchdeleted−21
@@ -1,21 +0,0 @@
1−diff --git a/src/ui/listview.rs b/src/ui/listview.rs
2−index 17fead7..e6c72b6 100644
3−--- a/src/ui/listview.rs
4−+++ b/src/ui/listview.rs
5−@@ -85,7 +85,7 @@ impl<I: ListItem> ListView<I> {
7− pub fn content_height_with_paginator(&self) -> usize {
8− let content_len = self.content.read().unwrap().len();
9−- log::info!("content len: {content_len}");
10−+ log::info!("content len: {}", content_len);
12− // add 1 more row for paginator if we can paginate
13− if self.can_paginate() {
14−@@ -97,7 +97,7 @@ impl<I: ListItem> ListView<I> {
16− fn can_paginate(&self) -> bool {
17− let loaded = self.get_pagination().loaded_content();
18−- log::info!("can paginate: {loaded}");
19−+ log::info!("can paginate: {}", loaded);
20− self.get_pagination().max_content().unwrap_or(0) > self.get_pagination().loaded_content()
pkgs/applications/audio/noise-repellent/default.nix+11−9
@@ -1,22 +1,24 @@
1−{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, fftwFloat, lv2 }:
1+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, cmake, libspecbleach, lv2 }:
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "noise-repellent";
4 pname = "noise-repellent";
5− version = "0.1.5";
5+ version = "0.2.1";
7 src = fetchFromGitHub {
7 src = fetchFromGitHub {
8 owner = "lucianodato";
8 owner = "lucianodato";
9 repo = pname;
9 repo = pname;
10− rev = version;
10+ rev = "v${version}";
11− sha256 = "0hb89x9i2knzan46q4nwscf5zmnb2nwf4w13xl2c0y1mx1ls1mwl";
11+ sha256 = "sha256-hMNVzhJZFGFeu5aygLkfq495O0zpaIk41ddzejvDITE=";
12− fetchSubmodules = true;
15− mesonFlags = ("--prefix=${placeholder "out"}/lib/lv2");
15+ "--prefix=${placeholder "out"}/lib/lv2"
16+ "--buildtype=release"
17− nativeBuildInputs = [ meson ninja pkg-config ];
19+ nativeBuildInputs = [ meson ninja pkg-config cmake ];
18 buildInputs = [
20 buildInputs = [
19− fftwFloat lv2
21+ libspecbleach lv2
22 meta = with lib; {
24 meta = with lib; {
@@ -24,6 +26,6 @@ stdenv.mkDerivation rec {
24 homepage = "https://github.com/lucianodato/noise-repellent";
26 homepage = "https://github.com/lucianodato/noise-repellent";
25 license = licenses.gpl3;
27 license = licenses.gpl3;
26 maintainers = [ maintainers.magnetophon ];
28 maintainers = [ maintainers.magnetophon ];
27− platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "i686-darwin" ];
29+ platforms = platforms.unix;
pkgs/applications/audio/ocenaudio/default.nix+2−2
@@ -11,11 +11,11 @@
12stdenv.mkDerivation rec {
12stdenv.mkDerivation rec {
13 pname = "ocenaudio";
13 pname = "ocenaudio";
14− version = "3.11.7";
14+ version = "3.11.10";
16 src = fetchurl {
16 src = fetchurl {
17 url = "https://www.ocenaudio.com/downloads/index.php/ocenaudio_debian9_64.deb?version=${version}";
17 url = "https://www.ocenaudio.com/downloads/index.php/ocenaudio_debian9_64.deb?version=${version}";
18− sha256 = "sha256-fTeDRo7gCM1jXTQGm9MsmKu4KvTGDUogF3VSZWk91RM=";
18+ sha256 = "sha256-Ah6Ni5EbFdIQ/wN7uGeMrSP5ybQfI4iy9gI1VT5LztU=";
21 nativeBuildInputs = [
21 nativeBuildInputs = [
pkgs/applications/audio/odin2/default.nixnew file+79
@@ -0,0 +1,79 @@
19+stdenv.mkDerivation rec {
21+ version = "unstable-2022-02-23";
23+ src = fetchFromGitHub {
26+ rev = "ed02d06cfb5db8a118d291c00bd2e4cd6e262cde";
27+ fetchSubmodules = true;
28+ sha256 = "sha256-VkZ+mqCmqWQafdN0nQxJdPxbiaZ37/0jOhLvVbnGLvQ=";
31+ nativeBuildInputs = [
49+ # JUCE dlopen's these at runtime, crashes without them
50+ NIX_LDFLAGS = (toString [
59+ "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
60+ "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
61+ "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
65+ mkdir -p $out/bin $out/lib/vst3
66+ cd Odin2_artefacts/Release
67+ cp -r VST3/Odin2.vst3 $out/lib/vst3
68+ cp -r Standalone/Odin2 $out/bin
73+ description = "Odin 2 Synthesizer Plugin";
74+ homepage = "https://thewavewarden.com/odin2";
75+ license = licenses.gpl3;
76+ platforms = [ "x86_64-linux" ];
77+ maintainers = with maintainers; [ magnetophon ];
pkgs/applications/audio/osdlyrics/default.nixnew file+87
@@ -0,0 +1,87 @@
12+, libappindicator-gtk2
18+stdenv.mkDerivation rec {
22+ src = fetchFromGitHub {
26+ sha256 = "sha256-x9gIT1JkfPIc4RmmQJLv9rOG2WqAftoTK5uiRlS65zU=";
29+ nativeBuildInputs = [
41+ python3.pkgs.wrapPython
42+ (python3.withPackages (pp: with pp; [
56+ execLine=$(grep --only-matching --perl-regexp 'Exec=\K(.+)' "$serviceFile")
57+ echo "#!${runtimeShell}" > "$program"
58+ echo "exec $execLine" >> "$program"
61+ substituteInPlace "$serviceFile" \
62+ --replace "Exec=$execLine" "Exec=$program"
65+ # Extract the exec line into a separate program so that it can be wrapped.
66+ mkdir -p "$out/libexec/osdlyrics/"
67+ for svcFile in "$out/share/dbus-1/services"/*; do
68+ svc=$(basename "$svcFile" ".service")
69+ if grep "python" "$svcFile"; then
70+ extractExecLine "$svcFile" "$out/libexec/osdlyrics/$svc"
74+ for p in "$out/bin/osdlyrics-create-lyricsource" "$out/bin/osdlyrics-daemon" "$out/libexec/osdlyrics"/*; do
76+ --prefix PYTHONPATH : "$out/${python3.sitePackages}"
81+ description = "Standalone lyrics fetcher/displayer";
82+ homepage = "https://github.com/osdlyrics/osdlyrics";
83+ license = licenses.gpl3Plus;
84+ maintainers = with maintainers; [ jtojnar ];
85+ platforms = platforms.linux;
pkgs/applications/audio/parlatype/default.nixdeleted−66
@@ -1,66 +0,0 @@
1−{ lib, stdenv, fetchFromGitHub, pkg-config, meson, gtk3, at-spi2-core, dbus, gst_all_1, sphinxbase, pocketsphinx, ninja, gettext, appstream-glib, python3, glib, gobject-introspection, gsettings-desktop-schemas, itstool, wrapGAppsHook, hicolor-icon-theme }:
3−stdenv.mkDerivation rec {
7− src = fetchFromGitHub {
11− sha256 = "1k53q0kbwpnbgyr0lmfzf5sm4f93d8nbjrzdz9pdhzpxgihndg25";
14− nativeBuildInputs = [
21− gobject-introspection
31− gst_all_1.gst-plugins-base
32− gst_all_1.gst-plugins-good
33− gst_all_1.gst-plugins-bad
34− gst_all_1.gst-plugins-ugly
39− gsettings-desktop-schemas
44− chmod +x data/meson_post_install.py
45− patchShebangs data/meson_post_install.py
51− export GST_PLUGIN_SYSTEM_PATH_1_0="$out/lib/gstreamer-1.0/:$GST_PLUGIN_SYSTEM_PATH_1_0"
55− description = "GNOME audio player for transcription";
57− Parlatype is a minimal audio player for manual speech transcription, written for the GNOME desktop environment.
58− It plays audio sources to transcribe them in your favourite text application.
59− It’s intended to be useful for journalists, students, scientists and whoever needs to transcribe audio files.
61− homepage = "https://gkarsay.github.io/parlatype/";
62− license = licenses.gpl3Plus;
63− maintainers = [ maintainers.melchips ];
64− platforms = platforms.linux;
pkgs/applications/audio/pianobar/default.nix+2−2
@@ -2,11 +2,11 @@
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "pianobar";
4 pname = "pianobar";
5− version = "2020.11.28";
5+ version = "2022.04.01";
7 src = fetchurl {
7 src = fetchurl {
8 url = "https://6xq.net/projects/pianobar/${pname}-${version}.tar.bz2";
8 url = "https://6xq.net/projects/pianobar/${pname}-${version}.tar.bz2";
9− sha256 = "1znlwybfpxsjqr1jmr8j0ci8wzmpzmk2yxb0qcx9w9a8nnbgnfv5";
9+ sha256 = "sha256-FnCyiGWouCpXu23+p/FuL6QUXS81SRC7FzgLMsm5R2M=";
12 nativeBuildInputs = [ pkg-config ];
12 nativeBuildInputs = [ pkg-config ];
pkgs/applications/audio/pipecontrol/default.nixnew file+50
@@ -0,0 +1,50 @@
17+stdenv.mkDerivation rec {
18+ pname = "pipecontrol";
21+ src = fetchFromGitHub {
22+ owner = "portaloffreedom";
25+ sha256 = "sha256-BeubRDx82MQX1gB7GnGJlQ2FyYX1S83C3gqPZgIjgoM=";
28+ nativeBuildInputs = [
45+ description = "Pipewire control GUI program in Qt (Kirigami2)";
46+ homepage = "https://github.com/portaloffreedom/pipecontrol";
47+ license = licenses.gpl3Only;
48+ maintainers = with maintainers; [ tilcreator ];
pkgs/applications/audio/plexamp/default.nix+3−3
@@ -2,12 +2,12 @@
4 pname = "plexamp";
4 pname = "plexamp";
5− version = "4.1.0";
5+ version = "4.2.1";
7 src = fetchurl {
7 src = fetchurl {
8 url = "https://plexamp.plex.tv/plexamp.plex.tv/desktop/Plexamp-${version}.AppImage";
8 url = "https://plexamp.plex.tv/plexamp.plex.tv/desktop/Plexamp-${version}.AppImage";
9 name="${pname}-${version}.AppImage";
9 name="${pname}-${version}.AppImage";
10− sha512 = "N+WkH6n7MWfRd2rsk/2b/rABL6pcjpKa1iBZSHslIOEc5fYWjGAxjwwTU0RgSaqptS1DyPeCUeWuphWPZJsQgw==";
10+ sha512 = "S2/T+T24X6D0oTbGPMp2BVfWTvzsUCWS1xsigLT/vFr12PlZgPfOWgo987W3YE30WJJDdybLqnkTl+uhNndC+A==";
13 appimageContents = appimageTools.extractType2 {
13 appimageContents = appimageTools.extractType2 {
@@ -33,7 +33,7 @@ in appimageTools.wrapType2 {
33 meta = with lib; {
33 meta = with lib; {
34 description = "A beautiful Plex music player for audiophiles, curators, and hipsters";
34 description = "A beautiful Plex music player for audiophiles, curators, and hipsters";
35 homepage = "https://plexamp.com/";
35 homepage = "https://plexamp.com/";
36− changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/42";
36+ changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/44";
37 license = licenses.unfree;
37 license = licenses.unfree;
38 maintainers = with maintainers; [ killercup synthetica ];
38 maintainers = with maintainers; [ killercup synthetica ];
39 platforms = [ "x86_64-linux" ];
39 platforms = [ "x86_64-linux" ];
pkgs/applications/audio/pt2-clone/default.nix+2−2
@@ -8,13 +8,13 @@
9stdenv.mkDerivation rec {
9stdenv.mkDerivation rec {
10 pname = "pt2-clone";
10 pname = "pt2-clone";
11− version = "1.43";
11+ version = "1.46";
13 src = fetchFromGitHub {
13 src = fetchFromGitHub {
14 owner = "8bitbubsy";
14 owner = "8bitbubsy";
15 repo = "pt2-clone";
15 repo = "pt2-clone";
16 rev = "v${version}";
16 rev = "v${version}";
17− sha256 = "sha256-+sHGjgDqizv/9n0dDj8knsl+4MBfO3/pMkmD+MPsuNM=";
17+ sha256 = "sha256-xRq37hjuMiGxsWRnZ/ryXYLvQpjbfQEjQkMjjuqL7r8=";
20 nativeBuildInputs = [ cmake ];
20 nativeBuildInputs = [ cmake ];
pkgs/applications/audio/puddletag/default.nix+1
@@ -17,6 +17,7 @@
18 # NOTE: check if we can drop any of these overrides when bumping the version
18 # NOTE: check if we can drop any of these overrides when bumping the version
19 overrideVersions = [
19 overrideVersions = [
20 "pyparsing"
21 "pyparsing"
pkgs/applications/audio/pulseaudio-modules-bt/default.nixdeleted−91
@@ -1,91 +0,0 @@
19− pulseSources = runCommand "pulseaudio-sources" {} ''
21− if [ -d ${pulseaudio.src} ]; then
22− ln -s ${pulseaudio.src}/* $out/
24− tar -xf ${pulseaudio.src}
25− mv pulseaudio*/* $out/
29−in stdenv.mkDerivation rec {
30− pname = "pulseaudio-modules-bt";
33− src = fetchFromGitHub {
35− repo = "pulseaudio-modules-bt";
37− sha256 = "0bzg6x405j39axnkvc6n6vkl1hv1frk94y1i9sl170081bk23asd";
41− ./fix-install-path.patch
44− nativeBuildInputs = [
62− # Upstream bundles pulseaudio as a submodule
64− ln -s ${pulseSources} pa
66− # Pulseaudio version is detected with a -rebootstrapped suffix which build system assumptions
67− substituteInPlace config.h.in --replace PulseAudio_VERSION ${pulseaudio.version}
68− substituteInPlace CMakeLists.txt --replace '${"\${PULSE_DIR}"}' ${pulseaudio.pulseDir}
70− # Fraunhofer recommends to enable afterburner but upstream has it set to false by default
71− substituteInPlace src/modules/bluetooth/a2dp/a2dp_aac.c \
72− --replace "info->aac_afterburner = false;" "info->aac_afterburner = true;"
76− for so in $out/lib/pulse-${pulseaudio.version}/modules/*.so; do
77− orig_rpath=$(patchelf --print-rpath "$so")
79− --set-rpath "${ldacbt}/lib:${lib.getLib ffmpeg}/lib:$out/${pulseaudio.pulseDir}/modules:$orig_rpath" \
85− homepage = "https://github.com/EHfive/pulseaudio-modules-bt";
86− description = "LDAC, aptX, aptX HD, AAC codecs (A2DP Audio) support for Linux PulseAudio";
87− platforms = platforms.linux;
88− license = licenses.mit;
89− maintainers = with maintainers; [ adisbladis ];
pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patchdeleted−11
@@ -1,11 +0,0 @@
1−diff --git a/CMakeLists.txt b/CMakeLists.txt
2−index 8d20dbf..63fe7ba 100644
5−@@ -213,5 +213,4 @@ INSTALL(TARGETS
7− module-bluetooth-discover
8− module-bluetooth-policy
9−- LIBRARY DESTINATION ${PulseAudio_modlibexecdir})
11−+ LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${PULSE_DIR}/modules/)
pkgs/applications/audio/pyradio/default.nix+3−3
@@ -2,7 +2,7 @@
3python3Packages.buildPythonApplication rec {
3python3Packages.buildPythonApplication rec {
4 pname = "pyradio";
4 pname = "pyradio";
5− version = "0.8.9.16";
5+ version = "0.8.9.17";
7 propagatedBuildInputs = with python3Packages; [
7 propagatedBuildInputs = with python3Packages; [
@@ -13,8 +13,8 @@ python3Packages.buildPythonApplication rec {
13 src = fetchFromGitHub {
13 src = fetchFromGitHub {
14 owner = "coderholic";
14 owner = "coderholic";
15 repo = pname;
15 repo = pname;
16− rev = version;
16+ rev = "refs/tags/${version}";
17− sha256 = "sha256-uerQfyGHWhLbO6UkLSMA1tdfW/8fDQkcm6hYIdwwC7I=";
17+ sha256 = "sha256-lfDSD1+xbA6tAKeHKciq/n6YHWS4JTOvjIqOn+FQ2yA=";
20 checkPhase = ''
20 checkPhase = ''
pkgs/applications/audio/qpwgraph/default.nix+3−3
@@ -5,14 +5,14 @@
6mkDerivation rec {
6mkDerivation rec {
7 pname = "qpwgraph";
7 pname = "qpwgraph";
8− version = "0.2.2";
8+ version = "0.2.5";
10 src = fetchFromGitLab {
10 src = fetchFromGitLab {
11 domain = "gitlab.freedesktop.org";
11 domain = "gitlab.freedesktop.org";
12 owner = "rncbc";
12 owner = "rncbc";
13 repo = "qpwgraph";
13 repo = "qpwgraph";
14 rev = "v${version}";
14 rev = "v${version}";
15− sha256 = "sha256-BBvF1L3IqkYqSghHxcbwOBizdu6GtxaWof3Q/bc+aTY=";
15+ sha256 = "sha256-OYIBlTO1vXmmY4/ZacvsEQ5EnOfetBvnG2v5xL44czY=";
18 nativeBuildInputs = [ cmake pkg-config ];
18 nativeBuildInputs = [ cmake pkg-config ];
@@ -29,6 +29,6 @@ mkDerivation rec {
29 homepage = "https://gitlab.freedesktop.org/rncbc/qpwgraph";
29 homepage = "https://gitlab.freedesktop.org/rncbc/qpwgraph";
30 license = licenses.gpl2Plus;
30 license = licenses.gpl2Plus;
31 platforms = platforms.linux;
31 platforms = platforms.linux;
32− maintainers = with maintainers; [ kanashimia ];
32+ maintainers = with maintainers; [ kanashimia exi ];
pkgs/applications/audio/shortwave/default.nix+9−12
@@ -14,28 +14,29 @@
16, pkg-config
16, pkg-config
18, rustPlatform
17, rustPlatform
20−, wrapGAppsHook
19+, wrapGAppsHook4
23stdenv.mkDerivation rec {
24stdenv.mkDerivation rec {
24 pname = "shortwave";
25 pname = "shortwave";
25− version = "2.0.1";
26+ version = "3.0.0";
27 src = fetchFromGitLab {
28 src = fetchFromGitLab {
28 domain = "gitlab.gnome.org";
29 domain = "gitlab.gnome.org";
29 owner = "World";
30 owner = "World";
30 repo = "Shortwave";
31 repo = "Shortwave";
31 rev = version;
32 rev = version;
32− sha256 = "sha256-25qPb7qlqCwYJzl4qZxAZYx5asxSlXBlc/0dGyBdk1o=";
33+ sha256 = "sha256-qwk63o9pfqpAm6l9ioj3RccacemQU8R6LF6El4yHkjQ";
35 cargoDeps = rustPlatform.fetchCargoTarball {
36 cargoDeps = rustPlatform.fetchCargoTarball {
36 inherit src;
37 inherit src;
37 name = "${pname}-${version}";
38 name = "${pname}-${version}";
38− hash = "sha256-00dQXcSNmdZb2nSLG3q7jm4sugF9XR4LbH0OmcuHVxA=";
39+ hash = "sha256-YrB322nv9CgZqt5//VMvVwjWA51ePlX2PI6raRJGBxA=";
41 nativeBuildInputs = [
42 nativeBuildInputs = [
@@ -46,11 +47,11 @@ stdenv.mkDerivation rec {
48 pkg-config
49 pkg-config
50 rustPlatform.rust.cargo
50 rustPlatform.rust.cargo
51 rustPlatform.cargoSetupHook
51 rustPlatform.cargoSetupHook
52 rustPlatform.rust.rustc
52 rustPlatform.rust.rustc
53− wrapGAppsHook
53+ wrapGAppsHook4
56 buildInputs = [
57 buildInputs = [
@@ -61,6 +62,7 @@ stdenv.mkDerivation rec {
61 libadwaita
62 libadwaita
64 ] ++ (with gst_all_1; [
66 ] ++ (with gst_all_1; [
66 gst-plugins-base
68 gst-plugins-base
@@ -68,10 +70,6 @@ stdenv.mkDerivation rec {
68 gst-plugins-bad
70 gst-plugins-bad
72− patchShebangs build-aux/meson/postinstall.py
75 meta = with lib; {
73 meta = with lib; {
76 homepage = "https://gitlab.gnome.org/World/Shortwave";
74 homepage = "https://gitlab.gnome.org/World/Shortwave";
77 description = "Find and listen to internet radio stations";
75 description = "Find and listen to internet radio stations";
@@ -80,7 +78,6 @@ stdenv.mkDerivation rec {
80 desktop. It is the successor to the older Gradio application.
78 desktop. It is the successor to the older Gradio application.
82 maintainers = with maintainers; [ lasandell ];
80 maintainers = with maintainers; [ lasandell ];
83− broken = true; # incompatible with latest libadwaita
84 license = licenses.gpl3Plus;
81 license = licenses.gpl3Plus;
85 platforms = platforms.linux;
82 platforms = platforms.linux;
pkgs/applications/audio/sonixd/default.nixnew file+27
@@ -0,0 +1,27 @@
6+appimageTools.wrapType2 rec {
11+ url = "https://github.com/jeffvli/sonixd/releases/download/v${version}/Sonixd-${version}-linux-x86_64.AppImage";
12+ sha256 = "sha256-23WU1nwvrzyw0J+Pplm3JbsScjJxu+RhmwVoe/PjozY=";
15+ extraInstallCommands = ''
16+ mv $out/bin/sonixd-${version} $out/bin/sonixd
20+ description = "Full-featured Subsonic/Jellyfin compatible desktop music player";
21+ homepage = "https://github.com/jeffvli/sonixd";
22+ license = licenses.gpl3Only;
23+ maintainers = with maintainers; [ onny ];
24+ platforms = [ "x86_64-linux" ];
pkgs/applications/audio/soundwireserver/default.nix+1
@@ -34,6 +34,7 @@ qt5.mkDerivation {
34 description = "Turn your Android device into wireless headphones / wireless speaker";
34 description = "Turn your Android device into wireless headphones / wireless speaker";
35 homepage = "https://georgielabs.net/";
35 homepage = "https://georgielabs.net/";
36 maintainers = with maintainers; [ mkg20001 ];
36 maintainers = with maintainers; [ mkg20001 ];
37+ platforms = [ "x86_64-linux" ];
37 license = licenses.unfree;
38 license = licenses.unfree;
pkgs/applications/audio/spot/default.nix+3−3
@@ -21,19 +21,19 @@
22stdenv.mkDerivation rec {
22stdenv.mkDerivation rec {
23 pname = "spot";
23 pname = "spot";
24− version = "0.3.1";
24+ version = "0.3.3";
26 src = fetchFromGitHub {
26 src = fetchFromGitHub {
27 owner = "xou816";
27 owner = "xou816";
28 repo = "spot";
28 repo = "spot";
29 rev = version;
29 rev = version;
30− hash = "sha256-uZzylK9imEazwC/ogsDO8ZBvByE5/SNSV+mIlp7Z9Ww=";
30+ hash = "sha256-0iuLZq9FSxaOchxx6LzGwpY8qnOq2APl/qkBYzEV2uw=";
33 cargoDeps = rustPlatform.fetchCargoTarball {
33 cargoDeps = rustPlatform.fetchCargoTarball {
34 inherit src;
34 inherit src;
35 name = "${pname}-${version}";
35 name = "${pname}-${version}";
36− hash = "sha256-v5xdlsI6OlEpCYOTFePTyI8BkIrAwT6FR2JwiRTGgOA=";
36+ hash = "sha256-g46BkrTv6tdrGe/p245O4cBoPjbvyRP7U6hH1Hp4ja0=";
39 nativeBuildInputs = [
39 nativeBuildInputs = [
pkgs/applications/audio/spotify-tui/default.nix+1
@@ -31,5 +31,6 @@ rustPlatform.buildRustPackage rec {
31 changelog = "https://github.com/Rigellute/spotify-tui/blob/v${version}/CHANGELOG.md";
31 changelog = "https://github.com/Rigellute/spotify-tui/blob/v${version}/CHANGELOG.md";
32 license = licenses.mit;
32 license = licenses.mit;
33 maintainers = with maintainers; [ jwijenbergh ];
33 maintainers = with maintainers; [ jwijenbergh ];
pkgs/applications/audio/spotify/default.nix+3−3
@@ -10,14 +10,14 @@ let
10 # If an update breaks things, one of those might have valuable info:
10 # If an update breaks things, one of those might have valuable info:
11 # https://aur.archlinux.org/packages/spotify/
11 # https://aur.archlinux.org/packages/spotify/
12 # https://community.spotify.com/t5/Desktop-Linux
12 # https://community.spotify.com/t5/Desktop-Linux
13− version = "1.1.80.699.gc3dac750";
13+ version = "1.1.84.716.gc5f8b819";
14 # To get the latest stable revision:
14 # To get the latest stable revision:
15 # curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
15 # curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
16 # To get general information:
16 # To get general information:
17 # curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
17 # curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
18 # More examples of api usage:
18 # More examples of api usage:
19 # https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
19 # https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
20− rev = "58";
20+ rev = "60";
@@ -80,7 +80,7 @@ stdenv.mkDerivation {
80 # https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
80 # https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
81 src = fetchurl {
81 src = fetchurl {
82 url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
82 url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
83− sha512 = "91385a5a8de31d6e9f1945d23108447fd369c1cdc2e4d95cbb7cec5d403c3be14a1b0fabe3fb01aef809a39b033d289add1bcb307ab19c7fcb63689dbae57c53";
83+ sha512 = "1209b956822d8bb661daa2c88616bed403ec26dc22c6b866cecff59235c56112284c2f99aa06352fc0df6fcd15225a6ad60afd3b4ff4d7b948ab83e70ab31a71";
86 nativeBuildInputs = [ makeWrapper wrapGAppsHook squashfsTools ];
86 nativeBuildInputs = [ makeWrapper wrapGAppsHook squashfsTools ];
pkgs/applications/audio/strawberry/default.nix+1
@@ -72,6 +72,7 @@ mkDerivation rec {
72 ] ++ lib.optionals withGstreamer (with gst_all_1; [
72 ] ++ lib.optionals withGstreamer (with gst_all_1; [
73 glib-networking
73 glib-networking
75 gst-plugins-base
76 gst-plugins-base
76 gst-plugins-good
77 gst-plugins-good
77 gst-plugins-bad
78 gst-plugins-bad
pkgs/applications/audio/viper4linux-gui/default.nixnew file+82
@@ -0,0 +1,82 @@
17+ gstPluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with gst_all_1; [ gstreamer gst-plugins-viperfx gst-plugins-base gst-plugins-good ]);
19+stdenv.mkDerivation rec {
20+ pname = "viper4linux-gui";
21+ version = "unstable-2022-04-23";
23+ src = fetchFromGitHub {
24+ owner = "Audio4Linux";
25+ repo = "Viper4Linux-GUI";
26+ rev = "2d0c84d7dda76c59e31c850e38120002eb779b7a";
27+ sha256 = "sha256-5YlLCF598i/sldczPEgCB+1KJDA7jqM964QDSNjgTKM=";
35+ desktopName = "viper4linux";
36+ genericName = "Equalizer";
37+ comment = meta.description;
38+ categories = [ "AudioVideo" "Audio" ];
39+ startupNotify = false;
43+ nativeBuildInputs = [
55+ gst_all_1.gst-plugins-bad
56+ gst_all_1.gst-plugins-viperfx
61+ qmakeFlags = [ "V4L_Frontend.pro" ];
64+ "--prefix PATH : ${lib.makeBinPath [ viper4linux gst_all_1.gstreamer ]}"
65+ "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${gstPluginPath}"
70+ install -D V4L_Frontend $out/bin/viper-gui
71+ install -D icons/viper.png $out/share/icons/viper.png
76+ description = "Official UI for Viper4Linux2";
77+ homepage = "https://github.com/Audio4Linux/Viper4Linux-GUI";
78+ license = licenses.gpl3Plus;
79+ platforms = [ "x86_64-linux" ];
80+ maintainers = with maintainers; [ rewine ];
pkgs/applications/audio/viper4linux/default.nixnew file+61
@@ -0,0 +1,61 @@
10+ gstPluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with gst_all_1; [ gstreamer gst-plugins-viperfx gst-plugins-base gst-plugins-good ]);
12+stdenv.mkDerivation rec {
13+ pname = "viper4linux";
14+ version = "unstable-2022-03-13";
16+ src = fetchFromGitHub {
17+ owner = "Audio4Linux";
18+ repo = "Viper4Linux";
19+ rev = "5da25644824f88cf0db24378d2c84770ba4f6816";
20+ sha256 = "sha256-CJNVr/1ehJzX45mxunXcRAypBBGEBdswOzAVG2H+ayg=";
23+ nativeBuildInputs = [ makeWrapper ];
27+ gst_all_1.gst-plugins-base
28+ gst_all_1.gst-plugins-good
29+ gst_all_1.gst-plugins-viperfx
36+ substituteInPlace viper --replace "/etc/viper4linux" "$out/etc/viper4linux"
41+ install -D viper -t $out/bin
42+ mkdir -p $out/etc/viper4linux
43+ cp -r viper4linux/* $out/etc/viper4linux
48+ wrapProgram "$out/bin/viper" \
49+ --prefix PATH : $out/bin:${lib.makeBinPath [ gst_all_1.gstreamer ]} \
50+ --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${gstPluginPath} \
51+ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libviperfx ]}
55+ description = "An Adaptive Digital Sound Processor";
56+ homepage = "https://github.com/Audio4Linux/Viper4Linux";
57+ license = licenses.gpl3Plus;
58+ platforms = [ "x86_64-linux" ];
59+ maintainers = with maintainers; [ rewine ];
pkgs/applications/audio/whipper/default.nix+8
@@ -8,6 +8,8 @@
10, util-linux
10, util-linux
@@ -45,6 +47,7 @@ in python3.pkgs.buildPythonApplication rec {
45 ruamel-yaml
47 ruamel-yaml
50 buildInputs = [ libsndfile ];
53 buildInputs = [ libsndfile ];
@@ -71,6 +74,11 @@ in python3.pkgs.buildPythonApplication rec {
71 runHook postCheck
74 runHook postCheck
77+ passthru.tests.version = testers.testVersion {
79+ command = "HOME=$TMPDIR whipper --version";
74 meta = with lib; {
82 meta = with lib; {
75 homepage = "https://github.com/whipper-team/whipper";
83 homepage = "https://github.com/whipper-team/whipper";
76 description = "A CD ripper aiming for accuracy over speed";
84 description = "A CD ripper aiming for accuracy over speed";
pkgs/applications/audio/x42-plugins/default.nix+2−2
@@ -3,12 +3,12 @@
3, libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }:
3, libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }:
5stdenv.mkDerivation rec {
5stdenv.mkDerivation rec {
6− version = "20220107";
6+ version = "20220327";
7 pname = "x42-plugins";
7 pname = "x42-plugins";
9 src = fetchurl {
9 src = fetchurl {
10 url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz";
10 url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz";
11− sha256 = "sha256-+lzgkRQHe6moid3h6az/iqt2XL5vbyM0BjSTwMBvd3I=";
11+ sha256 = "sha256-IhuPqTlCbCxExT5B9Au42RQQl4sDEvz6+HhsuT02KVs=";
14 nativeBuildInputs = [ pkg-config ];
14 nativeBuildInputs = [ pkg-config ];
pkgs/applications/blockchains/alfis/default.nix+3−3
@@ -14,16 +14,16 @@
15rustPlatform.buildRustPackage rec {
15rustPlatform.buildRustPackage rec {
16 pname = "alfis";
16 pname = "alfis";
17− version = "0.6.11";
17+ version = "0.7.0";
19 src = fetchFromGitHub {
19 src = fetchFromGitHub {
20 owner = "Revertron";
20 owner = "Revertron";
21 repo = "Alfis";
21 repo = "Alfis";
22 rev = "v${version}";
22 rev = "v${version}";
23− sha256 = "sha256-vm/JBJh58UaSem18RpJuPUzM2GCy4RfCb6Hr1B7KWQA=";
23+ sha256 = "sha256-lamobXaDY+v8NpoI+TuuBO5Cdol9+7VPhdmLEH6sZIo=";
26− cargoSha256 = "sha256-8ijGO8up0qVQ/kVX5/DveKyovYLh7jm+d7vooS1waAA=";
26+ cargoSha256 = "sha256-C5MCT4EG/lI4s2rVGSm9DgBu43FKpp3iTBbCf7N1jOA=";
28 checkFlags = [
28 checkFlags = [
29 # these want internet access, disable them
29 # these want internet access, disable them
pkgs/applications/blockchains/bisq-desktop/default.nix+1−2
@@ -10,7 +10,6 @@
10, writeScript
10, writeScript
@@ -42,7 +41,7 @@ stdenv.mkDerivation rec {
42 sha256 = "09bpkmn22kal3cxg8sil02wy2f2gplsbdkp4viagn0jppma02jid";
41 sha256 = "09bpkmn22kal3cxg8sil02wy2f2gplsbdkp4viagn0jppma02jid";
45− nativeBuildInputs = [ makeWrapper copyDesktopItems imagemagick dpkg gnutar zip xz ];
44+ nativeBuildInputs = [ makeWrapper copyDesktopItems imagemagick dpkg zip xz ];
47 desktopItems = [
46 desktopItems = [
48 (makeDesktopItem {
47 (makeDesktopItem {
pkgs/applications/blockchains/bitcoin/default.nix+2−2
@@ -25,7 +25,7 @@
28− version = "22.0";
28+ version = "23.0";
29 majorVersion = versions.major version;
29 majorVersion = versions.major version;
30 desktop = fetchurl {
30 desktop = fetchurl {
31 url = "https://raw.githubusercontent.com/bitcoin-core/packaging/${majorVersion}.x/debian/bitcoin-qt.desktop";
31 url = "https://raw.githubusercontent.com/bitcoin-core/packaging/${majorVersion}.x/debian/bitcoin-qt.desktop";
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
41 "https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
41 "https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
42 "https://bitcoin.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
42 "https://bitcoin.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
44− sha256 = "d0e9d089b57048b1555efa7cd5a63a7ed042482045f6f33402b1df425bf9613b";
44+ sha256 = "26748bf49d6d6b4014d0fedccac46bf2bcca42e9d34b3acfd9e3467c415acc05";
47 nativeBuildInputs =
47 nativeBuildInputs =
pkgs/applications/blockchains/btcpayserver/default.nix+2−2
@@ -3,13 +3,13 @@
4buildDotnetModule rec {
4buildDotnetModule rec {
5 pname = "btcpayserver";
5 pname = "btcpayserver";
6− version = "1.4.7";
6+ version = "1.5.1";
8 src = fetchFromGitHub {
8 src = fetchFromGitHub {
9 owner = pname;
9 owner = pname;
10 repo = pname;
10 repo = pname;
11 rev = "v${version}";
11 rev = "v${version}";
12− sha256 = "sha256-Qz4BNrhK+NPnKBgjXGYl4P2R878LCuMGZxLECawA12E=";
12+ sha256 = "sha256-DcxRrVUen+JxMpiLDPfknpwCe962ifaekBeBnxJ0y88=";
15 projectFile = "BTCPayServer/BTCPayServer.csproj";
15 projectFile = "BTCPayServer/BTCPayServer.csproj";
pkgs/applications/blockchains/btcpayserver/deps.nix+29−29
@@ -31,18 +31,18 @@
32 (fetchNuGet {
32 (fetchNuGet {
33 pname = "BTCPayServer.Lightning.All";
33 pname = "BTCPayServer.Lightning.All";
34− version = "1.3.2";
34+ version = "1.3.6";
35− sha256 = "0xcfba8n9zf5m1nb48ilggp03kpki4nv4kx7k7a5w1gxgm6k6j9z";
35+ sha256 = "0jdpqy6kxg0lyh4n88wsvrcqc0kk7s7zn5lw7ivwys716m69qrdl";
37 (fetchNuGet {
37 (fetchNuGet {
38 pname = "BTCPayServer.Lightning.Charge";
38 pname = "BTCPayServer.Lightning.Charge";
39− version = "1.3.1";
39+ version = "1.3.2";
40− sha256 = "1xakwnb839dl0qnhqprsnfq8png31iyb0fsngljis5jc8yvb4353";
40+ sha256 = "0v5rss6dg7297kq1frhn2pj9gd0rd8g1p5d316x5wkd4w7pmrm2w";
42 (fetchNuGet {
42 (fetchNuGet {
43 pname = "BTCPayServer.Lightning.CLightning";
43 pname = "BTCPayServer.Lightning.CLightning";
44− version = "1.3.1";
44+ version = "1.3.2";
45− sha256 = "0a79p6i3xiq6svv08c4hhihkvqa2ac7fphi3g9i0cwh47ak0k5h2";
45+ sha256 = "0qs5p6pm54il23j8yysw0pzvrki37y6z8cd2gdknpz2f3wg7slm9";
47 (fetchNuGet {
47 (fetchNuGet {
48 pname = "BTCPayServer.Lightning.Common";
48 pname = "BTCPayServer.Lightning.Common";
@@ -51,23 +51,23 @@
52 (fetchNuGet {
52 (fetchNuGet {
53 pname = "BTCPayServer.Lightning.Common";
53 pname = "BTCPayServer.Lightning.Common";
54− version = "1.3.1";
54+ version = "1.3.2";
55− sha256 = "165p1246fn628hlwdrx7sanlxa6qqpn480rq1asn5r1602w21844";
55+ sha256 = "119zplkc7iy9wc95iz1qnyi42fr99ar4hp8a11p708a22w941yi0";
57 (fetchNuGet {
57 (fetchNuGet {
58 pname = "BTCPayServer.Lightning.Eclair";
58 pname = "BTCPayServer.Lightning.Eclair";
59− version = "1.3.1";
59+ version = "1.3.2";
60− sha256 = "1vlwm5mw8wffp00xhkx19yavk59b5x540sg81vis3q7hjvvgca5c";
60+ sha256 = "08gw1gqng1khxzvvhlwsg6lw1w56ylilg738wi6cbcwy7vl7f6bb";
62 (fetchNuGet {
62 (fetchNuGet {
63 pname = "BTCPayServer.Lightning.LNBank";
63 pname = "BTCPayServer.Lightning.LNBank";
64− version = "1.3.1";
64+ version = "1.3.4";
65− sha256 = "0qga34vi4fzfr0g4qk0ad8xkqdig2ishmdj9i32s5yrrjrkx7c8d";
65+ sha256 = "1vyz63pi5j31y8pz0b4hp9c4j249rszzfcymk3z3b2clwq32s4i4";
67 (fetchNuGet {
67 (fetchNuGet {
68 pname = "BTCPayServer.Lightning.LND";
68 pname = "BTCPayServer.Lightning.LND";
69− version = "1.3.1";
69+ version = "1.3.3";
70− sha256 = "1b70jlyzy9xjvfywzi6i3l3sd4mkknxpni9akdi0phsfqysmy0wl";
70+ sha256 = "137azpxxmp2q69bp07ky1jsgnfy9lf0dg5ba8l654flvvrgxaq6y";
72 (fetchNuGet {
72 (fetchNuGet {
73 pname = "BuildBundlerMinifier";
73 pname = "BuildBundlerMinifier";
@@ -89,6 +89,11 @@
89 version = "15.0.5";
89 version = "15.0.5";
90 sha256 = "01y8bhsnxghn3flz0pr11vj6wjrpmia8rpdrsp7kjfc1zmhqlgma";
90 sha256 = "01y8bhsnxghn3flz0pr11vj6wjrpmia8rpdrsp7kjfc1zmhqlgma";
95+ sha256 = "15hxrchfgiqnmgf8fqhrf4pb4c8l9igg5qnkw9yk3rkagcqfkk91";
92 (fetchNuGet {
97 (fetchNuGet {
93 pname = "DigitalRuby.ExchangeSharp";
98 pname = "DigitalRuby.ExchangeSharp";
94 version = "0.6.3";
99 version = "0.6.3";
@@ -374,11 +379,6 @@
374 version = "3.1.6";
379 version = "3.1.6";
375 sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5";
380 sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5";
378− pname = "Microsoft.EntityFrameworkCore.Abstractions";
380− sha256 = "1aw13qjkpglc1mm3cv7s73s8fschy8lzdnigsp346b7mycpg7v92";
382 (fetchNuGet {
382 (fetchNuGet {
383 pname = "Microsoft.EntityFrameworkCore.Abstractions";
383 pname = "Microsoft.EntityFrameworkCore.Abstractions";
384 version = "6.0.1";
384 version = "6.0.1";
@@ -831,8 +831,8 @@
832 (fetchNuGet {
832 (fetchNuGet {
833 pname = "NBitcoin";
833 pname = "NBitcoin";
834− version = "6.0.15";
834+ version = "6.0.18";
835− sha256 = "038dcl2k88w4cijws3pdnjflgy4lmqx70z0l7yqz355kmxjz8ain";
835+ sha256 = "1dr669h68cx6yfzr3n97yzzwbgnsv5g2008diyxngdjm55nh3q9s";
837 (fetchNuGet {
837 (fetchNuGet {
838 pname = "NBitcoin";
838 pname = "NBitcoin";
@@ -856,8 +856,8 @@
857 (fetchNuGet {
857 (fetchNuGet {
858 pname = "NBXplorer.Client";
858 pname = "NBXplorer.Client";
859− version = "4.1.3";
859+ version = "4.2.0";
860− sha256 = "1nh4jj7yg81825hr7cc99qlnfmdm6jibap81qqi8a968b61z4251";
860+ sha256 = "1adbn5cbr42cjfvijaf1lffhcrcn0ws1arfi7mrg3kjshbzfgims";
862 (fetchNuGet {
862 (fetchNuGet {
863 pname = "NETStandard.Library";
863 pname = "NETStandard.Library";
@@ -931,13 +931,13 @@
932 (fetchNuGet {
932 (fetchNuGet {
933 pname = "Npgsql.EntityFrameworkCore.PostgreSQL";
933 pname = "Npgsql.EntityFrameworkCore.PostgreSQL";
934− version = "6.0.1";
934+ version = "6.0.3";
935− sha256 = "108sc62dqdb6ym2ck651kamcv6qf93cmaqzygfblmiglwzi6frnx";
935+ sha256 = "0mgwm9psxvrq6vs2cy7m72wnknydgrs71hir2jqal5wbdh8g01np";
937 (fetchNuGet {
937 (fetchNuGet {
938 pname = "Npgsql";
938 pname = "Npgsql";
939− version = "6.0.1";
939+ version = "6.0.3";
940− sha256 = "150paiwqxp6zsy5v7vl2a9h3ikzfv3pd04whxifmamq0h1ghw0ld";
940+ sha256 = "1crzgi4dfbn8r381m9rvkma5xi2q7gqdzgxhc36hy3r0y63v1l8q";
942 (fetchNuGet {
942 (fetchNuGet {
943 pname = "NSec.Cryptography";
943 pname = "NSec.Cryptography";
@@ -1086,8 +1086,8 @@
1087 (fetchNuGet {
1087 (fetchNuGet {
1088 pname = "Selenium.WebDriver.ChromeDriver";
1088 pname = "Selenium.WebDriver.ChromeDriver";
1089− version = "98.0.4758.10200";
1089+ version = "100.0.4896.6000";
1090− sha256 = "10mc50gm78zbxrwvxlygzmj2a29liiacv8haax0534c26vj9dwkl";
1090+ sha256 = "1pfdvxjy4xiw1j7787lf07w9nr0dmj589vf6p4aqmk2cfz8j35c6";
1092 (fetchNuGet {
1092 (fetchNuGet {
1093 pname = "Selenium.WebDriver";
1093 pname = "Selenium.WebDriver";
pkgs/applications/blockchains/chia-plotter/default.nix+13−6
@@ -9,13 +9,13 @@
10stdenv.mkDerivation {
10stdenv.mkDerivation {
11 pname = "chia-plotter";
11 pname = "chia-plotter";
12− version = "1.1.7";
12+ version = "1.1.8";
14 src = fetchFromGitHub {
14 src = fetchFromGitHub {
15 owner = "madMAx43v3r";
15 owner = "madMAx43v3r";
16 repo = "chia-plotter";
16 repo = "chia-plotter";
17− rev = "18cad340858f0dbcc8dafd0bda1ce1af0fe58c65";
17+ rev = "9d7fd929919d1adde6404cb4718a665a81bcef6d";
18− sha256 = "sha256-lXjeqcjn3+LtnVYngdM1T3on7V7wez4oOAZ0RpKJXMM=";
18+ sha256 = "sha256-TMAly+Qof2DHPRHqE1nZuHQaCeMo0jEd8MWy4OlXrcs=";
19 fetchSubmodules = true;
19 fetchSubmodules = true;
@@ -25,10 +25,17 @@ stdenv.mkDerivation {
25 src = ./dont_fetch_dependencies.patch;
25 src = ./dont_fetch_dependencies.patch;
26 pybind11_src = python3Packages.pybind11.src;
26 pybind11_src = python3Packages.pybind11.src;
27 relic_src = fetchFromGitHub {
27 relic_src = fetchFromGitHub {
28− owner = "relic-toolkit";
28+ owner = "Chia-Network";
29 repo = "relic";
29 repo = "relic";
30− rev = "1885ae3b681c423c72b65ce1fe70910142cf941c";
30+ rev = "1d98e5abf3ca5b14fd729bd5bcced88ea70ecfd7";
31− hash = "sha256-tsSZTcssl8t7Nqdex4BesgQ+ACPgTdtHnJFvS9josN0=";
31+ hash = "sha256-IfTD8DvTEXeLUoKe4Ejafb+PEJW5DV/VXRYuutwGQHU=";
33+ sodium_src = fetchFromGitHub {
34+ owner = "AmineKhaldi";
35+ repo = "libsodium-cmake";
36+ rev = "f73a3fe1afdc4e37ac5fe0ddd401bf521f6bba65"; # pinned by upstream
37+ sha256 = "sha256-lGz7o6DQVAuEc7yTp8bYS2kwjzHwGaNjugDi1ruRJOA=";
38+ fetchSubmodules = true;
pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11
@@ -11,30 +11,43 @@ index 255e3bb..5f99c3a 100644
11+ SOURCE_DIR @pybind11_src@
11+ SOURCE_DIR @pybind11_src@
13 FetchContent_MakeAvailable(pybind11 relic)
13 FetchContent_MakeAvailable(pybind11 relic)
15−diff --git a/lib/bls-signatures/src/CMakeLists.txt b/lib/bls-signatures/src/CMakeLists.txt
15+diff --git a/CMakeLists.txt b/CMakeLists.txt
16−index b762b5d..e06073b 100644
16+index 6922167..23d8da6 100644
17−--- a/lib/bls-signatures/src/CMakeLists.txt
17+--- a/lib/bls-signatures/CMakeLists.txt
18−+++ b/lib/bls-signatures/src/CMakeLists.txt
18++++ b/lib/bls-signatures/CMakeLists.txt
19−@@ -4,18 +4,11 @@ set (CMAKE_CXX_STANDARD 17)
19+@@ -31,29 +31,18 @@ set(CMAKE_MODULE_PATH
21 include(FetchContent)
20 include(FetchContent)
22+ FetchContent_Declare(Sodium
23+- GIT_REPOSITORY https://github.com/AmineKhaldi/libsodium-cmake.git
24+- # Latest commit at the moment this was added here
25+- # Anchored to libsodium v1.0.18
26+- GIT_TAG f73a3fe1afdc4e37ac5fe0ddd401bf521f6bba65
29+ set(SODIUM_PCH "on" CACHE STRING "")
30+ set(SODIUM_DISABLE_TESTS "on" CACHE STRING "")
31+ set(SODIUM_CHIA_MINIMAL "on" CACHE STRING "")
32+ FetchContent_MakeAvailable(Sodium)
23-if (DEFINED ENV{RELIC_MAIN})
34-if (DEFINED ENV{RELIC_MAIN})
24- set(RELIC_GIT_TAG "origin/main")
35- set(RELIC_GIT_TAG "origin/main")
26−- set(RELIC_GIT_TAG "1885ae3b681c423c72b65ce1fe70910142cf941c")
37+- # This is currently anchored to upstream aecdcae7956f542fbee2392c1f0feb0a8ac41dc5
38+- set(RELIC_GIT_TAG "1d98e5abf3ca5b14fd729bd5bcced88ea70ecfd7")
29 message(STATUS "Relic will be built from: ${RELIC_GIT_TAG}")
41 message(STATUS "Relic will be built from: ${RELIC_GIT_TAG}")
31 FetchContent_Declare(
43 FetchContent_Declare(
33−- GIT_REPOSITORY https://github.com/relic-toolkit/relic.git
45+- GIT_REPOSITORY https://github.com/Chia-Network/relic.git
34−- GIT_TAG ${RELIC_GIT_TAG}
46+- GIT_TAG ${RELIC_GIT_TAG}
35+ SOURCE_DIR @relic_src@
47+ SOURCE_DIR @relic_src@
37− FetchContent_MakeAvailable(relic)
49+
50+ # Relic related options
39diff --git a/CMakeLists.txt b/CMakeLists.txt
52diff --git a/CMakeLists.txt b/CMakeLists.txt
40index 970ec74..948441a 100644
53index 970ec74..948441a 100644
pkgs/applications/blockchains/clightning/default.nix+2−2
@@ -21,11 +21,11 @@ let
22stdenv.mkDerivation rec {
22stdenv.mkDerivation rec {
23 pname = "clightning";
23 pname = "clightning";
24− version = "0.10.2";
24+ version = "0.11.0.1";
26 src = fetchurl {
26 src = fetchurl {
27 url = "https://github.com/ElementsProject/lightning/releases/download/v${version}/clightning-v${version}.zip";
27 url = "https://github.com/ElementsProject/lightning/releases/download/v${version}/clightning-v${version}.zip";
28− sha256 = "3c9dcb686217b2efe0e988e90b95777c4591e3335e259e01a94af87e0bf01809";
28+ sha256 = "e2ad6eead19a0cd8869e291c27d318cf553bb015339c1f0e8d8b30e7bc0910d8";
31 # when building on darwin we need dawin.cctools to provide the correct libtool
31 # when building on darwin we need dawin.cctools to provide the correct libtool
pkgs/applications/blockchains/electrs/default.nix+3−3
@@ -12,16 +12,16 @@ let
13rustPlatform.buildRustPackage rec {
13rustPlatform.buildRustPackage rec {
14 pname = "electrs";
14 pname = "electrs";
15− version = "0.9.6";
15+ version = "0.9.7";
17 src = fetchFromGitHub {
17 src = fetchFromGitHub {
18 owner = "romanz";
18 owner = "romanz";
19 repo = pname;
19 repo = pname;
20 rev = "v${version}";
20 rev = "v${version}";
21− hash = "sha256-BI7hxlpg2sggD1ag73n+tRre+Ja2ZFhDPzy1DV8aEHw=";
21+ hash = "sha256-hdXc64gj7QtCnTq3f5mpQDEKLM6qaDBLkQE07xxNaDE=";
24− cargoHash = "sha256-Oy2mOulSB2a9LaT47G+BzjidcjPjHeaoesQ7g6M8M1Q=";
24+ cargoHash = "sha256-xMATO+H3bGkM/tLRimmLGYtrOAX8hzkw5Hb0c6iVAXY=";
26 # needed for librocksdb-sys
26 # needed for librocksdb-sys
27 nativeBuildInputs = [ llvmPackages.clang ];
27 nativeBuildInputs = [ llvmPackages.clang ];
pkgs/applications/blockchains/ledger-live-desktop/default.nix+2−2
@@ -2,12 +2,12 @@
4 pname = "ledger-live-desktop";
4 pname = "ledger-live-desktop";
5− version = "2.40.2";
5+ version = "2.40.4";
6 name = "${pname}-${version}";
6 name = "${pname}-${version}";
8 src = fetchurl {
8 src = fetchurl {
9 url = "https://github.com/LedgerHQ/${pname}/releases/download/v${version}/${pname}-${version}-linux-x86_64.AppImage";
9 url = "https://github.com/LedgerHQ/${pname}/releases/download/v${version}/${pname}-${version}-linux-x86_64.AppImage";
10− hash = "sha256-2L1iVPLCCIQ6qBqkg+GmiqMmknHmdDLUrysN8vcW2YQ=";
10+ hash = "sha256-ktmGXEWoCrhx9hGau2VkQi0GMa53EqHV1wGtUk6kicc=";
13 appimageContents = appimageTools.extractType2 {
13 appimageContents = appimageTools.extractType2 {
pkgs/applications/blockchains/lightning-loop/default.nix+3−3
@@ -5,16 +5,16 @@
6buildGoModule rec {
6buildGoModule rec {
7 pname = "lightning-loop";
7 pname = "lightning-loop";
8− version = "0.17.0-beta";
8+ version = "0.18.0-beta";
10 src = fetchFromGitHub {
10 src = fetchFromGitHub {
11 owner = "lightninglabs";
11 owner = "lightninglabs";
12 repo = "loop";
12 repo = "loop";
13 rev = "v${version}";
13 rev = "v${version}";
14− sha256 = "0hjawagn1dfgj67i52bvf3phvm9f9708z3jqs6cvyz0w7vp107py";
14+ sha256 = "1kg5nlvb4lb3cjn84wcylhq0l73d2n6rg4n1srnxmgs96v41y78f";
17− vendorSha256 = "1fpc73hwdn3baz5ykrykvqdr5861gj9p6liy8qll5525kdv560f6";
17+ vendorSha256 = "0q3wbjfaqdj29sjlhx6fhc0p4d12aa31s6ia36jalcvf659ybb0l";
19 subPackages = [ "cmd/loop" "cmd/loopd" ];
19 subPackages = [ "cmd/loop" "cmd/loopd" ];
pkgs/applications/blockchains/lnd/default.nix+2−2
@@ -6,13 +6,13 @@
7buildGoModule rec {
7buildGoModule rec {
8 pname = "lnd";
8 pname = "lnd";
9− version = "0.14.2-beta";
9+ version = "0.14.3-beta";
11 src = fetchFromGitHub {
11 src = fetchFromGitHub {
12 owner = "lightningnetwork";
12 owner = "lightningnetwork";
13 repo = "lnd";
13 repo = "lnd";
14 rev = "v${version}";
14 rev = "v${version}";
15− sha256 = "sha256-JOKitxxWcTlGlxYR1XpySZlI2fT9jgBrOxNUwT/sqdQ=";
15+ sha256 = "sha256-ZTvGFmjhQBIWqMGatMAlX59uVyl1oUKo7L5jiz571Gc";
18 vendorSha256 = "sha256-shDmJcEyobY7Ih1MHMEY2GQnzAffsH/y4J1bme/bT7I=";
18 vendorSha256 = "sha256-shDmJcEyobY7Ih1MHMEY2GQnzAffsH/y4J1bme/bT7I=";
pkgs/applications/blockchains/monero-cli/default.nix+2−2
@@ -9,13 +9,13 @@
10stdenv.mkDerivation rec {
10stdenv.mkDerivation rec {
11 pname = "monero-cli";
11 pname = "monero-cli";
12− version = "0.17.3.0";
12+ version = "0.17.3.2";
14 src = fetchFromGitHub {
14 src = fetchFromGitHub {
15 owner = "monero-project";
15 owner = "monero-project";
16 repo = "monero";
16 repo = "monero";
17 rev = "v${version}";
17 rev = "v${version}";
18− sha256 = "1spsf7m3x4psp9s7mivr6x4886jnbq4i8ll2dl8bv5bsdhcd3pjm";
18+ sha256 = "19sgcbli7fc1l6ms7ma6hcz1mmpbnd296lc8a19rl410acpv45zy";
19 fetchSubmodules = true;
19 fetchSubmodules = true;
pkgs/applications/blockchains/monero-gui/default.nix+2−2
@@ -14,13 +14,13 @@
15stdenv.mkDerivation rec {
15stdenv.mkDerivation rec {
16 pname = "monero-gui";
16 pname = "monero-gui";
17− version = "0.17.3.1";
17+ version = "0.17.3.2";
19 src = fetchFromGitHub {
19 src = fetchFromGitHub {
20 owner = "monero-project";
20 owner = "monero-project";
21 repo = "monero-gui";
21 repo = "monero-gui";
22 rev = "v${version}";
22 rev = "v${version}";
23− sha256 = "sha256-RrchaqFmL4W9F8DhZfvxm7mHMkx/OX8K9e8uNFXWubo=";
23+ sha256 = "10gincmgc0qpsgm94m1fqfy9j8jn9g1gjk12lcqnf77kvcnz37hq";
26 nativeBuildInputs = [
26 nativeBuildInputs = [
pkgs/applications/blockchains/namecoin/default.nix+5−6
@@ -1,15 +1,14 @@
1{ lib, stdenv, fetchFromGitHub, openssl, boost, libevent, autoreconfHook, db4, miniupnpc, eject, pkg-config, qt4, protobuf, qrencode, hexdump
1{ lib, stdenv, fetchFromGitHub, openssl, boost, libevent, autoreconfHook, db4, miniupnpc, eject, pkg-config, qt4, protobuf, qrencode, hexdump
2, withGui }:
2, withGui }:
5stdenv.mkDerivation rec {
4stdenv.mkDerivation rec {
6− pname = "namecoin" + optionalString (!withGui) "d";
5+ pname = "namecoin" + lib.optionalString (!withGui) "d";
7− version = "nc22.0";
6+ version = "22.0";
9 src = fetchFromGitHub {
8 src = fetchFromGitHub {
10 owner = "namecoin";
9 owner = "namecoin";
11 repo = "namecoin-core";
10 repo = "namecoin-core";
12− rev = version;
11+ rev = "nc${version}";
13 sha256 = "sha256-Z3CLDe0c4IpFPPTie8yoh0kcuvGmiegSgl4ITNSDkgY=";
12 sha256 = "sha256-Z3CLDe0c4IpFPPTie8yoh0kcuvGmiegSgl4ITNSDkgY=";
@@ -26,7 +25,7 @@ stdenv.mkDerivation rec {
29− ] ++ optionals withGui [
28+ ] ++ lib.optionals withGui [
@@ -38,7 +37,7 @@ stdenv.mkDerivation rec {
38 "--with-boost-libdir=${boost.out}/lib"
37 "--with-boost-libdir=${boost.out}/lib"
41− meta = {
40+ meta = with lib; {
42 description = "Decentralized open source information registration and transfer system based on the Bitcoin cryptocurrency";
41 description = "Decentralized open source information registration and transfer system based on the Bitcoin cryptocurrency";
43 homepage = "https://namecoin.org";
42 homepage = "https://namecoin.org";
44 license = licenses.mit;
43 license = licenses.mit;
pkgs/applications/blockchains/nbxplorer/default.nix+2−2
@@ -2,13 +2,13 @@
3buildDotnetModule rec {
3buildDotnetModule rec {
4 pname = "nbxplorer";
4 pname = "nbxplorer";
5− version = "2.2.20";
5+ version = "2.3.20";
7 src = fetchFromGitHub {
7 src = fetchFromGitHub {
8 owner = "dgarage";
8 owner = "dgarage";
9 repo = "NBXplorer";
9 repo = "NBXplorer";
10 rev = "v${version}";
10 rev = "v${version}";
11− sha256 = "sha256-C3REnfecNwf3dtk6aLYAEsedHRlIrQZAokXtf6KI8U0=";
11+ sha256 = "sha256-cAko5s1bFSI7HOcXg/tZtdMMe0S9zkRBeZ6bispxgwc=";
14 projectFile = "NBXplorer/NBXplorer.csproj";
14 projectFile = "NBXplorer/NBXplorer.csproj";
pkgs/applications/blockchains/nbxplorer/deps.nix+15
@@ -1,4 +1,9 @@
1{ fetchNuGet }: [
1{ fetchNuGet }: [
5+ sha256 = "15hxrchfgiqnmgf8fqhrf4pb4c8l9igg5qnkw9yk3rkagcqfkk91";
2 (fetchNuGet {
7 (fetchNuGet {
3 pname = "DBTrie";
8 pname = "DBTrie";
4 version = "1.0.39";
9 version = "1.0.39";
@@ -249,6 +254,11 @@
249 version = "1.0.0.18";
254 version = "1.0.0.18";
250 sha256 = "0lgssxafv6cqlw21fb79fm0fcln0clgsk6zadcwrnjv9vampfw7b";
255 sha256 = "0lgssxafv6cqlw21fb79fm0fcln0clgsk6zadcwrnjv9vampfw7b";
260+ sha256 = "1crzgi4dfbn8r381m9rvkma5xi2q7gqdzgxhc36hy3r0y63v1l8q";
252 (fetchNuGet {
262 (fetchNuGet {
253 pname = "NuGet.Frameworks";
263 pname = "NuGet.Frameworks";
254 version = "5.0.0";
264 version = "5.0.0";
@@ -754,6 +764,11 @@
754 version = "4.5.0";
764 version = "4.5.0";
755 sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43";
765 sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43";
768+ pname = "System.Runtime.CompilerServices.Unsafe";
770+ sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc";
757 (fetchNuGet {
772 (fetchNuGet {
758 pname = "System.Runtime.Extensions";
773 pname = "System.Runtime.Extensions";
759 version = "4.1.0";
774 version = "4.1.0";
pkgs/applications/blockchains/nearcore/default.nixnew file+42
@@ -0,0 +1,42 @@
1+{ rustPlatform, lib, fetchFromGitHub
2+, zlib, elfutils, openssl
3+, cmake, python3, pkg-config, protobuf, perl, llvmPackages
5+rustPlatform.buildRustPackage rec {
6+ #https://github.com/near/nearcore
9+ src = fetchFromGitHub {
12+ # there is also a branch for this version number, so we need to be explicit
13+ rev = "refs/tags/${version}";
14+ sha256 = "sha256-7hiBqJLGIf+kNKJvMQ7KtGZm/SWLY3pT7YDlwbm3HDM=";
17+ cargoSha256 = "sha256-EGv4CibSHL9oTAdWK7d/SOzZWPcEB16hTWlWHjKU4wc=";
19+ # don't build SDK samples that require wasm-enabled rust
20+ cargoBuildFlags = [ "-p" "neard" ];
21+ doCheck = false; # needs network
23+ buildInputs = [ zlib elfutils openssl ];
24+ nativeBuildInputs = [
32+ LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
33+ BINDGEN_EXTRA_CLANG_ARGS = "-isystem ${llvmPackages.libclang.lib}/lib/clang/${lib.getVersion llvmPackages.clang}/include";
36+ description = "Reference client for NEAR Protocol";
37+ homepage = "https://github.com/near/nearcore";
38+ license = licenses.mit;
39+ maintainers = with maintainers; [ mic92 ];
40+ platforms = platforms.unix;
pkgs/applications/blockchains/openethereum/default.nix+3−3
@@ -12,16 +12,16 @@
13rustPlatform.buildRustPackage rec {
13rustPlatform.buildRustPackage rec {
14 pname = "openethereum";
14 pname = "openethereum";
15− version = "3.2.6";
15+ version = "3.3.5";
17 src = fetchFromGitHub {
17 src = fetchFromGitHub {
18 owner = "openethereum";
18 owner = "openethereum";
19 repo = "openethereum";
19 repo = "openethereum";
20 rev = "v${version}";
20 rev = "v${version}";
21− sha256 = "0lxps3cyg8dzb9qr1kg91s9jc3mnm6hxybwcbhva38pcq4yc40xc";
21+ sha256 = "sha256-PpRRoufuZ9fXbLonMAo6qaA/jtJZXW98uM0BEXdJ2oU=";
24− cargoSha256 = "08yrpls3szmw6vy2c4d6b1k907ga0809ylvyx0zb6f8mp8z7ahl2";
24+ cargoSha256 = "sha256-xXUNXQvVq6XqW/hmCfJ2/mHKkZu0amRZ77vX+Jib0iM=";
26 nativeBuildInputs = [ cmake pkg-config ];
26 nativeBuildInputs = [ cmake pkg-config ];
pkgs/applications/blockchains/solana/default.nix+9−4
@@ -10,19 +10,23 @@
14+ pinData = lib.importJSON ./pin.json;
15+ version = pinData.version;
16+ sha256 = pinData.sha256;
17+ cargoSha256 = pinData.cargoSha256;
13rustPlatform.buildRustPackage rec {
19rustPlatform.buildRustPackage rec {
14 pname = "solana-testnet-cli";
20 pname = "solana-testnet-cli";
15− version = "1.9.2";
21+ inherit version cargoSha256;
17 src = fetchFromGitHub {
23 src = fetchFromGitHub {
18 owner = "solana-labs";
24 owner = "solana-labs";
19 repo = "solana";
25 repo = "solana";
20 rev = "v${version}";
26 rev = "v${version}";
21− sha256 = "sha256-wrv35vBohLztMZPb6gfZdCaXcjj/Y7vnQqINaI6dBM4=";
27+ inherit sha256;
24− cargoSha256 = "sha256-A5uVa+cRmrkVyw7MFH4QAr0VIFi18wcc2VPFvQyT9EM=";
26 buildAndTestSubdir = "cli";
30 buildAndTestSubdir = "cli";
28 nativeBuildInputs = lib.optionals stdenv.isLinux [ protobuf pkg-config ];
32 nativeBuildInputs = lib.optionals stdenv.isLinux [ protobuf pkg-config ];
@@ -53,4 +57,5 @@ rustPlatform.buildRustPackage rec {
53 maintainers = with maintainers; [ happysalada ];
57 maintainers = with maintainers; [ happysalada ];
54 platforms = platforms.unix;
58 platforms = platforms.unix;
60+ passthru.updateScript = ./update.sh;
pkgs/applications/blockchains/solana/pin.jsonnew file+5
@@ -0,0 +1,5 @@
3+ "sha256": "sha256-y7+ogMJ5E9E/+ZaTCHWOQWG7iR+BGuVqvlNUDT++Ghc=",
4+ "cargoSha256": "sha256-7EULmmztt+INvSdluvvX5xbE2hWKAmHiW0MEYIPNPw4="
pkgs/applications/blockchains/solana/update.shnew file+33
@@ -0,0 +1,33 @@
1+#!/usr/bin/env nix-shell
2+#! nix-shell -i oil -p jq sd nix-prefetch-github ripgrep
4+# TODO set to `verbose` or `extdebug` once implemented in oil
6+# we need failures inside of command subs to get the correct cargoSha256
7+shopt --unset inherit_errexit
9+const directory = $(dirname $0 | xargs realpath)
10+const owner = "solana-labs"
12+const latest_rev = $(curl -q https://api.github.com/repos/${owner}/${repo}/releases/latest | \
14+const latest_version = $(echo $latest_rev | sd 'v' '')
15+const current_version = $(jq -r '.version' $directory/pin.json)
16+if ("$latest_version" === "$current_version") {
17+ echo "solana is already up-to-date"
20+ const tarball_meta = $(nix-prefetch-github $owner $repo --rev "$latest_rev")
21+ const tarball_hash = "sha256-$(echo $tarball_meta | jq -r '.sha256')"
23+ jq ".version = \"$latest_version\" | \
24+ .\"sha256\" = \"$tarball_hash\" | \
25+ .\"cargoSha256\" = \"\"" $directory/pin.json | sponge $directory/pin.json
27+ const new_cargo_sha256 = $(nix-build -A solana-testnet 2>&1 | \
32+ jq ".cargoSha256 = \"$new_cargo_sha256\"" $directory/pin.json | sponge $directory/pin.json
pkgs/applications/blockchains/wasabibackend/default.nix+1−1
@@ -32,7 +32,7 @@ buildDotnetModule rec {
33 preConfigure = ''
33 preConfigure = ''
34 makeWrapperArgs+=(
34 makeWrapperArgs+=(
35− --run "cd $out/lib/${pname}"
35+ --chdir "$out/lib/${pname}"
pkgs/applications/blockchains/zcash/default.nix+6−6
@@ -1,24 +1,24 @@
1{ rust, rustPlatform, stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper
1{ rust, rustPlatform, stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper
2−, cargo, pkg-config, curl, coreutils, boost175, db62, hexdump, libsodium
2+, cargo, pkg-config, curl, coreutils, boost177, db62, hexdump, libsodium
3, libevent, utf8cpp, util-linux, withDaemon ? true, withMining ? true
3, libevent, utf8cpp, util-linux, withDaemon ? true, withMining ? true
4, withUtils ? true, withWallet ? true, withZmq ? true, zeromq
4, withUtils ? true, withWallet ? true, withZmq ? true, zeromq
7rustPlatform.buildRustPackage.override { stdenv = stdenv; } rec {
7rustPlatform.buildRustPackage.override { stdenv = stdenv; } rec {
8 pname = "zcash";
8 pname = "zcash";
9− version = "4.6.0-1";
9+ version = "4.6.0-2";
11 src = fetchFromGitHub {
11 src = fetchFromGitHub {
12 owner = "zcash";
12 owner = "zcash";
13 repo = "zcash";
13 repo = "zcash";
14 rev = "v${version}";
14 rev = "v${version}";
15− sha256 = "sha256-YJ5ufo+LYbOTr9SyiEzzp1pcSx6+cHSvDLBOIcx9X+4=";
15+ sha256 = "sha256-RvUa8CKPBFfsqzrJkPHePZMqpCfyVafrUbftMdTviHA=";
18− cargoSha256 = "sha256-m/SBHv3BNYKkSXxHnCdVng3blbHrTc/HxX/nEIa1DnM=";
18+ cargoSha256 = "sha256-qWimataBZ/rLDOLgetNfFAzi/psXcJV54b3WGm9k+b4=";
20 nativeBuildInputs = [ autoreconfHook cargo hexdump makeWrapper pkg-config ];
20 nativeBuildInputs = [ autoreconfHook cargo hexdump makeWrapper pkg-config ];
21− buildInputs = [ boost175 libevent libsodium utf8cpp ]
21+ buildInputs = [ boost177 libevent libsodium utf8cpp ]
22 ++ lib.optional withWallet db62
22 ++ lib.optional withWallet db62
23 ++ lib.optional withZmq zeromq;
23 ++ lib.optional withZmq zeromq;
@@ -37,7 +37,7 @@ rustPlatform.buildRustPackage.override { stdenv = stdenv; } rec {
38 configureFlags = [
38 configureFlags = [
39 "--disable-tests"
39 "--disable-tests"
40− "--with-boost-libdir=${lib.getLib boost175}/lib"
40+ "--with-boost-libdir=${lib.getLib boost177}/lib"
41 "CXXFLAGS=-I${lib.getDev utf8cpp}/include/utf8cpp"
41 "CXXFLAGS=-I${lib.getDev utf8cpp}/include/utf8cpp"
42 "RUST_TARGET=${rust.toRustTargetSpec stdenv.hostPlatform}"
42 "RUST_TARGET=${rust.toRustTargetSpec stdenv.hostPlatform}"
43 ] ++ lib.optional (!withWallet) "--disable-wallet"
43 ] ++ lib.optional (!withWallet) "--disable-wallet"
pkgs/applications/editors/android-studio/common.nix+5−3
@@ -52,6 +52,7 @@
52, xkeyboard_config
52, xkeyboard_config
54, makeDesktopItem
54, makeDesktopItem
55+, tiling_wm # if we are using a tiling wm, need to set _JAVA_AWT_WM_NONREPARENTING in wrapper
@@ -80,6 +81,7 @@ let
80 --set-default JAVA_HOME "$out/jre" \
81 --set-default JAVA_HOME "$out/jre" \
81 --set ANDROID_EMULATOR_USE_SYSTEM_LIBS 1 \
82 --set ANDROID_EMULATOR_USE_SYSTEM_LIBS 1 \
82 --set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb" \
83 --set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb" \
84+ ${lib.optionalString tiling_wm "--set _JAVA_AWT_WM_NONREPARENTING 1"} \
83 --set FONTCONFIG_FILE ${fontsConf} \
85 --set FONTCONFIG_FILE ${fontsConf} \
84 --prefix PATH : "${lib.makeBinPath [
86 --prefix PATH : "${lib.makeBinPath [
@@ -216,9 +218,9 @@ in runCommand
216 # source-code itself).
218 # source-code itself).
217 platforms = [ "x86_64-linux" ];
219 platforms = [ "x86_64-linux" ];
218 maintainers = with maintainers; rec {
220 maintainers = with maintainers; rec {
219− stable = [ fabianhjr ];
221+ stable = [ ];
220− beta = [ fabianhjr ];
222+ beta = [ ];
221− canary = [ fabianhjr ];
223+ canary = [ ];
222 dev = canary;
224 dev = canary;
223 }."${channel}";
225 }."${channel}";
pkgs/applications/editors/android-studio/default.nix+8−7
@@ -1,4 +1,4 @@
1−{ callPackage, makeFontsConf, gnome2, buildFHSUserEnv }:
1+{ callPackage, makeFontsConf, gnome2, buildFHSUserEnv, tiling_wm ? false }:
4 mkStudio = opts: callPackage (import ./common.nix opts) {
4 mkStudio = opts: callPackage (import ./common.nix opts) {
@@ -7,18 +7,19 @@ let
8 inherit (gnome2) GConf gnome_vfs;
8 inherit (gnome2) GConf gnome_vfs;
9 inherit buildFHSUserEnv;
9 inherit buildFHSUserEnv;
11 stableVersion = {
12 stableVersion = {
12− version = "2021.1.1.21"; # "Android Studio Bumblebee (2021.1.1 Patch 1)"
13+ version = "2021.1.1.23"; # "Android Studio Bumblebee (2021.1.1 Patch 3)"
13− sha256Hash = "PeMJIILfaunTlpR4EV76qQlTlZDcWoKes61qe9W9oqQ=";
14+ sha256Hash = "1kxb19qf7bs5lyfgr8vamakp1nf2wlxlwwni1kihza67ib6hcxdk";
15 betaVersion = {
16 betaVersion = {
16− version = "2021.2.1.8"; # "Android Studio Chipmunk (2021.2.1) Beta 1"
17+ version = "2021.2.1.11"; # "Android Studio Chipmunk (2021.2.1) Beta 4"
17− sha256Hash = "bPfs4kw7czG9CbEgrzn0bQXdT03jyqPVqtaIuVBFSmc=";
18+ sha256Hash = "0in8x6v957y9hsnz5ak845pdpvgvnvlm0s6r9y8f27zkm947vbjd";
19 latestVersion = { # canary & dev
20 latestVersion = { # canary & dev
20− version = "2021.3.1.1"; # "Android Studio Dolphin (2021.3.1) Canary 1"
21+ version = "2021.3.1.7"; # "Android Studio Dolphin (2021.3.1) Canary 7"
21− sha256Hash = "W3pNQBM7WdDScQo5b8q5Va5NTgl73uZu0ks/zDMb4aA=";
22+ sha256Hash = "02jwy3q2ccs7l3snm8w40znzk54v2h1sljdr3d0yh7sy0qyn32k1";
24 # Attributes are named by their corresponding release channels
25 # Attributes are named by their corresponding release channels
pkgs/applications/editors/bluej/default.nix+35−8
@@ -1,8 +1,9 @@
1−{ lib, stdenv, fetchurl, makeWrapper, jdk }:
1+{ lib, stdenv, fetchurl, jdk, glib, wrapGAppsHook }:
3stdenv.mkDerivation rec {
3stdenv.mkDerivation rec {
4 pname = "bluej";
4 pname = "bluej";
5 version = "5.0.3";
5 version = "5.0.3";
6 src = fetchurl {
7 src = fetchurl {
7 # We use the deb here. First instinct might be to go for the "generic" JAR
8 # We use the deb here. First instinct might be to go for the "generic" JAR
8 # download, but that is actually a graphical installer that is much harder
9 # download, but that is actually a graphical installer that is much harder
@@ -11,18 +12,44 @@ stdenv.mkDerivation rec {
11 sha256 = "sha256-OarqmptxZc7xEEYeoCVqHXkAvfzfSYx5nUp/iWPyoqw=";
12 sha256 = "sha256-OarqmptxZc7xEEYeoCVqHXkAvfzfSYx5nUp/iWPyoqw=";
14− nativeBuildInputs = [ makeWrapper ];
15+ nativeBuildInputs = [ wrapGAppsHook ];
16+ buildInputs = [ glib ];
16− unpackPhase = ''
18+ sourceRoot = ".";
20+ unpackCmdHooks+=(_tryDebData)
22+ if ! [[ "$1" =~ \.deb$ ]]; then return 1; fi
17− ar xf $src
23+ ar xf "$1"
24+ if ! [[ -e data.tar.xz ]]; then return 1; fi
18− tar xf data.tar.xz
25+ unpackFile data.tar.xz
21 installPhase = ''
29 installPhase = ''
32+ if [ -n "$prefix" ]; then
22− mkdir -p $out
33+ mkdir -p "$prefix"
23− cp -r usr/* $out
34+ fi
38+ if shopt -q dotglob; then dotglobOpt=$?; else dotglobOpt=$?; fi
40+ for file in usr/*; do
43+ if (( !dotglobOpt )); then shopt -u dotglob; fi
48+ dontWrapGApps = true;
25 makeWrapper ${jdk}/bin/java $out/bin/bluej \
51 makeWrapper ${jdk}/bin/java $out/bin/bluej \
52+ "''${gappsWrapperArgs[@]}" \
26 --add-flags "-Djavafx.embed.singleThread=true -Dawt.useSystemAAFontSettings=on -Xmx512M -cp \"$out/share/bluej/bluej.jar\" bluej.Boot"
53 --add-flags "-Djavafx.embed.singleThread=true -Dawt.useSystemAAFontSettings=on -Xmx512M -cp \"$out/share/bluej/bluej.jar\" bluej.Boot"
@@ -30,7 +57,7 @@ stdenv.mkDerivation rec {
30 description = "A simple integrated development environment for Java";
57 description = "A simple integrated development environment for Java";
31 homepage = "https://www.bluej.org/";
58 homepage = "https://www.bluej.org/";
32 license = licenses.gpl2ClasspathPlus;
59 license = licenses.gpl2ClasspathPlus;
33− maintainers = [ maintainers.chvp ];
60+ maintainers = with maintainers; [ chvp ];
34 platforms = platforms.unix;
61 platforms = platforms.unix;
pkgs/applications/editors/cudatext/default.nix+2−2
@@ -38,13 +38,13 @@ let
39stdenv.mkDerivation rec {
39stdenv.mkDerivation rec {
40 pname = "cudatext";
40 pname = "cudatext";
41− version = "1.160.0";
41+ version = "1.163.0";
43 src = fetchFromGitHub {
43 src = fetchFromGitHub {
44 owner = "Alexey-T";
44 owner = "Alexey-T";
45 repo = "CudaText";
45 repo = "CudaText";
46 rev = version;
46 rev = version;
47− sha256 = "sha256-42V6RFa+mAXyaUuKeDQa9Voi1MjnzcVl+cOA65VabxM=";
47+ sha256 = "sha256-4jGLyAE202GAjaypubKGW1edyKqOti/yTwstC/R94iE=";
50 postPatch = ''
50 postPatch = ''
pkgs/applications/editors/cudatext/deps.json+12−12
@@ -1,23 +1,23 @@
2 "EncConv": {
2 "EncConv": {
3 "owner": "Alexey-T",
3 "owner": "Alexey-T",
4− "rev": "2022.03.02",
4+ "rev": "2022.04.18",
5− "sha256": "sha256-fBN6Ix5CqhzMbNrWGn6nw6+JRDmEfqe6o8JGHERkiPE="
5+ "sha256": "sha256-UV07a9qNzd0JQWCq/eD0K9fA7kxAKj5OP7dOpECo8xw="
7 "ATBinHex-Lazarus": {
7 "ATBinHex-Lazarus": {
8 "owner": "Alexey-T",
8 "owner": "Alexey-T",
9− "rev": "2021.11.17",
9+ "rev": "2022.04.16",
10− "sha256": "sha256-wdYH0sISFNx42zt07gLn9ANxcyrq3WrbRhWfTFgPQWw="
10+ "sha256": "sha256-7ye73KSpoPvvxBNwBC3uloufFE+448RDyNScumk1ViE="
12 "ATFlatControls": {
12 "ATFlatControls": {
13 "owner": "Alexey-T",
13 "owner": "Alexey-T",
14− "rev": "2022.03.17",
14+ "rev": "2022.04.18",
15− "sha256": "sha256-zpirFZcqIT53tZhgxQGdwVB6pA98SQLr1o3f+Lhq2QY="
15+ "sha256": "sha256-Bp/pkbTPLiVaDSstzTaNjKb+msPw8Tuny75n/aYBpUc="
17 "ATSynEdit": {
17 "ATSynEdit": {
18 "owner": "Alexey-T",
18 "owner": "Alexey-T",
19− "rev": "2022.04.06",
19+ "rev": "2022.04.26",
20− "sha256": "sha256-EnPOAl1qsdcYzmUgT5rSYqY/xOLSfDcMNCXIG8LC4H0="
20+ "sha256": "sha256-aItWkjnFqxeyEywELEBkuvMH1zfI4jJFL10CexSktxU="
22 "ATSynEdit_Cmp": {
22 "ATSynEdit_Cmp": {
23 "owner": "Alexey-T",
23 "owner": "Alexey-T",
@@ -26,13 +26,13 @@
27 "EControl": {
27 "EControl": {
28 "owner": "Alexey-T",
28 "owner": "Alexey-T",
29− "rev": "2022.03.28",
29+ "rev": "2022.04.21",
30− "sha256": "sha256-jh3lqisiPNMxCapP6O5oJdUL3PLQ3JyomtgWix+bML0="
30+ "sha256": "sha256-le6ulGFUNjeipYQKzVFezFb9u/0IcQcu5BMxFaIZdyw="
32 "ATSynEdit_Ex": {
32 "ATSynEdit_Ex": {
33 "owner": "Alexey-T",
33 "owner": "Alexey-T",
34− "rev": "2022.03.28",
34+ "rev": "2022.04.11",
35− "sha256": "sha256-TpAaL7/bhnrQgAq1mUTdEWXecSmznWy/iAw+TMMrQGo="
35+ "sha256": "sha256-wzE6lNhrXsBOP+Zx+qAcj6Hhf87qqDaqKf9up7I3ZUo="
37 "Python-for-Lazarus": {
37 "Python-for-Lazarus": {
38 "owner": "Alexey-T",
38 "owner": "Alexey-T",
pkgs/applications/editors/emacs/27.nixdeleted−16
@@ -1,16 +0,0 @@
1−import ./generic.nix (rec {
3− sha256 = "sha256-tKfMTnjmPzeGJOCRkhW5EK9bsqCvyBn60pgnLp9Awbk=";
4− patches = fetchpatch: [
6− name = "fix-aarch64-darwin-triplet.patch";
7− url = "https://git.savannah.gnu.org/cgit/emacs.git/patch/?id=a88f63500e475f842e5fbdd9abba4ce122cdb082";
8− sha256 = "sha256-RF9b5PojFUAjh2TDUW4+HaWveV30Spy1iAXhaWf1ZVg=";
12− url = "https://src.fedoraproject.org/rpms/emacs/raw/181aafcdb7ee2fded9fce4cfc448f27edccc927f/f/emacs-glibc-2.34.patch";
13− sha256 = "sha256-2o3C/jhZPl2OW/LmVPt/fhdwbS9NOdF9lVEF1Kn9aEk=";
pkgs/applications/editors/emacs/28.nixnew file+5
@@ -0,0 +1,5 @@
1+import ./generic.nix (rec {
3+ sha256 = "sha256-D33wnlxhx0LyG9WZaQDj2II3tG0HcJdZTC4dSA3lrgY=";
pkgs/applications/editors/emacs/at-fdcwd.patchdeleted−15
@@ -1,15 +0,0 @@
1−diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h
2−index 84ede3e..8e8f42e 100644
3−--- a/lib/careadlinkat.h
4−+++ b/lib/careadlinkat.h
15− /* Assuming the current directory is FD, get the symbolic link value
pkgs/applications/editors/emacs/elisp-packages/cedet/default.nixdeleted−52
@@ -1,52 +0,0 @@
1−{ lib, fetchurl, stdenv, emacs, python }:
3−stdenv.mkDerivation rec {
8− url = "mirror://sourceforge/cedet/cedet-${version}.tar.gz";
9− sha256 = "0p2bwlpwwa019axvgj09xkxbr53j0pq23d46s4la9jfhl47nbh22";
12− buildInputs = [ emacs python ];
15− checkPhase = "make utest";
18− mkdir -p "$out/share/emacs/site-lisp"
19− cp -v */*.el */*/*.el */*.elc */*/*.elc "$out/share/emacs/site-lisp"
20− chmod a-x "$out/share/emacs/site-lisp/"*
22− mkdir -p "$out/share/info"
23− cp -v */*.info* */*/*.info* "$out/share/info"
27− description = "CEDET, a Collection of Emacs Development Environment Tools";
30− CEDET is a collection of tools written with the end goal of
31− creating an advanced development environment in Emacs.
33− Emacs already is a great environment for writing software, but
34− there are additional areas that need improvement. Many new
35− ideas for integrated environments have been developed in newer
36− products, such as JBuilder, Eclipse, or KDevelop. CEDET is a
37− project which brings together several different tools needed to
38− implement advanced features.
40− CEDET includes EIEIO (Enhanced Implementation of Emacs
41− Interpreted Objects), Semantic, SRecode, Speedbar, EDE (Emacs
42− Development Environment), and COGRE (COnnected GRaph Editor).
45− license = lib.licenses.gpl2Plus;
47− homepage = "http://cedet.sourceforge.net/";
49− # Fails with `semantic-idle.el:42:1:Error: Invalid function: class-p`
pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+124−45
@@ -234,10 +234,10 @@
234 elpaBuild {
234 elpaBuild {
235 pname = "auctex";
235 pname = "auctex";
236 ename = "auctex";
236 ename = "auctex";
237− version = "13.1.1";
237+ version = "13.1.2";
238 src = fetchurl {
238 src = fetchurl {
239− url = "https://elpa.gnu.org/packages/auctex-13.1.1.tar";
239+ url = "https://elpa.gnu.org/packages/auctex-13.1.2.tar";
240− sha256 = "193sqq2wiq3lg99m8hifl9rjxdazpy638r99sqvmxmkfm98cr34r";
240+ sha256 = "0j79y7iz0g3i36w5l91l2dljs8b4sx42f7q25z2963mvhfvrbp10";
242 packageRequires = [ emacs ];
242 packageRequires = [ emacs ];
@@ -309,10 +309,10 @@
309 elpaBuild {
309 elpaBuild {
310 pname = "bbdb";
310 pname = "bbdb";
311 ename = "bbdb";
311 ename = "bbdb";
312− version = "3.2.1";
312+ version = "3.2.2.1";
313 src = fetchurl {
313 src = fetchurl {
314− url = "https://elpa.gnu.org/packages/bbdb-3.2.1.tar";
314+ url = "https://elpa.gnu.org/packages/bbdb-3.2.2.1.tar";
315− sha256 = "01vsnifs47krq1srgdkk9agbv3p2fykl9nydr4nrfjxbqpnyh3ij";
315+ sha256 = "060nd6vhwwh56jc1mvmyj6mn6kx7zgmbhrkfv9sqdx7h96bcrsbh";
317 packageRequires = [ cl-lib emacs ];
317 packageRequires = [ cl-lib emacs ];
@@ -384,10 +384,10 @@
384 elpaBuild {
384 elpaBuild {
385 pname = "boxy";
385 pname = "boxy";
386 ename = "boxy";
386 ename = "boxy";
387− version = "1.0.4";
387+ version = "1.0.5";
388 src = fetchurl {
388 src = fetchurl {
389− url = "https://elpa.gnu.org/packages/boxy-1.0.4.tar";
389+ url = "https://elpa.gnu.org/packages/boxy-1.0.5.tar";
390− sha256 = "0cwzjyj8yjg13b63va6pnj01m6kc5g3zx69c9w2ysl2wk24zn6dz";
390+ sha256 = "0g608nhg160p9gflw52h3247x35r0g6bl89yq35jbsc7fnw6m5ry";
392 packageRequires = [ emacs ];
392 packageRequires = [ emacs ];
@@ -654,6 +654,21 @@
654 license = lib.licenses.free;
654 license = lib.licenses.free;
657+ comint-mime = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
659+ pname = "comint-mime";
660+ ename = "comint-mime";
663+ url = "https://elpa.gnu.org/packages/comint-mime-0.1.tar";
664+ sha256 = "1ak0ylqdslsb6a64dkpvappdbqnl1i8lc17jla9pqqs7r16sh3n0";
666+ packageRequires = [ emacs ];
668+ homepage = "https://elpa.gnu.org/packages/comint-mime.html";
669+ license = lib.licenses.free;
657 compact-docstrings = callPackage ({ elpaBuild, fetchurl, lib }:
672 compact-docstrings = callPackage ({ elpaBuild, fetchurl, lib }:
658 elpaBuild {
673 elpaBuild {
659 pname = "compact-docstrings";
674 pname = "compact-docstrings";
@@ -737,6 +752,21 @@
737 license = lib.licenses.free;
752 license = lib.licenses.free;
755+ compat = callPackage ({ elpaBuild, emacs, fetchurl, lib, nadvice }:
759+ version = "28.1.0.3";
761+ url = "https://elpa.gnu.org/packages/compat-28.1.0.3.tar";
762+ sha256 = "12h06ab57hhjq434cf39g69ain6dpqq8a0h9xc91kvjsiz9chqhd";
764+ packageRequires = [ emacs nadvice ];
766+ homepage = "https://elpa.gnu.org/packages/compat.html";
767+ license = lib.licenses.free;
740 consult = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
770 consult = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
741 elpaBuild {
771 elpaBuild {
742 pname = "consult";
772 pname = "consult";
@@ -771,10 +801,10 @@
771 elpaBuild {
801 elpaBuild {
772 pname = "corfu";
802 pname = "corfu";
773 ename = "corfu";
803 ename = "corfu";
774− version = "0.20";
804+ version = "0.21";
775 src = fetchurl {
805 src = fetchurl {
776− url = "https://elpa.gnu.org/packages/corfu-0.20.tar";
806+ url = "https://elpa.gnu.org/packages/corfu-0.21.tar";
777− sha256 = "03yycimbqs4ixz7lxp7f1b4fipq6kl2bbjnl87r0n9x8mzfslbdl";
807+ sha256 = "1jabx61ajiysd3yqkraanlx9gnkz1qs6d94wjc5a2ran58iyknyr";
779 packageRequires = [ emacs ];
809 packageRequires = [ emacs ];
@@ -876,10 +906,10 @@
876 elpaBuild {
906 elpaBuild {
877 pname = "csv-mode";
907 pname = "csv-mode";
878 ename = "csv-mode";
908 ename = "csv-mode";
879− version = "1.18";
909+ version = "1.19";
880 src = fetchurl {
910 src = fetchurl {
881− url = "https://elpa.gnu.org/packages/csv-mode-1.18.tar";
911+ url = "https://elpa.gnu.org/packages/csv-mode-1.19.tar";
882− sha256 = "0fv7hvsfbc9n4hsgg3ywk8qf4ig5a986zfq0lwnjj8pcz1bpmrxj";
912+ sha256 = "0sslxlnw10ba6m711p4ps4zsfjz56dsp2945ga5z0y8d860pliqh";
884 packageRequires = [ cl-lib emacs ];
914 packageRequires = [ cl-lib emacs ];
@@ -951,10 +981,10 @@
951 elpaBuild {
981 elpaBuild {
952 pname = "debbugs";
982 pname = "debbugs";
953 ename = "debbugs";
983 ename = "debbugs";
954− version = "0.31";
984+ version = "0.32";
955 src = fetchurl {
985 src = fetchurl {
956− url = "https://elpa.gnu.org/packages/debbugs-0.31.tar";
986+ url = "https://elpa.gnu.org/packages/debbugs-0.32.tar";
957− sha256 = "11vdjrn5m5g6pirw8jv0602fbwwgdhazfrrwxxplii8x02gqk0sr";
987+ sha256 = "1xp3mj3ndaljma0g7x9abziphgi2a6j8k1v52sb8xwgn4p5gdvby";
959 packageRequires = [ emacs soap-client ];
989 packageRequires = [ emacs soap-client ];
@@ -2273,10 +2303,10 @@
2273 elpaBuild {
2303 elpaBuild {
2274 pname = "kind-icon";
2304 pname = "kind-icon";
2275 ename = "kind-icon";
2305 ename = "kind-icon";
2276− version = "0.1.4";
2306+ version = "0.1.5";
2277 src = fetchurl {
2307 src = fetchurl {
2278− url = "https://elpa.gnu.org/packages/kind-icon-0.1.4.tar";
2308+ url = "https://elpa.gnu.org/packages/kind-icon-0.1.5.tar";
2279− sha256 = "00pyvnq4dx51l2wbhvm6k6cx5xmy32j4h1lkr5kr8s3j5w83ip25";
2309+ sha256 = "0qajj89vkgc9gbgff6akzll53jy0kgkv6c9jvwpl32rbg8v0wp63";
2281 packageRequires = [ emacs svg-lib ];
2311 packageRequires = [ emacs svg-lib ];
2282 meta = {
2312 meta = {
@@ -2374,6 +2404,21 @@
2374 license = lib.licenses.free;
2404 license = lib.licenses.free;
2407+ lin = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
2413+ url = "https://elpa.gnu.org/packages/lin-0.3.0.tar";
2414+ sha256 = "08h7rh8gidn9mn031mg8lvhxswv1hxn4i0ffk2vxygfbp9jxfi61";
2416+ packageRequires = [ emacs ];
2418+ homepage = "https://elpa.gnu.org/packages/lin.html";
2419+ license = lib.licenses.free;
2377 lmc = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
2422 lmc = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
2378 elpaBuild {
2423 elpaBuild {
2379 pname = "lmc";
2424 pname = "lmc";
@@ -2453,10 +2498,10 @@
2453 elpaBuild {
2498 elpaBuild {
2454 pname = "logos";
2499 pname = "logos";
2455 ename = "logos";
2500 ename = "logos";
2456− version = "0.2.0";
2501+ version = "0.3.1";
2457 src = fetchurl {
2502 src = fetchurl {
2458− url = "https://elpa.gnu.org/packages/logos-0.2.0.tar";
2503+ url = "https://elpa.gnu.org/packages/logos-0.3.1.tar";
2459− sha256 = "0cqmgvgyyn656rg60bbnxr2flmnw9h4z5i2w98bsf4krlp3s4i6x";
2504+ sha256 = "0wwvp47bmc7w3jvh480vc31agf0s39mvgk0h550z6a1wzlrfzyh9";
2461 packageRequires = [ emacs ];
2506 packageRequires = [ emacs ];
2462 meta = {
2507 meta = {
@@ -2667,10 +2712,10 @@
2667 elpaBuild {
2712 elpaBuild {
2668 pname = "modus-themes";
2713 pname = "modus-themes";
2669 ename = "modus-themes";
2714 ename = "modus-themes";
2670− version = "2.2.0";
2715+ version = "2.3.0";
2671 src = fetchurl {
2716 src = fetchurl {
2672− url = "https://elpa.gnu.org/packages/modus-themes-2.2.0.tar";
2717+ url = "https://elpa.gnu.org/packages/modus-themes-2.3.0.tar";
2673− sha256 = "1vgwr9q16d3hjwmqljmmzlpn177gvwbk3wg4l1fmgc5bpb7k78ky";
2718+ sha256 = "028c1z4p1bbgf34fml4i0prihxn44x288iyprz9gxrp7x3gl05n8";
2675 packageRequires = [ emacs ];
2720 packageRequires = [ emacs ];
2676 meta = {
2721 meta = {
@@ -2826,10 +2871,10 @@
2826 elpaBuild {
2871 elpaBuild {
2827 pname = "nano-modeline";
2872 pname = "nano-modeline";
2828 ename = "nano-modeline";
2873 ename = "nano-modeline";
2829− version = "0.5";
2874+ version = "0.6";
2830 src = fetchurl {
2875 src = fetchurl {
2831− url = "https://elpa.gnu.org/packages/nano-modeline-0.5.tar";
2876+ url = "https://elpa.gnu.org/packages/nano-modeline-0.6.tar";
2832− sha256 = "0f6xgrxykd5jmlzf9xmywh0jc2jfq698m4nqk60h40dm6pi0gfi2";
2877+ sha256 = "1cxycfx4ic2hzfvp3d2z0a5xjg97p49yla3a1qxw1dldcjg9lfg0";
2834 packageRequires = [ emacs ];
2879 packageRequires = [ emacs ];
2835 meta = {
2880 meta = {
@@ -3400,10 +3445,10 @@
3400 elpaBuild {
3445 elpaBuild {
3401 pname = "pulsar";
3446 pname = "pulsar";
3402 ename = "pulsar";
3447 ename = "pulsar";
3403− version = "0.2.0";
3448+ version = "0.3.0";
3404 src = fetchurl {
3449 src = fetchurl {
3405− url = "https://elpa.gnu.org/packages/pulsar-0.2.0.tar";
3450+ url = "https://elpa.gnu.org/packages/pulsar-0.3.0.tar";
3406− sha256 = "0vil6gv7w6d77hksc2pbrwjdd8dp3ka4kf5kihx04r95032pky62";
3451+ sha256 = "0dbfj7789qp4l25y8qazmx5kqgjgqjsnk24rwcf6qann4cq6wgnq";
3408 packageRequires = [ emacs ];
3453 packageRequires = [ emacs ];
3409 meta = {
3454 meta = {
@@ -3695,10 +3740,10 @@
3695 elpaBuild {
3740 elpaBuild {
3696 pname = "rec-mode";
3741 pname = "rec-mode";
3697 ename = "rec-mode";
3742 ename = "rec-mode";
3698− version = "1.8.2";
3743+ version = "1.8.3";
3699 src = fetchurl {
3744 src = fetchurl {
3700− url = "https://elpa.gnu.org/packages/rec-mode-1.8.2.tar";
3745+ url = "https://elpa.gnu.org/packages/rec-mode-1.8.3.tar";
3701− sha256 = "06mjj1la2v8zdhsflj3mwcp7qnkj7gxzm8wbk2pli1h8vnq2zvd0";
3746+ sha256 = "0lkmvvdj4xx3qhxqggizrcdawav0accyrza2wmhfdq88g2zh5575";
3703 packageRequires = [ emacs ];
3748 packageRequires = [ emacs ];
3704 meta = {
3749 meta = {
@@ -4305,10 +4350,10 @@
4305 elpaBuild {
4350 elpaBuild {
4306 pname = "taxy";
4351 pname = "taxy";
4307 ename = "taxy";
4352 ename = "taxy";
4308− version = "0.8";
4353+ version = "0.9";
4309 src = fetchurl {
4354 src = fetchurl {
4310− url = "https://elpa.gnu.org/packages/taxy-0.8.tar";
4355+ url = "https://elpa.gnu.org/packages/taxy-0.9.tar";
4311− sha256 = "00pc6lh35gj8vzcsn17fyazb9jsc4m6nr7cvb32w02isadv8qd3m";
4356+ sha256 = "1nzafs3yvcnmg07zi345n2yvjsw9wixlybzibnhf5k6jnd0vvpjh";
4313 packageRequires = [ emacs ];
4358 packageRequires = [ emacs ];
4314 meta = {
4359 meta = {
@@ -4316,6 +4361,25 @@
4316 license = lib.licenses.free;
4361 license = lib.licenses.free;
4364+ taxy-magit-section = callPackage ({ elpaBuild
4370+ pname = "taxy-magit-section";
4371+ ename = "taxy-magit-section";
4374+ url = "https://elpa.gnu.org/packages/taxy-magit-section-0.9.1.tar";
4375+ sha256 = "0ybkz5nqjdrg2z9bfd07xg4k49hrl26vsrwz2vqpfbsqqg5vr4pr";
4377+ packageRequires = [ emacs magit-section ];
4379+ homepage = "https://elpa.gnu.org/packages/taxy-magit-section.html";
4380+ license = lib.licenses.free;
4319 temp-buffer-browse = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
4383 temp-buffer-browse = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
4320 elpaBuild {
4384 elpaBuild {
4321 pname = "temp-buffer-browse";
4385 pname = "temp-buffer-browse";
@@ -4399,10 +4463,10 @@
4399 elpaBuild {
4463 elpaBuild {
4400 pname = "tramp";
4464 pname = "tramp";
4401 ename = "tramp";
4465 ename = "tramp";
4402− version = "2.5.2.2";
4466+ version = "2.5.2.3";
4403 src = fetchurl {
4467 src = fetchurl {
4404− url = "https://elpa.gnu.org/packages/tramp-2.5.2.2.tar";
4468+ url = "https://elpa.gnu.org/packages/tramp-2.5.2.3.tar";
4405− sha256 = "104nn6xdmcviqqv4cx5llhwj1sh4q04w3h9s8gimmi2kg0z8s36r";
4469+ sha256 = "1nv603jrvql03z2pfg74yq0hp7963gagg27fksc456mpmz4p7ajq";
4407 packageRequires = [ emacs ];
4471 packageRequires = [ emacs ];
4408 meta = {
4472 meta = {
@@ -4470,6 +4534,21 @@
4470 license = lib.licenses.free;
4534 license = lib.licenses.free;
4537+ transient-cycles = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
4539+ pname = "transient-cycles";
4540+ ename = "transient-cycles";
4543+ url = "https://elpa.gnu.org/packages/transient-cycles-1.0.tar";
4544+ sha256 = "1gad71kqdw6rm9dy5rxm85l4a5qibs20ijl8bpaxbbq37j44lvjb";
4546+ packageRequires = [ emacs ];
4548+ homepage = "https://elpa.gnu.org/packages/transient-cycles.html";
4549+ license = lib.licenses.free;
4473 trie = callPackage ({ elpaBuild, fetchurl, heap, lib, tNFA }:
4552 trie = callPackage ({ elpaBuild, fetchurl, heap, lib, tNFA }:
4474 elpaBuild {
4553 elpaBuild {
4475 pname = "trie";
4554 pname = "trie";
@@ -4695,10 +4774,10 @@
4695 elpaBuild {
4774 elpaBuild {
4696 pname = "vertico";
4775 pname = "vertico";
4697 ename = "vertico";
4776 ename = "vertico";
4698− version = "0.21";
4777+ version = "0.22";
4699 src = fetchurl {
4778 src = fetchurl {
4700− url = "https://elpa.gnu.org/packages/vertico-0.21.tar";
4779+ url = "https://elpa.gnu.org/packages/vertico-0.22.tar";
4701− sha256 = "0aw3hkr46zghvyp7s2b6ziqavsf1zpml4bbxcvs4kvm05qa0y1hv";
4780+ sha256 = "1m8r2iqyyvym7a47awh00aq7hld54dklrx4ibwvnmhpxl0fzh7g8";
4703 packageRequires = [ emacs ];
4782 packageRequires = [ emacs ];
4704 meta = {
4783 meta = {
pkgs/applications/editors/emacs/elisp-packages/ement/default.nix+11−3
@@ -5,23 +5,31 @@
10trivialBuild {
14trivialBuild {
11 pname = "ement";
15 pname = "ement";
12− version = "unstable-2021-10-08";
16+ version = "unstable-2022-04-22";
14 src = fetchFromGitHub {
18 src = fetchFromGitHub {
15 owner = "alphapapa";
19 owner = "alphapapa";
16 repo = "ement.el";
20 repo = "ement.el";
17− rev = "c951737dc855604aba389166bb0e7366afadc533";
21+ rev = "70da19e4c9210d362b1d6d9c17ab2c034a03250d";
18− sha256 = "00iwwz4hzg4g59wrb5df6snqz3ppvrsadhfp61w1pa8gvg2z9bvy";
22+ sha256 = "sha256-Pxul0WrtyH2XZzF0fOOitLc3x/kc+Qc11RDH0n+Hm04=";
21 packageRequires = [
25 packageRequires = [
27 patches = [
35 patches = [
pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nixnew file+30
@@ -0,0 +1,30 @@
7+ pname = "header-file-mode";
8+ version = "unstable-2022-04-19";
10+ src = fetchFromGitHub {
12+ repo = "header-file-mode";
13+ rev = "fdf1930730e1b0c3f82490099a1325805491eff5";
14+ sha256 = "sha256-FJgRI6RLQk9osh7d+YRfrV5CoGCDx2cZvsjAWlm969c=";
18+ sourceRoot="$sourceRoot/lisp"
23+ A major mode that, when associated with the .h file extension, will put
24+ those file into the major mode of their corresponding implementation file.
26+ license = lib.licenses.gpl3Plus;
27+ platforms = lib.platforms.all;
28+ maintainers = with lib.maintainers; [ aidalgol ];
pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+5−1
@@ -178,6 +178,8 @@
179 git-undo = callPackage ./git-undo { };
179 git-undo = callPackage ./git-undo { };
181+ header-file-mode = callPackage ./header-file-mode { };
181 helm-words = callPackage ./helm-words { };
183 helm-words = callPackage ./helm-words { };
183 isearch-plus = callPackage ./isearch-plus { };
185 isearch-plus = callPackage ./isearch-plus { };
@@ -231,10 +233,12 @@
232 sv-kalender = callPackage ./sv-kalender { };
234 sv-kalender = callPackage ./sv-kalender { };
236+ tree-sitter-langs = callPackage ./tree-sitter-langs { final = self; };
237+ tsc = callPackage ./tsc { };
234 youtube-dl = callPackage ./youtube-dl { };
239 youtube-dl = callPackage ./youtube-dl { };
236 # From old emacsPackages (pre emacsPackagesNg)
241 # From old emacsPackages (pre emacsPackagesNg)
237− cedet = callPackage ./cedet { };
238 cedille = callPackage ./cedille { cedille = pkgs.cedille; };
242 cedille = callPackage ./cedille { cedille = pkgs.cedille; };
239 color-theme-solarized = callPackage ./color-theme-solarized { };
243 color-theme-solarized = callPackage ./color-theme-solarized { };
240 session-management-for-emacs = callPackage ./session-management-for-emacs { };
244 session-management-for-emacs = callPackage ./session-management-for-emacs { };
pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+26−32
@@ -49,10 +49,10 @@
49 elpaBuild {
49 elpaBuild {
50 pname = "annotate";
50 pname = "annotate";
51 ename = "annotate";
51 ename = "annotate";
52− version = "1.5.1";
52+ version = "1.5.3";
53 src = fetchurl {
53 src = fetchurl {
54− url = "https://elpa.nongnu.org/nongnu/annotate-1.5.1.tar";
54+ url = "https://elpa.nongnu.org/nongnu/annotate-1.5.3.tar";
55− sha256 = "13xf8izl99y1aqwk9k9hgiwggibjycjh2lhwg0wk5hm7zp6gm8mx";
55+ sha256 = "0d5lqaj1bqckvjpwxqglzrhk8fm03n19lxwm74jxfl1lkxq4dw3x";
57 packageRequires = [];
57 packageRequires = [];
@@ -219,10 +219,10 @@
219 elpaBuild {
219 elpaBuild {
220 pname = "buttercup";
220 pname = "buttercup";
221 ename = "buttercup";
221 ename = "buttercup";
222− version = "1.24";
222+ version = "1.25";
223 src = fetchurl {
223 src = fetchurl {
224− url = "https://elpa.nongnu.org/nongnu/buttercup-1.24.tar";
224+ url = "https://elpa.nongnu.org/nongnu/buttercup-1.25.tar";
225− sha256 = "1ch949xf03gw9r5v32akx7hqnq7zrp3qr3gcic5b52yl5nmy8mhn";
225+ sha256 = "1iadgn56sfakv927g9bk7fq7yjg0f3r10ygrmjpy46vgvfz0fqs6";
227 packageRequires = [ emacs ];
227 packageRequires = [ emacs ];
@@ -469,10 +469,10 @@
469 elpaBuild {
469 elpaBuild {
470 pname = "elpher";
470 pname = "elpher";
471 ename = "elpher";
471 ename = "elpher";
472− version = "3.3.2";
472+ version = "3.3.3";
473 src = fetchurl {
473 src = fetchurl {
474− url = "https://elpa.nongnu.org/nongnu/elpher-3.3.2.tar";
474+ url = "https://elpa.nongnu.org/nongnu/elpher-3.3.3.tar";
475− sha256 = "1w34agw5qfgbpk6s2bllvgkj4wm1rlcyn33yfgj2xr4a5gfcs30a";
475+ sha256 = "0yaf6g424g6dngg0acbhlhd24k77bl5h82wiw98f3731xdad174r";
477 packageRequires = [ emacs ];
477 packageRequires = [ emacs ];
@@ -602,10 +602,10 @@
602 elpaBuild {
602 elpaBuild {
603 pname = "evil-matchit";
603 pname = "evil-matchit";
604 ename = "evil-matchit";
604 ename = "evil-matchit";
605− version = "2.4.1";
605+ version = "2.4.3";
606 src = fetchurl {
606 src = fetchurl {
607− url = "https://elpa.nongnu.org/nongnu/evil-matchit-2.4.1.tar";
607+ url = "https://elpa.nongnu.org/nongnu/evil-matchit-2.4.3.tar";
608− sha256 = "0ybw0jfjkwiz4ln3z5pizbw5d9d612crpk410czcyi8adyj018nc";
608+ sha256 = "079qbx6f4clh5ngnrga016h0q2vf7afx9irsa06pishfs94pl4qn";
610 packageRequires = [ emacs evil ];
610 packageRequires = [ emacs evil ];
@@ -617,10 +617,10 @@
617 elpaBuild {
617 elpaBuild {
618 pname = "evil-nerd-commenter";
618 pname = "evil-nerd-commenter";
619 ename = "evil-nerd-commenter";
619 ename = "evil-nerd-commenter";
620− version = "3.5.6";
620+ version = "3.5.7";
621 src = fetchurl {
621 src = fetchurl {
622− url = "https://elpa.nongnu.org/nongnu/evil-nerd-commenter-3.5.6.tar";
622+ url = "https://elpa.nongnu.org/nongnu/evil-nerd-commenter-3.5.7.tar";
623− sha256 = "0bv7s2jcgi3ma3dspczy7jrb55vqkhsz0rq0nz14qiay5j9dwghd";
623+ sha256 = "1lar8hy9n29gv4cijalyy2ba23y0kyh9ycnsi5dzjs68pk3y4hca";
625 packageRequires = [ emacs ];
625 packageRequires = [ emacs ];
@@ -1096,10 +1096,10 @@
1096 elpaBuild {
1096 elpaBuild {
1097 pname = "highlight-parentheses";
1097 pname = "highlight-parentheses";
1098 ename = "highlight-parentheses";
1098 ename = "highlight-parentheses";
1099− version = "2.1.0";
1099+ version = "2.1.1";
1100 src = fetchurl {
1100 src = fetchurl {
1101− url = "https://elpa.nongnu.org/nongnu/highlight-parentheses-2.1.0.tar";
1101+ url = "https://elpa.nongnu.org/nongnu/highlight-parentheses-2.1.1.tar";
1102− sha256 = "1rsixbvglar0k0x24xkxw80sx9i85q48jdzx6wbyjz2clz974ja5";
1102+ sha256 = "1r0sk4da3apgbik8d84vknwna45k1ks3n0s1fspj5c88b4r7xnsx";
1104 packageRequires = [ emacs ];
1104 packageRequires = [ emacs ];
1105 meta = {
1105 meta = {
@@ -1635,22 +1635,16 @@
1635 license = lib.licenses.free;
1635 license = lib.licenses.free;
1638− pacmacs = callPackage ({ cl-lib ? null
1638+ pacmacs = callPackage ({ dash, elpaBuild, emacs, fetchurl, lib }:
1645 elpaBuild {
1639 elpaBuild {
1646 pname = "pacmacs";
1640 pname = "pacmacs";
1647 ename = "pacmacs";
1641 ename = "pacmacs";
1648− version = "0.1";
1642+ version = "0.1.1";
1649 src = fetchurl {
1643 src = fetchurl {
1650− url = "https://elpa.nongnu.org/nongnu/pacmacs-0.1.tar";
1644+ url = "https://elpa.nongnu.org/nongnu/pacmacs-0.1.1.tar";
1651− sha256 = "0vhxxnk8n4h2klvr4xahsm845dwds895fxxgcs7dz2262g9myd93";
1645+ sha256 = "0ni4jmvkdqiiw2xync6raxvq4gr2hc7b65cbil66z7g7vlw5y56y";
1653− packageRequires = [ cl-lib dash emacs f ];
1647+ packageRequires = [ dash emacs ];
1654 meta = {
1648 meta = {
1655 homepage = "https://elpa.gnu.org/packages/pacmacs.html";
1649 homepage = "https://elpa.gnu.org/packages/pacmacs.html";
1656 license = lib.licenses.free;
1650 license = lib.licenses.free;
@@ -1909,10 +1903,10 @@
1909 elpaBuild {
1903 elpaBuild {
1910 pname = "shellcop";
1904 pname = "shellcop";
1911 ename = "shellcop";
1905 ename = "shellcop";
1912− version = "0.0.7";
1906+ version = "0.0.8";
1913 src = fetchurl {
1907 src = fetchurl {
1914− url = "https://elpa.nongnu.org/nongnu/shellcop-0.0.7.tar";
1908+ url = "https://elpa.nongnu.org/nongnu/shellcop-0.0.8.tar";
1915− sha256 = "1zwj22bf37ffdbz5iqkwz5mzzsxffhj521dmwkgp5sh4r1fwip8a";
1909+ sha256 = "00kj1zadrqnikvwrxd6ma0c8r1jf70c1zaqr03s0g49h4lz6m2da";
1917 packageRequires = [ emacs ];
1911 packageRequires = [ emacs ];
1918 meta = {
1912 meta = {
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+3
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/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/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/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/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+7−2
This diff is too big to show here.
pkgs/applications/editors/vim/plugins/generated.nix+656−631
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+2
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+26−14
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/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+1
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+3−3
This diff is too big to show here.
pkgs/applications/emulators/ryujinx/deps.nix+9−9
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/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/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/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/hydrus/default.nix+3−3
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/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/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/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/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/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/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/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/gremlin-console/default.nix+2−2
This diff is too big to show here.
pkgs/applications/misc/gsctl/default.nix+10−4
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/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+4−4
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/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+3−3
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/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/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/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/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/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/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+16−5
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+3−3
This diff is too big to show here.
pkgs/applications/networking/cluster/arkade/default.nix+3−3
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+8−3
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+28−11
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/kubernetes/kubectl.nix+1
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/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+1
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform-providers/default.nix+1
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform-providers/providers.json+228−200
This diff is too big to show here.
pkgs/applications/networking/cluster/terraform/default.nix+3−3
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/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+4−1
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/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+3−2
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+1−1
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/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/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/slack/default.nix+3−3
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+2
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/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+634−752
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/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/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/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/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/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/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/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/computer-architecture/qtrvsim/default.nix+2−2
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/key/default.nix+2−3
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/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/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/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/giac/default.nix+12−16
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-src.nix+31−7
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/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/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/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-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-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+18−16
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/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+2−2
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/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/jujutsu/default.nix+3−2
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−9
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+2−7
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/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/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/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/window-managers/afterstep/default.nix+13−1
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/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+1−2
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/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.nix+8−1
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng.nix+16−2
This diff is too big to show here.
pkgs/build-support/kernel/make-initrd-ng/src/main.rs+15−7
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/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/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−17
This diff is too big to show here.
pkgs/build-support/trivial-builders.nix+7−36
This diff is too big to show here.
pkgs/build-support/writers/default.nix+2−2
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/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/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+1−1
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-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/pin.json+4−4
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/wireless-regdb/default.nix+2−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/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/platform/libglade/default.nix+2−5
This diff is too big to show here.
pkgs/desktops/gnome/apps/ghex/default.nix+2−2
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-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+2−2
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/zenity/default.nix+2−2
This diff is too big to show here.
pkgs/desktops/gnome/default.nix−15
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+20
This diff is too big to show here.
pkgs/desktops/gnome/extensions/extensionRenames.nix+6−3
This diff is too big to show here.
pkgs/desktops/gnome/extensions/extensions.json+171−156
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/update-extensions.py+66−47
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/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+2
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/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/xfce/applications/xfce4-terminal/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/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/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/algol68g/default.nix+1
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/versions.toml+5−3
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/fennel/default.nix+2−2
This diff is too big to show here.
pkgs/development/compilers/gcc/10/default.nix+7−1
This diff is too big to show here.
pkgs/development/compilers/gcc/4.8/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/gcc/4.9/default.nix+1−1
This diff is too big to show here.
pkgs/development/compilers/gcc/6/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/gcc/7/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/gcc/8/default.nix+1
This diff is too big to show here.
pkgs/development/compilers/gcc/9/default.nix+1
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+1−1
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/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/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/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/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/generic.nix+5−5
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−5
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-library-path-jdk11.patch+21−3
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_59.nixdeleted−64
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/rustfmt.nix+3−3
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/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/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+1
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+1−2
This diff is too big to show here.
pkgs/development/go-packages/generic/default.nix+1−2
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+79−15
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-darwin.nix+6−7
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix+18−9
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix+16−8
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix+5−2
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-ghc-head.nix+5−4
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml+21−3
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml+7−2
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml+71−65
This diff is too big to show here.
pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml+11−1
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/hackage-packages.nix+2014−1360
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/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/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/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+19−15
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/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+6−11
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/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/sollya/default.nix+2−2
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+3−3
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+5−1
This diff is too big to show here.
pkgs/development/libraries/SDL_audiolib/default.nixnew file+53
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/argagg/0001-catch.diffnew file+20
This diff is too big to show here.
pkgs/development/libraries/argagg/default.nixnew file+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/at-spi2-core/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/audio/libopenmpt/default.nixnew file+66
This diff is too big to show here.
pkgs/development/libraries/audio/libopenmpt/update.shnew file+31
This diff is too big to show here.
pkgs/development/libraries/audio/libspecbleach/default.nixnew file+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/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/bc-decaf/default.nixnew file+36
This diff is too big to show here.
pkgs/development/libraries/bctoolbox/default.nix+17−5
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.78.nixnew file+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/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/cgreen/default.nix+6
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-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/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/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/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/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/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/gdal/2.4.nix+11−1
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.nixnew file+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/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−10
This diff is too big to show here.
pkgs/development/libraries/glib/elementary-terminal-support.patchnew file+16
This diff is too big to show here.
pkgs/development/libraries/glib/gnome-console-support.patchnew file+55
This diff is too big to show here.
pkgs/development/libraries/glibc/common.nix+7
This diff is too big to show here.
pkgs/development/libraries/glibc/default.nix+4−7
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/glog/default.nix+5−14
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.nixnew file+41
This diff is too big to show here.
pkgs/development/libraries/gtk-frdp/default.nix+3−3
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/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/htmlcxx/c++17.patchnew file+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/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+3−2
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/jarowinkler-cpp/default.nixnew file+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/jellyfin-ffmpeg/default.nixnew file+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/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/srcs.nix+332−332
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/lasso/default.nix+35−9
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/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/libavif/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/libdeltachat/default.nix+3−5
This diff is too big to show here.
pkgs/development/libraries/libdvbcsa/default.nixnew file+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/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+2−2
This diff is too big to show here.
pkgs/development/libraries/libixp-hg/default.nixdeleted−27
This diff is too big to show here.
pkgs/development/libraries/libixp/default.nixnew file+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/libjson/default.nix+1
This diff is too big to show here.
pkgs/development/libraries/libkqueue/default.nixnew file+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.patchnew file+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/libnfc/default.nix+10−7
This diff is too big to show here.
pkgs/development/libraries/libnfnetlink/Use-stdlib-uint-instead-of-u_int.patchdeleted−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+9−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.patchnew file+11
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.nixnew file+12
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/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/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/libvdpau/default.nix+2−2
This diff is too big to show here.
pkgs/development/libraries/libviperfx/default.nixnew file+30
This diff is too big to show here.
pkgs/development/libraries/libvirt/default.nix+4
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.nixnew file+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+5−6
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/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/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/nss/85_security_load_3.77+.patchnew file+76
This diff is too big to show here.
pkgs/development/libraries/nss/esr.nixnew file+4
This diff is too big to show here.
pkgs/development/libraries/nss/default.nix → pkgs/development/libraries/nss/generic.nixrenamed+8−10
This diff is too big to show here.
pkgs/development/libraries/nss/latest.nixnew file+10
This diff is too big to show here.
pkgs/development/libraries/ntdb/default.nixdeleted−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/openssl/default.nix+8−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.nixdeleted−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/poppler/0.61-CVE-2019-9959.patchdeleted−20
This diff is too big to show here.
pkgs/development/libraries/poppler/0.61.nixdeleted−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.nixdeleted−10
This diff is too big to show here.
pkgs/development/libraries/protobuf/generic.nixdeleted−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.nixnew file+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+1−7
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.14/default.nix+2−8
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.14/qtwayland-libdrm-build.patchdeleted−56
This diff is too big to show here.
pkgs/development/libraries/qt-5/5.15/default.nix+1−7
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.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/rapidfuzz-cpp/default.nixnew file+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/redis-plus-plus/default.nixnew file+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.nixdeleted−151
This diff is too big to show here.
pkgs/development/libraries/science/math/caffe2/fix_compilation_on_gcc7.patchdeleted−46
This diff is too big to show here.
pkgs/development/libraries/science/math/caffe2/update_clang_cvtsh_bugfix.patchdeleted−55
This diff is too big to show here.
pkgs/development/libraries/science/math/cudnn/extension.nix+6−2
This diff is too big to show here.
pkgs/development/libraries/science/math/cudnn/generic.nix+48−32
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/magma/default.nix+2−19
This diff is too big to show here.
pkgs/development/libraries/science/math/nccl/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/zn_poly/default.nix+4−14
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.nixdeleted−36
This diff is too big to show here.
pkgs/development/libraries/soci/bc-soci.nixnew file+53
This diff is too big to show here.
pkgs/development/libraries/spdlog/default.nix+9−14
This diff is too big to show here.
pkgs/development/libraries/sphinxbase/default.nixdeleted−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+2−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/talloc/default.nix+2−1
This diff is too big to show here.
pkgs/development/libraries/taskflow/default.nixnew file+50
This diff is too big to show here.
pkgs/development/libraries/taskflow/unvendor-doctest.patchnew file+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.nixnew file+30
This diff is too big to show here.
pkgs/development/libraries/tomlcpp/0001-missing-headers.diffnew file+15
This diff is too big to show here.
pkgs/development/libraries/tomlcpp/default.nixnew file+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.patchnew file+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/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.patchdeleted−13
This diff is too big to show here.
pkgs/development/libraries/xgboost/default.nix+5−6
This diff is too big to show here.
pkgs/development/libraries/zlib/CVE-2018-25032-1.patchnew file+346
This diff is too big to show here.
pkgs/development/libraries/zlib/CVE-2018-25032-2.patchnew file+27
This diff is too big to show here.
pkgs/development/libraries/zlib/default.nix+4
This diff is too big to show here.
pkgs/development/libraries/zlib/fix-configure-issue-cross.patchnew file+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/.gitattributesnew file+1
This diff is too big to show here.
pkgs/development/lisp-modules-new/.gitignorenew file+3
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/api.mdnew file+197
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/nix-cl.mdnew file+98
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/quicklisp.mdnew file+54
This diff is too big to show here.
pkgs/development/lisp-modules-new/doc/quirks.mdnew file+5
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/abcl-package-set.nixnew file+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/abcl-with-packages.nixnew file+23
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/bordeaux-threads.nixnew file+43
This diff is too big to show here.
pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nixnew file+31
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/api.lispnew file+18
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/database/sqlite.lispnew file+134
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/init.sqlnew file+41
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/main.lispnew file+40
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/nix.lispnew file+81
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/org.lispbuilds.nix.asdnew file+24
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/repository/quicklisp.lispnew file+199
This diff is too big to show here.
pkgs/development/lisp-modules-new/import/util.lispnew file+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−4
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/graphql-engine.nix+5
This diff is too big to show here.
pkgs/development/misc/haskell/hasura/graphql-parser.nix+5
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/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+16−41
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+6262−6326
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/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/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/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-start/default.nix+4−2
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/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/tsdl/default.nix+1−1
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−1
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/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/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+1−1
This diff is too big to show here.
pkgs/development/python-modules/XlsxWriter/default.nix+2−2
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/adb-shell/default.nix+12−3
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+3−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+2−2
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/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/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/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/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/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/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/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/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+9−32
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/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-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/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/av/default.nix+8−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-core/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/azure-identity/default.nix+15−18
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-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-synapse-artifacts/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+2−2
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/bitarray/default.nix+2−2
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/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/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+30−15
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+14−13
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+2−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+3−1
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−3
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/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/chalice/default.nix+1−1
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/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/codepy/default.nix+35
This diff is too big to show here.
pkgs/development/python-modules/collections-extended/default.nix+9−4
This diff is too big to show here.
pkgs/development/python-modules/commoncode/default.nix+2−2
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/contexttimer/default.nix+42
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/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/cupy/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
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/dataset/default.nix+11−5
This diff is too big to show here.
pkgs/development/python-modules/datasets/default.nix+19−6
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/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/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/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/dictpath/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/diff-cover/default.nix+2−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/django-allauth/default.nix+25−11
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-taggit/default.nix+2−2
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_modelcluster/default.nix+27−9
This diff is too big to show here.
pkgs/development/python-modules/dm-haiku/default.nix+9−2
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+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+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/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/eagle100/default.nix+37
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/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+2
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/filetype/default.nix+26−6
This diff is too big to show here.
pkgs/development/python-modules/findpython/default.nix+2−2
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+2−2
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/funcparserlib/default.nix+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/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/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/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/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/glyphslib/default.nix+59
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-error-reporting/default.nix+6−7
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/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/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/gtts/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/gym/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/h11/default.nix+3
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/hahomematic/default.nix+3−3
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+2−2
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/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+7−6
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/httplib2/default.nix+2−4
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/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/hypothesis/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/hypothesmith/default.nix+28−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+4−2
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/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/impacket/default.nix+31−5
This diff is too big to show here.
pkgs/development/python-modules/importlib-metadata/default.nix+2−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/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+2−2
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+4−2
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/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/default.nix+4−2
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/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-schema-for-humans/default.nix+7−8
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/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/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/kbcstorage/default.nix+69
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/labgrid/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/lektor/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/levenshtein/default.nix+14−6
This diff is too big to show here.
pkgs/development/python-modules/libcst/default.nix+4
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/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/magicgui/default.nix+10−1
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/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/mautrix/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/mccabe/default.nix+16−4
This diff is too big to show here.
pkgs/development/python-modules/md-toc/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mdurl/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/meater-python/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/mechanize/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/merkletools/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/meshtastic/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/metakernel/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/meteofrance-api/default.nix+76
This diff is too big to show here.
pkgs/development/python-modules/mezzanine/default.nix+41−27
This diff is too big to show here.
pkgs/development/python-modules/mitmproxy/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/mkdocs-material/default.nix+14−5
This diff is too big to show here.
pkgs/development/python-modules/mkdocs-minify/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/mkdocs-redirects/default.nix+31
This diff is too big to show here.
pkgs/development/python-modules/mkdocs/default.nix+2−11
This diff is too big to show here.
pkgs/development/python-modules/mlflow/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mock/default.nix+12−14
This diff is too big to show here.
pkgs/development/python-modules/mocket/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/modeled/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/monero/default.nix+51
This diff is too big to show here.
pkgs/development/python-modules/monty/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/moretools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/motionblinds/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/moto/default.nix+17−5
This diff is too big to show here.
pkgs/development/python-modules/msrest/default.nix+42−27
This diff is too big to show here.
pkgs/development/python-modules/murmurhash/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mutagen/default.nix+1−5
This diff is too big to show here.
pkgs/development/python-modules/mutmut/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mwclient/default.nix+31−7
This diff is too big to show here.
pkgs/development/python-modules/mwdblib/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/mwoauth/default.nix+15−8
This diff is too big to show here.
pkgs/development/python-modules/myfitnesspal/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/mypy-boto3-s3/default.nix+2−3
This diff is too big to show here.
pkgs/development/python-modules/namedlist/default.nix+30−9
This diff is too big to show here.
pkgs/development/python-modules/napari-npe2/default.nix+54
This diff is too big to show here.
pkgs/development/python-modules/napari/default.nix+15−6
This diff is too big to show here.
pkgs/development/python-modules/nbclient/default.nix+33−10
This diff is too big to show here.
pkgs/development/python-modules/nbconvert/default.nix+8−6
This diff is too big to show here.
pkgs/development/python-modules/nbformat/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ncclient/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ndg-httpsclient/default.nix+7−2
This diff is too big to show here.
pkgs/development/python-modules/neo4j-driver/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/net2grid/default.nix−58
This diff is too big to show here.
pkgs/development/python-modules/netmiko/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/nettigo-air-monitor/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/netutils/default.nix+66
This diff is too big to show here.
pkgs/development/python-modules/networkx/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/nextcord/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/nipype/neurdflib.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/nix-prefetch-github/default.nix+4−3
This diff is too big to show here.
pkgs/development/python-modules/nocasedict/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/nomadnet/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/nose/default.nix+3−1
This diff is too big to show here.
pkgs/development/python-modules/notebook/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/numpydoc/default.nix+38−7
This diff is too big to show here.
pkgs/development/python-modules/nunavut/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/nutils/default.nix+32
This diff is too big to show here.
pkgs/development/python-modules/nvchecker/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/oasatelematics/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/oci/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ocrmypdf/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ondilo/default.nix+9−4
This diff is too big to show here.
pkgs/development/python-modules/onnx/default.nix+9−2
This diff is too big to show here.
pkgs/development/python-modules/openai/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/openhomedevice/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/openstep-plist/default.nix+31
This diff is too big to show here.
pkgs/development/python-modules/opentracing/default.nix+12−7
This diff is too big to show here.
pkgs/development/python-modules/optax/default.nix−1
This diff is too big to show here.
pkgs/development/python-modules/ormar/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/ovh/default.nix+30−5
This diff is too big to show here.
pkgs/development/python-modules/packaging/default.nix+29−25
This diff is too big to show here.
pkgs/development/python-modules/paho-mqtt/default.nix+2−8
This diff is too big to show here.
pkgs/development/python-modules/pandas/default.nix+11−3
This diff is too big to show here.
pkgs/development/python-modules/panel/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/parsimonious/default.nix+27−10
This diff is too big to show here.
pkgs/development/python-modules/path.py/default.nix−50
This diff is too big to show here.
pkgs/development/python-modules/path/default.nix+51
This diff is too big to show here.
pkgs/development/python-modules/pathy/default.nix+37−14
This diff is too big to show here.
pkgs/development/python-modules/pdm-pep517/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/peaqevcore/default.nix+38
This diff is too big to show here.
pkgs/development/python-modules/peco/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/peewee/default.nix+7−4
This diff is too big to show here.
pkgs/development/python-modules/pencompy/default.nix+32
This diff is too big to show here.
pkgs/development/python-modules/pep257/default.nix−23
This diff is too big to show here.
pkgs/development/python-modules/pex/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pg8000/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/phe/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/phik/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/phonemizer/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/phonenumbers/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pickleshare/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pikepdf/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pilkit/default.nix+29−17
This diff is too big to show here.
pkgs/development/python-modules/pillow-simd/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pillow/default.nix+12−6
This diff is too big to show here.
pkgs/development/python-modules/pims/default.nix+42−19
This diff is too big to show here.
pkgs/development/python-modules/pip-tools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pip/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pipdate/default.nix+9−5
This diff is too big to show here.
pkgs/development/python-modules/pipdeptree/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/pixcat/default.nix+38
This diff is too big to show here.
pkgs/development/python-modules/plaid-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pleroma-bot/default.nix+22−7
This diff is too big to show here.
pkgs/development/python-modules/plugwise/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/poetry-dynamic-versioning/default.nix+58
This diff is too big to show here.
pkgs/development/python-modules/polars/default.nix+57
This diff is too big to show here.
pkgs/development/python-modules/policy-sentry/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/policyuniverse/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/preprocess-cancellation/default.nix+36−6
This diff is too big to show here.
pkgs/development/python-modules/preprocess-cancellation/pep-621.patch+20
This diff is too big to show here.
pkgs/development/python-modules/prettytable/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/prompt-toolkit/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/proton-client/0001-OpenSSL-path-fix.patch+41
This diff is too big to show here.
pkgs/development/python-modules/proton-client/default.nix+18−8
This diff is too big to show here.
pkgs/development/python-modules/psautohint/default.nix+9−7
This diff is too big to show here.
pkgs/development/python-modules/pubnub/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pure-python-adb/default.nix+25−6
This diff is too big to show here.
pkgs/development/python-modules/purl/default.nix+15−2
This diff is too big to show here.
pkgs/development/python-modules/pwntools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/py-desmume/default.nix+3−14
This diff is too big to show here.
pkgs/development/python-modules/py-radix/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/py3rijndael/default.nix+30
This diff is too big to show here.
pkgs/development/python-modules/py4j/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyTelegramBotAPI/default.nix+21−5
This diff is too big to show here.
pkgs/development/python-modules/pyamg/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyasn1/default.nix+6−4
This diff is too big to show here.
pkgs/development/python-modules/pyathena/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyatmo/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pybids/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pybind11/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/pybotvac/default.nix+10−4
This diff is too big to show here.
pkgs/development/python-modules/pybullet/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pycapnp/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/pycep-parser/default.nix+3−4
This diff is too big to show here.
pkgs/development/python-modules/pycfmodel/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pychromecast/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pycm/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pycoolmasternet-async/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pycountry/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pycurl/default.nix+1−11
This diff is too big to show here.
pkgs/development/python-modules/pydantic/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/pydeconz/default.nix+6−4
This diff is too big to show here.
pkgs/development/python-modules/pydeps/default.nix+60
This diff is too big to show here.
pkgs/development/python-modules/pyeapi/default.nix+36−8
This diff is too big to show here.
pkgs/development/python-modules/pyee/default.nix+13−5
This diff is too big to show here.
pkgs/development/python-modules/pyefergy/default.nix+3−8
This diff is too big to show here.
pkgs/development/python-modules/pyevilgenius/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyezviz/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyfaidx/default.nix+5−5
This diff is too big to show here.
pkgs/development/python-modules/pyfakefs/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyfritzhome/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pygatt/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/pygit2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyhanko-certvalidator/default.nix+73
This diff is too big to show here.
pkgs/development/python-modules/pyhanko/0001-Updating-pytest-aiohttp-version.patch+25
This diff is too big to show here.
pkgs/development/python-modules/pyhanko/default.nix+132
This diff is too big to show here.
pkgs/development/python-modules/pyhiveapi/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/pyinfra/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyinsteon/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pyiqvia/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pykerberos/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pykeyatome/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pykulersky/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pylama/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/pylast/default.nix+5−5
This diff is too big to show here.
pkgs/development/python-modules/pylint/default.nix+18−10
This diff is too big to show here.
pkgs/development/python-modules/pymazda/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pymc3/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pymemcache/default.nix+6
This diff is too big to show here.
pkgs/development/python-modules/pymfy/default.nix+9−4
This diff is too big to show here.
pkgs/development/python-modules/pympler/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/pymyq/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pync/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/pynello/default.nix+6−4
This diff is too big to show here.
pkgs/development/python-modules/pynetbox/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pynetdicom/default.nix+10−2
This diff is too big to show here.
pkgs/development/python-modules/pynetgear/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pynina/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pynrrd/default.nix+14−4
This diff is too big to show here.
pkgs/development/python-modules/pynws/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyomo/default.nix+34−22
This diff is too big to show here.
pkgs/development/python-modules/pyopenssl/default.nix+2−6
This diff is too big to show here.
pkgs/development/python-modules/pyopenuv/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/pyoppleio/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/pyoverkiz/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyparsing/default.nix+4−6
This diff is too big to show here.
pkgs/development/python-modules/pyplaato/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyplatec/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/pypng/default.nix+29
This diff is too big to show here.
pkgs/development/python-modules/pyppeteer/default.nix+5−2
This diff is too big to show here.
pkgs/development/python-modules/pypykatz/default.nix+12−3
This diff is too big to show here.
pkgs/development/python-modules/pyqtwebengine/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/pyrad/default.nix+40−7
This diff is too big to show here.
pkgs/development/python-modules/pyradios/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/pyramid_jinja2/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyrevolve/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/pyro-ppl/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyrogram/default.nix+8−7
This diff is too big to show here.
pkgs/development/python-modules/pysaj/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/pysensibo/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/pyshp/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pysigma-backend-insightidr/default.nix+47
This diff is too big to show here.
pkgs/development/python-modules/pysigma-backend-splunk/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pysigma-pipeline-crowdstrike/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pysigma-pipeline-sysmon/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pysigma-pipeline-windows/default.nix+46
This diff is too big to show here.
pkgs/development/python-modules/pysigma/default.nix+2−7
This diff is too big to show here.
pkgs/development/python-modules/pyskyqremote/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pyslurm/default.nix+14−5
This diff is too big to show here.
pkgs/development/python-modules/pysmappee/default.nix+10−6
This diff is too big to show here.
pkgs/development/python-modules/pysnmp-pyasn1/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/pysnmp-pysmi/default.nix+46
This diff is too big to show here.
pkgs/development/python-modules/pysnmplib/default.nix+48
This diff is too big to show here.
pkgs/development/python-modules/pysnow/default.nix+37−21
This diff is too big to show here.
pkgs/development/python-modules/pyspark/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/pytenable/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pytest-aiohttp/default.nix+11−13
This diff is too big to show here.
pkgs/development/python-modules/pytest-ansible/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/pytest-astropy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pytest-asyncio/default.nix+8−4
This diff is too big to show here.
pkgs/development/python-modules/pytest-check/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pytest-datafiles/default.nix+33−8
This diff is too big to show here.
pkgs/development/python-modules/pytest-describe/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/pytest-httpbin/default.nix+6
This diff is too big to show here.
pkgs/development/python-modules/pytest-isort/default.nix+48−10
This diff is too big to show here.
pkgs/development/python-modules/pytest-metadata/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/pytest-mock/default.nix+9
This diff is too big to show here.
pkgs/development/python-modules/pytest-mpl/default.nix+18−3
This diff is too big to show here.
pkgs/development/python-modules/pytest-pep257/default.nix−20
This diff is too big to show here.
pkgs/development/python-modules/pytest-shutil/default.nix+8−3
This diff is too big to show here.
pkgs/development/python-modules/pytest-snapshot/default.nix+6−3
This diff is too big to show here.
pkgs/development/python-modules/pytest-testmon/default.nix+6−11
This diff is too big to show here.
pkgs/development/python-modules/pytest-xdist/default.nix+10−1
This diff is too big to show here.
pkgs/development/python-modules/pytest-xdist/setup-hook.sh+18
This diff is too big to show here.
pkgs/development/python-modules/pytest/default.nix+24−27
This diff is too big to show here.
pkgs/development/python-modules/python-barcode/default.nix+48
This diff is too big to show here.
pkgs/development/python-modules/python-benedict/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/python-binance/default.nix+8−4
This diff is too big to show here.
pkgs/development/python-modules/python-dotenv/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/python-efl/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/python-family-hub-local/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/python-gitlab/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/python-google-nest/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/python-kasa/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/python-logstash/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/python-miio/default.nix+18−15
This diff is too big to show here.
pkgs/development/python-modules/python-pae/default.nix+39
This diff is too big to show here.
pkgs/development/python-modules/python-registry/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/python-smarttub/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/python-sql/default.nix+24−8
This diff is too big to show here.
pkgs/development/python-modules/python-twitter/default.nix+30−9
This diff is too big to show here.
pkgs/development/python-modules/python-vagrant/default.nix+7−2
This diff is too big to show here.
pkgs/development/python-modules/python3-saml/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/pytibber/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pytomorrowio/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/pytools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pytorch-metric-learning/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/pytorch-pfn-extras/default.nix+21−5
This diff is too big to show here.
pkgs/development/python-modules/pytorch/bin.nix+1
This diff is too big to show here.
pkgs/development/python-modules/pytorch/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/pytradfri/default.nix+8−5
This diff is too big to show here.
pkgs/development/python-modules/pytrafikverket/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/pyttsx3/default.nix+24
This diff is too big to show here.
pkgs/development/python-modules/pytz/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyupgrade/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyvesync/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pyvex/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/pyvicare/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/pyvips/default.nix+8−8
This diff is too big to show here.
pkgs/development/python-modules/pyvis/default.nix+8−8
This diff is too big to show here.
pkgs/development/python-modules/pyvo/default.nix+56
This diff is too big to show here.
pkgs/development/python-modules/pywavelets/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pywayland/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/pywebview/default.nix+18−6
This diff is too big to show here.
pkgs/development/python-modules/pywinrm/default.nix+28−12
This diff is too big to show here.
pkgs/development/python-modules/pywlroots/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/qiskit-aer/default.nix+8−9
This diff is too big to show here.
pkgs/development/python-modules/qiskit-finance/default.nix+4
This diff is too big to show here.
pkgs/development/python-modules/qiskit-ibmq-provider/default.nix+6−5
This diff is too big to show here.
pkgs/development/python-modules/qiskit-nature/default.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/qiskit-terra/default.nix+20−14
This diff is too big to show here.
pkgs/development/python-modules/qiskit/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/qtconsole/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/radio_beam/default.nix+14−3
This diff is too big to show here.
pkgs/development/python-modules/rapidfuzz-capi/default.nix+28
This diff is too big to show here.
pkgs/development/python-modules/rapidfuzz/default.nix+34−10
This diff is too big to show here.
pkgs/development/python-modules/ratelimiter/default.nix+21−13
This diff is too big to show here.
pkgs/development/python-modules/readme_renderer/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/redis/default.nix+24−7
This diff is too big to show here.
pkgs/development/python-modules/reedsolo/default.nix+17−4
This diff is too big to show here.
pkgs/development/python-modules/renault-api/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/reorder-python-imports/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/reportlab/default.nix+7−3
This diff is too big to show here.
pkgs/development/python-modules/requests-cache/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/requests-http-signature/default.nix+16−4
This diff is too big to show here.
pkgs/development/python-modules/requests-pkcs12/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/requests/default.nix+12−8
This diff is too big to show here.
pkgs/development/python-modules/responses/default.nix+7−5
This diff is too big to show here.
pkgs/development/python-modules/rfc6555/default.nix+4−6
This diff is too big to show here.
pkgs/development/python-modules/rich/default.nix+4−5
This diff is too big to show here.
pkgs/development/python-modules/ring-doorbell/default.nix+11−7
This diff is too big to show here.
pkgs/development/python-modules/ripser/default.nix+12−6
This diff is too big to show here.
pkgs/development/python-modules/rjpl/default.nix+37
This diff is too big to show here.
pkgs/development/python-modules/rns/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/robotframework-tools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ropper/default.nix+26−15
This diff is too big to show here.
pkgs/development/python-modules/rova/default.nix+40
This diff is too big to show here.
pkgs/development/python-modules/rtsp-to-webrtc/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/s3-credentials/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/sabyenc3/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/sagemaker/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/samsungctl/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/samsungtvws/default.nix+42−9
This diff is too big to show here.
pkgs/development/python-modules/sanic/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/sapi-python-client/default.nix−30
This diff is too big to show here.
pkgs/development/python-modules/schema-salad/default.nix+5−3
This diff is too big to show here.
pkgs/development/python-modules/scikit-build/default.nix+33−23
This diff is too big to show here.
pkgs/development/python-modules/scikit-learn-extra/default.nix+1
This diff is too big to show here.
pkgs/development/python-modules/scikit-learn/default.nix−2
This diff is too big to show here.
pkgs/development/python-modules/scikit-survival/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/scmrepo/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/seabreeze/default.nix+5−2
This diff is too big to show here.
pkgs/development/python-modules/secretstorage/default.nix+17−6
This diff is too big to show here.
pkgs/development/python-modules/securetar/default.nix+41
This diff is too big to show here.
pkgs/development/python-modules/segyio/default.nix+55
This diff is too big to show here.
pkgs/development/python-modules/sendgrid/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/sentry-sdk/default.nix+24−10
This diff is too big to show here.
pkgs/development/python-modules/servefile/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/service_identity/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/setupmeta/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/setuptools-rust/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/setuptools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/setuptools/setuptools-distutils-C++.patch+18−54
This diff is too big to show here.
pkgs/development/python-modules/seventeentrack/default.nix+61
This diff is too big to show here.
pkgs/development/python-modules/shapely/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/shapely/library-paths.patch+49−23
This diff is too big to show here.
pkgs/development/python-modules/shiboken2/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/shiv/default.nix+34
This diff is too big to show here.
pkgs/development/python-modules/shtab/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/signedjson/default.nix+31−18
This diff is too big to show here.
pkgs/development/python-modules/simple-salesforce/default.nix+6
This diff is too big to show here.
pkgs/development/python-modules/simplejson/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/simplisafe-python/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/skein/default.nix+34−13
This diff is too big to show here.
pkgs/development/python-modules/skein/skeinjar.nix+11−12
This diff is too big to show here.
pkgs/development/python-modules/skein/skeinrepo.nix−44
This diff is too big to show here.
pkgs/development/python-modules/skia-pathops/default.nix+43
This diff is too big to show here.
pkgs/development/python-modules/skytemple-files/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/skytemple-rust/default.nix+15−6
This diff is too big to show here.
pkgs/development/python-modules/skytemple-ssb-debugger/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/slack-sdk/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/slither-analyzer/default.nix+10−6
This diff is too big to show here.
pkgs/development/python-modules/slixmpp/0001-xep_0030-allow-extra-args-in-get_info_from_domain.patch+36
This diff is too big to show here.
pkgs/development/python-modules/slixmpp/default.nix+5−2
This diff is too big to show here.
pkgs/development/python-modules/smart-open/default.nix+8−26
This diff is too big to show here.
pkgs/development/python-modules/snowflake-connector-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/snowflake-sqlalchemy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/social-auth-core/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/socid-extractor/default.nix+7−1
This diff is too big to show here.
pkgs/development/python-modules/sortedcontainers/default.nix+31−16
This diff is too big to show here.
pkgs/development/python-modules/spacy-transformers/default.nix+9−7
This diff is too big to show here.
pkgs/development/python-modules/spacy/default.nix+26−21
This diff is too big to show here.
pkgs/development/python-modules/sparqlwrapper/default.nix+7−10
This diff is too big to show here.
pkgs/development/python-modules/sphinx-jinja/default.nix+9−12
This diff is too big to show here.
pkgs/development/python-modules/sphinx/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/sphinx_rtd_theme/default.nix+1−1
This diff is too big to show here.
pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix+14−6
This diff is too big to show here.
pkgs/development/python-modules/sphinxcontrib-spelling/default.nix+21−7
This diff is too big to show here.
pkgs/development/python-modules/sphinxext-opengraph/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/spyder-kernels/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/spyder/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/sqlalchemy-imageattach/default.nix−42
This diff is too big to show here.
pkgs/development/python-modules/sqlalchemy-mixins/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/sqlalchemy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/sqlite-utils/default.nix+8−2
This diff is too big to show here.
pkgs/development/python-modules/sqlitedict/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/sqlmap/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/srsly/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/srvlookup/default.nix+28−11
This diff is too big to show here.
pkgs/development/python-modules/starlette/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/staticjinja/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/stookalert/default.nix+33
This diff is too big to show here.
pkgs/development/python-modules/stringly/default.nix+28
This diff is too big to show here.
pkgs/development/python-modules/stripe/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/sumo/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/sunpy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/superqt/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/svdtools/default.nix+9−11
This diff is too big to show here.
pkgs/development/python-modules/svg-path/default.nix+27−3
This diff is too big to show here.
pkgs/development/python-modules/swspotify/default.nix+36−19
This diff is too big to show here.
pkgs/development/python-modules/symengine/default.nix+11−4
This diff is too big to show here.
pkgs/development/python-modules/sympy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/syslog-rfc5424-formatter/default.nix+10−4
This diff is too big to show here.
pkgs/development/python-modules/tablib/default.nix+13−9
This diff is too big to show here.
pkgs/development/python-modules/tellduslive/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/tensorflow-datasets/default.nix+7−1
This diff is too big to show here.
pkgs/development/python-modules/tensorflow/bin.nix+4−4
This diff is too big to show here.
pkgs/development/python-modules/tensorflow/binary-hashes.nix+31−19
This diff is too big to show here.
pkgs/development/python-modules/tensorflow/prefetcher.sh+7−4
This diff is too big to show here.
pkgs/development/python-modules/terminado/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tern/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/teslajsonpy/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/testing-common-database/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/textual/default.nix+16−13
This diff is too big to show here.
pkgs/development/python-modules/tifffile/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/timetagger/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/tldextract/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tomlkit/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/torchinfo/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tornado/default.nix+14−8
This diff is too big to show here.
pkgs/development/python-modules/total-connect-client/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tpm2-pytss/default.nix+40−19
This diff is too big to show here.
pkgs/development/python-modules/tqdm/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/treelog/default.nix+28
This diff is too big to show here.
pkgs/development/python-modules/trimesh/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/trytond/default.nix+9
This diff is too big to show here.
pkgs/development/python-modules/tubeup/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tweepy/default.nix+6−6
This diff is too big to show here.
pkgs/development/python-modules/twill/default.nix+18−8
This diff is too big to show here.
pkgs/development/python-modules/twine/default.nix+13−11
This diff is too big to show here.
pkgs/development/python-modules/twisted/default.nix+5−5
This diff is too big to show here.
pkgs/development/python-modules/twitch-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/twitterapi/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/txtorcon/default.nix+8−15
This diff is too big to show here.
pkgs/development/python-modules/typer/default.nix+10−9
This diff is too big to show here.
pkgs/development/python-modules/types-cryptography/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-dateutil/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-decorator/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-freezegun/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-paramiko/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-pytz/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-requests/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-setuptools/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-tabulate/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-toml/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-typed-ast/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/types-urllib3/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/typical/default.nix+10−9
This diff is too big to show here.
pkgs/development/python-modules/tzdata/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/tzlocal/default.nix+3−2
This diff is too big to show here.
pkgs/development/python-modules/uamqp/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ufo2ft/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ufoLib2/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/uharfbuzz/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/umap-learn/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/update-dotdee/default.nix+42−3
This diff is too big to show here.
pkgs/development/python-modules/urllib3/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/ush/default.nix+10−2
This diff is too big to show here.
pkgs/development/python-modules/validators/default.nix+2
This diff is too big to show here.
pkgs/development/python-modules/validictory/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/variants/default.nix+2−1
This diff is too big to show here.
pkgs/development/python-modules/vdirsyncer/default.nix+13−8
This diff is too big to show here.
pkgs/development/python-modules/vertica-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/virtualenv/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/vispy/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/vivisect/default.nix+27−3
This diff is too big to show here.
pkgs/development/python-modules/voluptuous/default.nix+15−11
This diff is too big to show here.
pkgs/development/python-modules/waitress/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/wallbox/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/wandb/default.nix+50−38
This diff is too big to show here.
pkgs/development/python-modules/wasm/default.nix+3
This diff is too big to show here.
pkgs/development/python-modules/watchdog/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/watchgod/default.nix+7−2
This diff is too big to show here.
pkgs/development/python-modules/websocket-client/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/webssh/default.nix+7−2
This diff is too big to show here.
pkgs/development/python-modules/webthing/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/weconnect-mqtt/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/weconnect/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/werkzeug/default.nix+10−3
This diff is too big to show here.
pkgs/development/python-modules/west/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/whodap/default.nix+3−3
This diff is too big to show here.
pkgs/development/python-modules/widgetsnbextension/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/wifi/default.nix+45
This diff is too big to show here.
pkgs/development/python-modules/winacl/default.nix+6−2
This diff is too big to show here.
pkgs/development/python-modules/winsspi/default.nix+15−5
This diff is too big to show here.
pkgs/development/python-modules/wsproto/default.nix+10−9
This diff is too big to show here.
pkgs/development/python-modules/wxPython/4.1.nix+2
This diff is too big to show here.
pkgs/development/python-modules/xdis/default.nix+35−12
This diff is too big to show here.
pkgs/development/python-modules/xhtml2pdf/default.nix+7−3
This diff is too big to show here.
pkgs/development/python-modules/xknx/default.nix+10−5
This diff is too big to show here.
pkgs/development/python-modules/xml2rfc/default.nix+35−15
This diff is too big to show here.
pkgs/development/python-modules/xxhash/default.nix+5
This diff is too big to show here.
pkgs/development/python-modules/yamlfix/default.nix−5
This diff is too big to show here.
pkgs/development/python-modules/yanc/default.nix+5−5
This diff is too big to show here.
pkgs/development/python-modules/youtube-search-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/yoyo-migrations/default.nix+30
This diff is too big to show here.
pkgs/development/python-modules/yte/default.nix+57
This diff is too big to show here.
pkgs/development/python-modules/zarr/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zeroconf/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/zetup/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zha-quirks/default.nix+10−4
This diff is too big to show here.
pkgs/development/python-modules/zigpy-deconz/default.nix+6−3
This diff is too big to show here.
pkgs/development/python-modules/zigpy/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/zimports/default.nix+4−2
This diff is too big to show here.
pkgs/development/python-modules/zodb/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zodbpickle/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zope_testing/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zopfli/default.nix+6−5
This diff is too big to show here.
pkgs/development/python-modules/zulip/default.nix+6−14
This diff is too big to show here.
pkgs/development/python-modules/zwave-js-server-python/default.nix+2−2
This diff is too big to show here.
pkgs/development/python-modules/zwave-me-ws/default.nix+52
This diff is too big to show here.
pkgs/development/python2-modules/cryptography/default.nix+10−5
This diff is too big to show here.
pkgs/development/python2-modules/cryptography/vectors.nix+3−2
This diff is too big to show here.
pkgs/development/quickemu/default.nix+6−6
This diff is too big to show here.
pkgs/development/r-modules/bioc-annotation-packages.nix+2−1
This diff is too big to show here.
pkgs/development/r-modules/bioc-experiment-packages.nix+3−3
This diff is too big to show here.
pkgs/development/r-modules/bioc-packages.nix+57−57
This diff is too big to show here.
pkgs/development/r-modules/cran-packages.nix+1293−1129
This diff is too big to show here.
pkgs/development/ruby-modules/bundler-app/default.nix+1−1
This diff is too big to show here.
pkgs/development/ruby-modules/with-packages/Gemfile+1
This diff is too big to show here.
pkgs/development/tools/altair-graphql-client/default.nix+3−4
This diff is too big to show here.
pkgs/development/tools/amazon-qldb-shell/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/ammonite/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/analysis/actionlint/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/brakeman/Gemfile.lock+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/brakeman/gemset.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/checkov/default.nix+4−3
This diff is too big to show here.
pkgs/development/tools/analysis/checkstyle/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/coan/default.nix+4
This diff is too big to show here.
pkgs/development/tools/analysis/codeql/default.nix+4−3
This diff is too big to show here.
pkgs/development/tools/analysis/cppcheck/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/cvehound/default.nix+17−12
This diff is too big to show here.
pkgs/development/tools/analysis/flow/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/oclgrind/default.nix+3−2
This diff is too big to show here.
pkgs/development/tools/analysis/radare2/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/analysis/rr/default.nix+11−5
This diff is too big to show here.
pkgs/development/tools/analysis/tfsec/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/apksigcopier/default.nix+31−16
This diff is too big to show here.
pkgs/development/tools/appthreat-depscan/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/asmfmt/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/azcopy/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/azure-functions-core-tools/default.nix−1
This diff is too big to show here.
pkgs/development/tools/bacon/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/bazel-gazelle/default.nix+1
This diff is too big to show here.
pkgs/development/tools/bazel-kazel/default.nix+1
This diff is too big to show here.
pkgs/development/tools/bingo/bingo_version.patch+13
This diff is too big to show here.
pkgs/development/tools/bingo/default.nix+7−5
This diff is too big to show here.
pkgs/development/tools/buf/default.nix+5−5
This diff is too big to show here.
pkgs/development/tools/build-managers/alibuild/default.nix+9−6
This diff is too big to show here.
pkgs/development/tools/build-managers/apache-maven/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_0_29/default.nix+3−7
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_1/default.nix+3−7
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_3/default.nix+5−7
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_3/gcc11.patch+24
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_4/default.nix+3−10
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_5/default.nix+3−11
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json+98−14
This diff is too big to show here.
pkgs/development/tools/build-managers/bazel/buildtools/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/build-managers/bloop/default.nix+18−47
This diff is too big to show here.
pkgs/development/tools/build-managers/build2/default.nix+1
This diff is too big to show here.
pkgs/development/tools/build-managers/conan/default.nix+5−14
This diff is too big to show here.
pkgs/development/tools/build-managers/go-mk/default.nix+1
This diff is too big to show here.
pkgs/development/tools/build-managers/mage/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/meson/default.nix+7
This diff is too big to show here.
pkgs/development/tools/build-managers/mill/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/rebar3/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/build-managers/redo-apenwarr/default.nix+1−2
This diff is too big to show here.
pkgs/development/tools/build-managers/rocm-cmake/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/samurai/default.nix+26−4
This diff is too big to show here.
pkgs/development/tools/build-managers/scala-cli/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/build-managers/tup/default.nix+2
This diff is too big to show here.
pkgs/development/tools/build-managers/tup/fusermount-setuid.patch+31
This diff is too big to show here.
pkgs/development/tools/build-managers/tup/setup-hook.sh+2−2
This diff is too big to show here.
pkgs/development/tools/build-managers/wafHook/setup-hook.sh+4
This diff is too big to show here.
pkgs/development/tools/buildkit/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/ccloud-cli/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/checkmate/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/clj-kondo/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/clog-cli/default.nix+1
This diff is too big to show here.
pkgs/development/tools/compile-daemon/default.nix+1
This diff is too big to show here.
pkgs/development/tools/confluent-cli/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/conftest/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/continuous-integration/buildkite-agent/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/continuous-integration/buildkite-cli/default.nix+1
This diff is too big to show here.
pkgs/development/tools/continuous-integration/dagger/default.nix+28
This diff is too big to show here.
pkgs/development/tools/continuous-integration/github-runner/default.nix+13−6
This diff is too big to show here.
pkgs/development/tools/continuous-integration/github-runner/deps.nix+5−5
This diff is too big to show here.
pkgs/development/tools/continuous-integration/gitlab-runner/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/continuous-integration/jenkins/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/coursier/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/dapr/cli/default.nix+15−8
This diff is too big to show here.
pkgs/development/tools/database/beekeeper-studio/default.nix+5−4
This diff is too big to show here.
pkgs/development/tools/database/clickhouse-backup/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/database/liquibase/default.nix+24−9
This diff is too big to show here.
pkgs/development/tools/database/litecli/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/database/pg_activity/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/database/pg_checksums/default.nix+1
This diff is too big to show here.
pkgs/development/tools/database/pgcli/default.nix+4−6
This diff is too big to show here.
pkgs/development/tools/database/prisma-engines/default.nix+15−3
This diff is too big to show here.
pkgs/development/tools/database/sqldeveloper/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/database/sqlfluff/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/database/termdbms/default.nix+1
This diff is too big to show here.
pkgs/development/tools/ddosify/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/dive/default.nix−2
This diff is too big to show here.
pkgs/development/tools/doctl/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/dprint/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/earthly/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/easyjson/default.nix+6−5
This diff is too big to show here.
pkgs/development/tools/easyjson/deps.nix+11
This diff is too big to show here.
pkgs/development/tools/efm-langserver/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/electron/default.nix+35−25
This diff is too big to show here.
pkgs/development/tools/electron/generic.nix+6−5
This diff is too big to show here.
pkgs/development/tools/esbuild/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/evans/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/fdroidserver/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/flyway/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/fq/default.nix+5−5
This diff is too big to show here.
pkgs/development/tools/fx/default.nix+22
This diff is too big to show here.
pkgs/development/tools/ginkgo/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/git-series/default.nix+14−32
This diff is too big to show here.
pkgs/development/tools/global-platform-pro/default.nix+1
This diff is too big to show here.
pkgs/development/tools/go-containerregistry/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/go-migrate/default.nix+4−2
This diff is too big to show here.
pkgs/development/tools/go-minimock/default.nix+1
This diff is too big to show here.
pkgs/development/tools/go-mockery/default.nix+1
This diff is too big to show here.
pkgs/development/tools/go-motion/default.nix+10−13
This diff is too big to show here.
pkgs/development/tools/go-protobuf/default.nix−2
This diff is too big to show here.
pkgs/development/tools/go-swagger/default.nix+1
This diff is too big to show here.
pkgs/development/tools/go-toml/default.nix+8−6
This diff is too big to show here.
pkgs/development/tools/godot/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/gofumpt/default.nix−2
This diff is too big to show here.
pkgs/development/tools/gojq/default.nix+28
This diff is too big to show here.
pkgs/development/tools/golint/default.nix+9−4
This diff is too big to show here.
pkgs/development/tools/gomplate/default.nix+10−5
This diff is too big to show here.
pkgs/development/tools/gopls/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/gosec/default.nix−2
This diff is too big to show here.
pkgs/development/tools/gotestsum/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/gron/default.nix+4−12
This diff is too big to show here.
pkgs/development/tools/haskell/hyper-haskell/server.nix+8−1
This diff is too big to show here.
pkgs/development/tools/hcloud/default.nix+8−7
This diff is too big to show here.
pkgs/development/tools/hjson-go/default.nix+14−11
This diff is too big to show here.
pkgs/development/tools/htmltest/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/impl/default.nix+6−6
This diff is too big to show here.
pkgs/development/tools/jdt-language-server/default.nix+103
This diff is too big to show here.
pkgs/development/tools/jl/default.nix+6
This diff is too big to show here.
pkgs/development/tools/jsonnet-bundler/default.nix+1
This diff is too big to show here.
pkgs/development/tools/just/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/kdash/default.nix+34
This diff is too big to show here.
pkgs/development/tools/kotlin-language-server/default.nix+9−4
This diff is too big to show here.
pkgs/development/tools/krankerl/default.nix−2
This diff is too big to show here.
pkgs/development/tools/ktlint/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/kube-linter/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/metal-cli/default.nix+11−4
This diff is too big to show here.
pkgs/development/tools/metals/default.nix+6−11
This diff is too big to show here.
pkgs/development/tools/minizinc/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/misc/acr/default.nix+33
This diff is too big to show here.
pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch+137
This diff is too big to show here.
pkgs/development/tools/misc/binutils/0001-libtool.m4-update-macos-version-detection-block.patch+47
This diff is too big to show here.
pkgs/development/tools/misc/binutils/CVE-2020-35448.patch−77
This diff is too big to show here.
pkgs/development/tools/misc/binutils/CVE-2021-3487.patch−73
This diff is too big to show here.
pkgs/development/tools/misc/binutils/CVE-2021-45078.patch−239
This diff is too big to show here.
pkgs/development/tools/misc/binutils/bfd-elf-Dont-read-non-existing-secondary-relocs.patch−26
This diff is too big to show here.
pkgs/development/tools/misc/binutils/build-components-separately.patch+29−38
This diff is too big to show here.
pkgs/development/tools/misc/binutils/default.nix+117−101
This diff is too big to show here.
pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch−23
This diff is too big to show here.
pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch−292
This diff is too big to show here.
pkgs/development/tools/misc/binutils/mips64-default-n64.patch+82
This diff is too big to show here.
pkgs/development/tools/misc/blackfire/default.nix+67−27
This diff is too big to show here.
pkgs/development/tools/misc/blackfire/php-probe.nix+158−16
This diff is too big to show here.
pkgs/development/tools/misc/circleci-cli/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/misc/clojure-lsp/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/misc/d-feet/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/misc/devspace/default.nix+37
This diff is too big to show here.
pkgs/development/tools/misc/go-license-detector/default.nix+8−7
This diff is too big to show here.
pkgs/development/tools/misc/libtool/libtool2-macos11.patch−32
This diff is too big to show here.
pkgs/development/tools/misc/libtool/libtool2.nix+17−9
This diff is too big to show here.
pkgs/development/tools/misc/mkcert/default.nix+3−3
This diff is too big to show here.
pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix+1
This diff is too big to show here.
pkgs/development/tools/misc/patchelf/0.13.nix+23
This diff is too big to show here.
pkgs/development/tools/misc/patchelf/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/misc/pkgconf/default.nix+29−16
This diff is too big to show here.
pkgs/development/tools/misc/saleae-logic-2/default.nix+2−2
This diff is too big to show here.
pkgs/development/tools/misc/sccache/default.nix+2−1
This diff is too big to show here.
pkgs/development/tools/misc/semver-tool/default.nix+1
This diff is too big to show here.
pkgs/development/tools/misc/universal-ctags/default.nix+1−1
This diff is too big to show here.
pkgs/development/tools/mockgen/default.nix+8−3
This diff is too big to show here.
pkgs/development/tools/mold/default.nix+5−3
This diff is too big to show here.
pkgs/development/tools/mustache-go/default.nix+9−6
This diff is too big to show here.
pkgs/development/tools/mysql-shell/default.nix+154
This diff is too big to show here.
pkgs/development/tools/mysql-shell/fido2.cmake.patch+25
This diff is too big to show here.
pkgs/development/tools/nsis/default.nix+1
This diff is too big to show here.
pkgs/development/tools/ocaml/cppo/ocamlbuild.nix+1−1
This diff is too big to show here.
pkgs/development/tools/ocaml/dune/1.nix+1−1
This diff is too big to show here.
pkgs/development/tools/ocaml/dune/3.nix+2−2
This diff is too big to show here.
pkgs/development/tools/ocaml/merlin/4.x.nix+1−1
This diff is too big to show here.
pkgs/development/tools/omnisharp-roslyn/create-deps.sh+11−3
This diff is too big to show here.
pkgs/development/tools/omnisharp-roslyn/default.nix+8−2
This diff is too big to show here.
pkgs/development/tools/omnisharp-roslyn/deps.nix+249−129
This diff is too big to show here.
pkgs/development/tools/packet-sd/default.nix+1
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/default.nix+3
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-janet-simple.json+11
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json+4−4
This diff is too big to show here.
pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json+4−4
This diff is too big to show here.
1053 more files changed are not listed.